1" Vim syntax file 2" Language: Monk (See-Beyond Technologies) 3" Maintainer: Mike Litherland <litherm@ccf.org> 4" Last Change: March 6, 2002 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 <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 24" For version 5.x: Clear all syntax items 25" For version 6.x: Quit when a syntax file was already loaded 26if version < 600 27 syntax clear 28elseif exists("b:current_syntax") 29 finish 30endif 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 60if version < 600 61 set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_ 62else 63 setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_ 64endif 65 66syn keyword monkSyntax lambda and or if cond case define let let* letrec 67syn keyword monkSyntax begin do delay set! else => 68syn keyword monkSyntax quote quasiquote unquote unquote-splicing 69syn keyword monkSyntax define-syntax let-syntax letrec-syntax syntax-rules 70 71syn keyword monkFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car! 72syn keyword monkFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr 73syn keyword monkFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr 74syn keyword monkFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr 75syn keyword monkFunc cddaar cddadr cdddar cddddr null? list? list length 76syn keyword monkFunc append reverse list-ref memq memv member assq assv assoc 77syn keyword monkFunc symbol? symbol->string string->symbol number? complex? 78syn keyword monkFunc real? rational? integer? exact? inexact? = < > <= >= 79syn keyword monkFunc zero? positive? negative? odd? even? max min + * - / abs 80syn keyword monkFunc quotient remainder modulo gcd lcm numerator denominator 81syn keyword monkFunc floor ceiling truncate round rationalize exp log sin cos 82syn keyword monkFunc tan asin acos atan sqrt expt make-rectangular make-polar 83syn keyword monkFunc real-part imag-part magnitude angle exact->inexact 84syn keyword monkFunc inexact->exact number->string string->number char=? 85syn keyword monkFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=? 86syn keyword monkFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char? 87syn keyword monkFunc char-numeric? char-whitespace? char-upper-case? 88syn keyword monkFunc char-lower-case? 89syn keyword monkFunc char->integer integer->char char-upcase char-downcase 90syn keyword monkFunc string? make-string string string-length string-ref 91syn keyword monkFunc string-set! string=? string-ci=? string<? string-ci<? 92syn keyword monkFunc string>? string-ci>? string<=? string-ci<=? string>=? 93syn keyword monkFunc string-ci>=? substring string-append vector? make-vector 94syn keyword monkFunc vector vector-length vector-ref vector-set! procedure? 95syn keyword monkFunc apply map for-each call-with-current-continuation 96syn keyword monkFunc call-with-input-file call-with-output-file input-port? 97syn keyword monkFunc output-port? current-input-port current-output-port 98syn keyword monkFunc open-input-file open-output-file close-input-port 99syn keyword monkFunc close-output-port eof-object? read read-char peek-char 100syn keyword monkFunc write display newline write-char call/cc 101syn keyword monkFunc list-tail string->list list->string string-copy 102syn keyword monkFunc string-fill! vector->list list->vector vector-fill! 103syn keyword monkFunc force with-input-from-file with-output-to-file 104syn keyword monkFunc char-ready? load transcript-on transcript-off eval 105syn keyword monkFunc dynamic-wind port? values call-with-values 106syn keyword monkFunc monk-report-environment null-environment 107syn keyword monkFunc interaction-environment 108 109" Keywords specific to STC's implementation 110 111syn keyword monkFunc $event-clear $event-parse $event->string $make-event-map 112syn keyword monkFunc $resolve-event-definition change-pattern copy copy-strip 113syn keyword monkFunc count-data-children count-map-children count-rep data-map 114syn keyword monkFunc duplicate duplicate-strip file-check file-lookup get 115syn keyword monkFunc insert list-lookup node-has-data? not-verify path? 116syn keyword monkFunc path-defined-as-repeating? path-nodeclear path-nodedepth 117syn keyword monkFunc path-nodename path-nodeparentname path->string path-valid? 118syn keyword monkFunc regex string->path timestamp uniqueid verify 119 120" Keywords from the Monk function library (from e*Gate 4.1 programmers ref) 121syn keyword monkFunc allcap? capitalize char-punctuation? char-substitute 122syn keyword monkFunc char-to-char conv count-used-children degc->degf 123syn keyword monkFunc diff-two-dates display-error empty-string? fail_id 124syn keyword monkFunc fail_id_if fail_translation fail_translation_if 125syn keyword monkFunc find-get-after find-get-before get-timestamp julian-date? 126syn keyword monkFunc julian->standard leap-year? map-string not-empty-string? 127syn keyword monkFunc standard-date? standard->julian string-begins-with? 128syn keyword monkFunc string-contains? string-ends-with? string-search-from-left 129syn keyword monkFunc string-search-from-right string->ssn strip-punct 130syn keyword monkFunc strip-string substring=? symbol-table-get symbol-table-put 131syn keyword monkFunc trim-string-left trim-string-right valid-decimal? 132syn keyword monkFunc valid-integer? verify-type 133 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: 137 138syn match monkNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*" 139syn match monkError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*! 140 141syn match monkOther oneline ![+-][ \t()";]!me=e-1 142syn 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) 145 146syn match monkDelimiter oneline !\.[ \t()";]!me=e-1 147syn match monkDelimiter oneline !\.$! 148" ... and a single dot is not a number but a delimiter 149 150" Simple literals: 151 152syn match monkBoolean oneline "#[tf]" 153syn match monkError oneline !#[tf][^ \t()";]\+! 154 155syn match monkChar oneline "#\\" 156syn match monkChar oneline "#\\." 157syn match monkError oneline !#\\.[^ \t()";]\+! 158syn match monkChar oneline "#\\space" 159syn match monkError oneline !#\\space[^ \t()";]\+! 160syn match monkChar oneline "#\\newline" 161syn match monkError oneline !#\\newline[^ \t()";]\+! 162 163" This keeps all other stuff unhighlighted, except *stuff* and <stuff>: 164 165syn match monkOther oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*, 166syn match monkError oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*, 167 168syn match monkOther oneline "\.\.\." 169syn match monkError oneline !\.\.\.[^ \t()";]\+! 170" ... a special identifier 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 176syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1 177syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$, 178syn match monkError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*, 179 180" Monk input and output structures 181syn match monkSyntax oneline "\(\~input\|\[I\]->\)[^ \t]*" 182syn match monkFunc oneline "\(\~output\|\[O\]->\)[^ \t]*" 183 184" Non-quoted lists, and strings: 185 186syn region monkStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL 187syn region monkStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL 188 189syn region monkString start=+"+ skip=+\\[\\"]+ end=+"+ 190 191" Comments: 192 193syn match monkComment ";.*$" 194 195" Synchronization and the wrapping up... 196 197syn sync match matchPlace grouphere NONE "^[^ \t]" 198" ... i.e. synchronize on a line that starts at the left margin 199 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 203if 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 210 211 HiLink monkSyntax Statement 212 HiLink monkFunc Function 213 214 HiLink monkString String 215 HiLink monkChar Character 216 HiLink monkNumber Number 217 HiLink monkBoolean Boolean 218 219 HiLink monkDelimiter Delimiter 220 HiLink monkConstant Constant 221 222 HiLink monkComment Comment 223 HiLink monkError Error 224 225 delcommand HiLink 226endif 227 228let b:current_syntax = "monk" 229