blob: ac50ead6cebc887e8042f32ce08962307cb7fcbf [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar5c736222010-01-06 20:54:52 +01002" Language: Scheme (R5RS + some R6RS extras)
Bram Moolenaar26852122016-05-24 20:02:38 +02003" Last Change: 2016 May 23
Bram Moolenaar293ee4d2004-12-09 21:34:53 +00004" Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
Bram Moolenaar21cf8232004-07-16 20:18:37 +00005" Original author: Dirk van Deun <dirk@igwe.vub.ac.be>
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" This script incorrectly recognizes some junk input as numerals:
8" parsing the complete system of Scheme numerals using the pattern
9" language is practically impossible: I did a lax approximation.
Bram Moolenaar5dc62522012-02-13 00:05:22 +010010
Bram Moolenaar21cf8232004-07-16 20:18:37 +000011" MzScheme extensions can be activated with setting is_mzscheme variable
Bram Moolenaar071d4272004-06-13 20:20:40 +000012
13" Suggestions and bug reports are solicited by the author.
14
15" Initializing:
16
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020017" quit when a syntax file was already loaded
18if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000019 finish
20endif
21
Bram Moolenaar5dc62522012-02-13 00:05:22 +010022let s:cpo_save = &cpo
23set cpo&vim
24
Bram Moolenaar071d4272004-06-13 20:20:40 +000025syn case ignore
26
27" Fascist highlighting: everything that doesn't fit the rules is an error...
28
Bram Moolenaar5c736222010-01-06 20:54:52 +010029syn match schemeError ![^ \t()\[\]";]*!
30syn match schemeError ")"
Bram Moolenaar071d4272004-06-13 20:20:40 +000031
32" Quoted and backquoted stuff
33
Bram Moolenaar21cf8232004-07-16 20:18:37 +000034syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
Bram Moolenaar071d4272004-06-13 20:20:40 +000035
36syn region schemeQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
37syn region schemeQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
38
39syn region schemeStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
40syn region schemeStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
41
Bram Moolenaar21cf8232004-07-16 20:18:37 +000042" Popular Scheme extension:
43" using [] as well as ()
44syn region schemeStrucRestricted matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
45syn region schemeStrucRestricted matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
Bram Moolenaar071d4272004-06-13 20:20:40 +000046
Bram Moolenaar21cf8232004-07-16 20:18:37 +000047syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
48syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
49
50syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALL
51syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALL
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
53syn region schemeUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
54syn region schemeUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
55
Bram Moolenaar21cf8232004-07-16 20:18:37 +000056syn region schemeUnquote matchgroup=Delimiter start=",\[" end="\]" contains=ALL
57syn region schemeUnquote matchgroup=Delimiter start=",@\[" end="\]" contains=ALL
58
59syn region schemeUnquote matchgroup=Delimiter start=",#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
60syn region schemeUnquote matchgroup=Delimiter start=",@#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
61
Bram Moolenaar071d4272004-06-13 20:20:40 +000062" R5RS Scheme Functions and Syntax:
63
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020064setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
66syn keyword schemeSyntax lambda and or if cond case define let let* letrec
67syn keyword schemeSyntax begin do delay set! else =>
68syn keyword schemeSyntax quote quasiquote unquote unquote-splicing
69syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules
Bram Moolenaar5c736222010-01-06 20:54:52 +010070" R6RS
71syn keyword schemeSyntax define-record-type fields protocol
Bram Moolenaar071d4272004-06-13 20:20:40 +000072
73syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
74syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
75syn keyword schemeFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
76syn keyword schemeFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
77syn keyword schemeFunc cddaar cddadr cdddar cddddr null? list? list length
78syn keyword schemeFunc append reverse list-ref memq memv member assq assv assoc
79syn keyword schemeFunc symbol? symbol->string string->symbol number? complex?
80syn keyword schemeFunc real? rational? integer? exact? inexact? = < > <= >=
81syn keyword schemeFunc zero? positive? negative? odd? even? max min + * - / abs
82syn keyword schemeFunc quotient remainder modulo gcd lcm numerator denominator
83syn keyword schemeFunc floor ceiling truncate round rationalize exp log sin cos
84syn keyword schemeFunc tan asin acos atan sqrt expt make-rectangular make-polar
85syn keyword schemeFunc real-part imag-part magnitude angle exact->inexact
86syn keyword schemeFunc inexact->exact number->string string->number char=?
87syn keyword schemeFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
88syn keyword schemeFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
89syn keyword schemeFunc char-numeric? char-whitespace? char-upper-case?
90syn keyword schemeFunc char-lower-case?
91syn keyword schemeFunc char->integer integer->char char-upcase char-downcase
92syn keyword schemeFunc string? make-string string string-length string-ref
93syn keyword schemeFunc string-set! string=? string-ci=? string<? string-ci<?
94syn keyword schemeFunc string>? string-ci>? string<=? string-ci<=? string>=?
95syn keyword schemeFunc string-ci>=? substring string-append vector? make-vector
96syn keyword schemeFunc vector vector-length vector-ref vector-set! procedure?
97syn keyword schemeFunc apply map for-each call-with-current-continuation
98syn keyword schemeFunc call-with-input-file call-with-output-file input-port?
99syn keyword schemeFunc output-port? current-input-port current-output-port
100syn keyword schemeFunc open-input-file open-output-file close-input-port
101syn keyword schemeFunc close-output-port eof-object? read read-char peek-char
102syn keyword schemeFunc write display newline write-char call/cc
103syn keyword schemeFunc list-tail string->list list->string string-copy
104syn keyword schemeFunc string-fill! vector->list list->vector vector-fill!
105syn keyword schemeFunc force with-input-from-file with-output-to-file
106syn keyword schemeFunc char-ready? load transcript-on transcript-off eval
107syn keyword schemeFunc dynamic-wind port? values call-with-values
108syn keyword schemeFunc scheme-report-environment null-environment
109syn keyword schemeFunc interaction-environment
Bram Moolenaar5c736222010-01-06 20:54:52 +0100110" R6RS
111syn keyword schemeFunc make-eq-hashtable make-eqv-hashtable make-hashtable
112syn keyword schemeFunc hashtable? hashtable-size hashtable-ref hashtable-set!
113syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
114syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
115syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100116syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash
Bram Moolenaar5c736222010-01-06 20:54:52 +0100117syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
118syn keyword schemeFunc remp remove remv remq memp assp cons*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120" ... so that a single + or -, inside a quoted context, would not be
121" interpreted as a number (outside such contexts, it's a schemeFunc)
122
Bram Moolenaar5c736222010-01-06 20:54:52 +0100123syn match schemeDelimiter !\.[ \t\[\]()";]!me=e-1
124syn match schemeDelimiter !\.$!
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125" ... and a single dot is not a number but a delimiter
126
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
128
Bram Moolenaar5c736222010-01-06 20:54:52 +0100129syn match schemeOther ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*,
130syn match schemeError ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131
Bram Moolenaar5c736222010-01-06 20:54:52 +0100132syn match schemeOther "\.\.\."
133syn match schemeError !\.\.\.[^ \t\[\]()";]\+!
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134" ... a special identifier
135
Bram Moolenaar5c736222010-01-06 20:54:52 +0100136syn match schemeConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*[ \t\[\]()";],me=e-1
137syn match schemeConstant ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*$,
138syn match schemeError ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
Bram Moolenaar5c736222010-01-06 20:54:52 +0100140syn match schemeConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1
141syn match schemeConstant ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
142syn match schemeError ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143
144" Non-quoted lists, and strings:
145
146syn region schemeStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
147syn region schemeStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
148
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000149syn region schemeStruc matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALL
150syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
151
152" Simple literals:
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200153syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+ contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154
155" Comments:
156
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200157syn match schemeComment ";.*$" contains=@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000159
160" Writing out the complete description of Scheme numerals without
161" using variables is a day's work for a trained secretary...
162
Bram Moolenaar5c736222010-01-06 20:54:52 +0100163syn match schemeOther ![+-][ \t\[\]()";]!me=e-1
164syn match schemeOther ![+-]$!
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000165"
166" This is a useful lax approximation:
Bram Moolenaar5c736222010-01-06 20:54:52 +0100167syn match schemeNumber "[-#+.]\=[0-9][-#+/0-9a-f@i.boxesfdl]*"
168syn match schemeError ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*!
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000169
Bram Moolenaar5c736222010-01-06 20:54:52 +0100170syn match schemeBoolean "#[tf]"
171syn match schemeError !#[tf][^ \t\[\]()";]\+!
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000172
Bram Moolenaar5c736222010-01-06 20:54:52 +0100173syn match schemeCharacter "#\\"
174syn match schemeCharacter "#\\."
175syn match schemeError !#\\.[^ \t\[\]()";]\+!
176syn match schemeCharacter "#\\space"
177syn match schemeError !#\\space[^ \t\[\]()";]\+!
178syn match schemeCharacter "#\\newline"
179syn match schemeError !#\\newline[^ \t\[\]()";]\+!
180
181" R6RS
182syn match schemeCharacter "#\\x[0-9a-fA-F]\+"
183
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000184
185if exists("b:is_mzscheme") || exists("is_mzscheme")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000186 " MzScheme extensions
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000187 " multiline comment
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200188 syn region schemeComment start="#|" end="|#" contains=@Spell
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000189
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000190 " #%xxx are the special MzScheme identifiers
Bram Moolenaar5c736222010-01-06 20:54:52 +0100191 syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000192 " anything limited by |'s is identifier
Bram Moolenaar5c736222010-01-06 20:54:52 +0100193 syn match schemeOther "|[^|]\+|"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000194
Bram Moolenaar5c736222010-01-06 20:54:52 +0100195 syn match schemeCharacter "#\\\%(return\|tab\)"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000196
197 " Modules require stmt
198 syn keyword schemeExtSyntax module require dynamic-require lib prefix all-except prefix-all-except rename
199 " modules provide stmt
200 syn keyword schemeExtSyntax provide struct all-from all-from-except all-defined all-defined-except
201 " Other from MzScheme
202 syn keyword schemeExtSyntax with-handlers when unless instantiate define-struct case-lambda syntax-case
203 syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
204 syn keyword schemeExtSyntax datum->syntax-object
205 syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100206 syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000207 syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
208 syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000209
210 syn keyword schemeExtFunc format system-type current-extension-compiler current-extension-linker
211 syn keyword schemeExtFunc use-standard-linker use-standard-compiler
212 syn keyword schemeExtFunc find-executable-path append-object-suffix append-extension-suffix
213 syn keyword schemeExtFunc current-library-collection-paths current-extension-compiler-flags make-parameter
214 syn keyword schemeExtFunc current-directory build-path normalize-path current-extension-linker-flags
215 syn keyword schemeExtFunc file-exists? directory-exists? delete-directory/files delete-directory delete-file
216 syn keyword schemeExtFunc system compile-file system-library-subpath getenv putenv current-standard-link-libraries
217 syn keyword schemeExtFunc remove* file-size find-files fold-files directory-list shell-execute split-path
218 syn keyword schemeExtFunc current-error-port process/ports process printf fprintf open-input-string open-output-string
219 syn keyword schemeExtFunc get-output-string
220 " exceptions
221 syn keyword schemeExtFunc exn exn:application:arity exn:application:continuation exn:application:fprintf:mismatch
222 syn keyword schemeExtFunc exn:application:mismatch exn:application:type exn:application:mismatch exn:break exn:i/o:filesystem exn:i/o:port
223 syn keyword schemeExtFunc exn:i/o:port:closed exn:i/o:tcp exn:i/o:udp exn:misc exn:misc:application exn:misc:unsupported exn:module exn:read
224 syn keyword schemeExtFunc exn:read:non-char exn:special-comment exn:syntax exn:thread exn:user exn:variable exn:application:mismatch
225 syn keyword schemeExtFunc exn? exn:application:arity? exn:application:continuation? exn:application:fprintf:mismatch? exn:application:mismatch?
226 syn keyword schemeExtFunc exn:application:type? exn:application:mismatch? exn:break? exn:i/o:filesystem? exn:i/o:port? exn:i/o:port:closed?
227 syn keyword schemeExtFunc exn:i/o:tcp? exn:i/o:udp? exn:misc? exn:misc:application? exn:misc:unsupported? exn:module? exn:read? exn:read:non-char?
228 syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
229 " Command-line parsing
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100230 syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000231
232 " syntax quoting, unquoting and quasiquotation
233 syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
234 syn region schemeUnquote matchgroup=Delimiter start="#,@" end=![ \t\[\]()";]!me=e-1 contains=ALL
235 syn region schemeUnquote matchgroup=Delimiter start="#,(" end=")" contains=ALL
236 syn region schemeUnquote matchgroup=Delimiter start="#,@(" end=")" contains=ALL
237 syn region schemeUnquote matchgroup=Delimiter start="#,\[" end="\]" contains=ALL
238 syn region schemeUnquote matchgroup=Delimiter start="#,@\[" end="\]" contains=ALL
239 syn region schemeQuoted matchgroup=Delimiter start="#['`]" end=![ \t()\[\]";]!me=e-1 contains=ALL
240 syn region schemeQuoted matchgroup=Delimiter start="#['`](" matchgroup=Delimiter end=")" contains=ALL
Bram Moolenaar26852122016-05-24 20:02:38 +0200241
242 " Identifiers are very liberal in MzScheme/Racket
243 syn match schemeOther ![^()[\]{}",'`;#|\\ ]\+!
244
245 " Language setting
246 syn match schemeLang "#lang [-+_/A-Za-z0-9]\+\>"
247
248 " Various number forms
249 syn match schemeNumber "[-+]\=[0-9]\+\(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\>"
250 syn match schemeNumber "[-+]\=\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\>"
251 syn match schemeNumber "[-+]\=[0-9]\+/[0-9]\+\>"
252 syn match schemeNumber "\([-+]\=\([0-9]\+\(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\|\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\|[0-9]\+/[0-9]\+\)\)\=[-+]\([0-9]\+\(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\|\.[0-9]\+\(e[-+]\=[0-9]\+\)\=\|[0-9]\+/[0-9]\+\)\=i\>"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000253endif
254
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000255
256if exists("b:is_chicken") || exists("is_chicken")
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000257 " multiline comment
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200258 syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=@Spell,schemeMultilineComment
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000259
Bram Moolenaar5c736222010-01-06 20:54:52 +0100260 syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
261 syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000262
263 syn keyword schemeExtSyntax unit uses declare hide foreign-declare foreign-parse foreign-parse/spec
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000264 syn keyword schemeExtSyntax foreign-lambda foreign-lambda* define-external define-macro load-library
265 syn keyword schemeExtSyntax let-values let*-values letrec-values ->string require-extension
266 syn keyword schemeExtSyntax let-optionals let-optionals* define-foreign-variable define-record
267 syn keyword schemeExtSyntax pointer tag-pointer tagged-pointer? define-foreign-type
268 syn keyword schemeExtSyntax require require-for-syntax cond-expand and-let* receive argc+argv
269 syn keyword schemeExtSyntax fixnum? fx= fx> fx< fx>= fx<= fxmin fxmax
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000270 syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
271
272 " here-string
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200273 syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100274
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000275 if filereadable(expand("<sfile>:p:h")."/cpp.vim")
276 unlet! b:current_syntax
277 syn include @ChickenC <sfile>:p:h/cpp.vim
278 syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-declare "+ end=+")\@=+ contains=@ChickenC
279 syn region ChickenC matchgroup=schemeComment start=+foreign-declare\s*#<<\z(.*\)$+hs=s+15 end=+^\z1$+ contains=@ChickenC
280 syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse "+ end=+")\@=+ contains=@ChickenC
281 syn region ChickenC matchgroup=schemeComment start=+foreign-parse\s*#<<\z(.*\)$+hs=s+13 end=+^\z1$+ contains=@ChickenC
282 syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse/spec "+ end=+")\@=+ contains=@ChickenC
283 syn region ChickenC matchgroup=schemeComment start=+foreign-parse/spec\s*#<<\z(.*\)$+hs=s+18 end=+^\z1$+ contains=@ChickenC
284 syn region ChickenC matchgroup=schemeComment start=+#>+ end=+<#+ contains=@ChickenC
285 syn region ChickenC matchgroup=schemeComment start=+#>?+ end=+<#+ contains=@ChickenC
286 syn region ChickenC matchgroup=schemeComment start=+#>!+ end=+<#+ contains=@ChickenC
287 syn region ChickenC matchgroup=schemeComment start=+#>\$+ end=+<#+ contains=@ChickenC
288 syn region ChickenC matchgroup=schemeComment start=+#>%+ end=+<#+ contains=@ChickenC
289 endif
290
Bram Moolenaara7241f52008-06-24 20:39:31 +0000291 " suggested by Alex Queiroz
Bram Moolenaar5c736222010-01-06 20:54:52 +0100292 syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200293 syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000294endif
295
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296" Synchronization and the wrapping up...
297
298syn sync match matchPlace grouphere NONE "^[^ \t]"
299" ... i.e. synchronize on a line that starts at the left margin
300
301" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200302" Only when an item doesn't have highlighting yet
303command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200305HiLink schemeSyntax Statement
306HiLink schemeFunc Function
Bram Moolenaar071d4272004-06-13 20:20:40 +0000307
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200308HiLink schemeString String
309HiLink schemeCharacter Character
310HiLink schemeNumber Number
311HiLink schemeBoolean Boolean
Bram Moolenaar071d4272004-06-13 20:20:40 +0000312
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200313HiLink schemeDelimiter Delimiter
314HiLink schemeConstant Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200316HiLink schemeComment Comment
317HiLink schemeMultilineComment Comment
318HiLink schemeError Error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000319
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200320HiLink schemeExtSyntax Type
321HiLink schemeExtFunc PreProc
Bram Moolenaar26852122016-05-24 20:02:38 +0200322
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200323HiLink schemeLang PreProc
Bram Moolenaar26852122016-05-24 20:02:38 +0200324
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200325delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000326
327let b:current_syntax = "scheme"
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100328
329let &cpo = s:cpo_save
330unlet s:cpo_save