neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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