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