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