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