home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / OpenLinux 2.3 CD.iso / live / usr / share / vim / syntax / scheme.vim < prev    next >
Encoding:
Text File  |  1999-08-10  |  8.0 KB  |  169 lines

  1. " Vim syntax file
  2. " Language:    Scheme (R5RS)
  3. " Maintainer:    Dirk van Deun <dvandeun@poboxes.com>
  4. " Last change:    April 30, 1998
  5.  
  6. " This script incorrectly recognizes some junk input as numerals:
  7. " parsing the complete system of Scheme numerals using the pattern
  8. " language is practically impossible: I did a lax approximation.
  9.  
  10. " Suggestions and bug reports are solicited by the author.
  11.  
  12. " Initializing:
  13.  
  14. syn clear
  15. syn case ignore
  16.  
  17. " Fascist highlighting: everything that doesn't fit the rules is an error...
  18.  
  19. syn match    schemeError    oneline    ![^ \t()";]*!
  20. syn match    schemeError    oneline    ")"            
  21.  
  22. " Quoted and backquoted stuff
  23.  
  24. syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  25.  
  26. syn region schemeQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  27. syn region schemeQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  28.  
  29. syn region schemeStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  30. syn region schemeStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  31.  
  32. syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  33. syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  34.  
  35. syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  36. syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  37.  
  38. syn region schemeUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  39. syn region schemeUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  40.  
  41. " R5RS Scheme Functions and Syntax:
  42.  
  43. set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
  44.  
  45. syn keyword schemeSyntax lambda and or if cond case define let let* letrec
  46. syn keyword schemeSyntax begin do delay set! else =>
  47. syn keyword schemeSyntax quote quasiquote unquote unquote-splicing
  48. syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules
  49.  
  50. syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
  51. syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
  52. syn keyword schemeFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
  53. syn keyword schemeFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
  54. syn keyword schemeFunc cddaar cddadr cdddar cddddr null? list? list length
  55. syn keyword schemeFunc append reverse list-ref memq memv member assq assv assoc
  56. syn keyword schemeFunc symbol? symbol->string string->symbol number? complex?
  57. syn keyword schemeFunc real? rational? integer? exact? inexact? = < > <= >=
  58. syn keyword schemeFunc zero? positive? negative? odd? even? max min + * - / abs
  59. syn keyword schemeFunc quotient remainder modulo gcd lcm numerator denominator
  60. syn keyword schemeFunc floor ceiling truncate round rationalize exp log sin cos
  61. syn keyword schemeFunc tan asin acos atan sqrt expt make-rectangular make-polar
  62. syn keyword schemeFunc real-part imag-part magnitude angle exact->inexact
  63. syn keyword schemeFunc inexact->exact number->string string->number char=? 
  64. syn keyword schemeFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
  65. syn keyword schemeFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
  66. syn keyword schemeFunc char-numeric? char-whitespace? char-upper-case?
  67. syn keyword schemeFunc char->integer integer->char char-upcase char-downcase
  68. syn keyword schemeFunc string? make-string string string-length string-ref
  69. syn keyword schemeFunc string-set! string=? string-ci=? string<? string-ci<?   
  70. syn keyword schemeFunc string>? string-ci>? string<=? string-ci<=? string>=?
  71. syn keyword schemeFunc string-ci>=? substring string-append vector? make-vector
  72. syn keyword schemeFunc vector vector-length vector-ref vector-set! procedure?
  73. syn keyword schemeFunc apply map for-each call-with-current-continuation
  74. syn keyword schemeFunc call-with-input-file call-with-output-file input-port?
  75. syn keyword schemeFunc output-port? current-input-port current-output-port
  76. syn keyword schemeFunc open-input-file open-output-file close-input-port
  77. syn keyword schemeFunc close-output-port eof-object? read read-char peek-char
  78. syn keyword schemeFunc write display newline write-char call/cc
  79. syn keyword schemeFunc list-tail string->list list->string string-copy
  80. syn keyword schemeFunc string-fill! vector->list list->vector vector-fill!
  81. syn keyword schemeFunc force with-input-from-file with-output-to-file
  82. syn keyword schemeFunc char-ready? load transcript-on transcript-off eval
  83. syn keyword schemeFunc dynamic-wind port? values call-with-values
  84. syn keyword schemeFunc scheme-report-environment null-environment
  85. syn keyword schemeFunc interaction-environment
  86.  
  87. " Writing out the complete description of Scheme numerals without
  88. " using variables is a day's work for a trained secretary...
  89. " This is a useful lax approximation:
  90.  
  91. syn match    schemeNumber    oneline    "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
  92. syn match    schemeError    oneline    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
  93.  
  94. syn match    schemeOther    oneline    ![+-][ \t()";]!me=e-1
  95. syn match    schemeOther    oneline    ![+-]$!
  96. " ... so that a single + or -, inside a quoted context, would not be
  97. " interpreted as a number (outside such contexts, it's a schemeFunc)
  98.  
  99. syn match    schemeDelimiter    oneline    !\.[ \t()";]!me=e-1
  100. syn match    schemeDelimiter    oneline    !\.$!
  101. " ... and a single dot is not a number but a delimiter
  102.  
  103. " Simple literals:
  104.  
  105. syn match    schemeBoolean    oneline    "#[tf]"
  106. syn match    schemeError    oneline    !#[tf][^ \t()";]\+!
  107.  
  108. syn match    schemeChar    oneline    "#\\"
  109. syn match    schemeChar    oneline    "#\\."
  110. syn match       schemeError    oneline    !#\\.[^ \t()";]\+!
  111. syn match    schemeChar    oneline    "#\\space"
  112. syn match    schemeError    oneline    !#\\space[^ \t()";]\+!
  113. syn match    schemeChar    oneline    "#\\newline"
  114. syn match    schemeError    oneline    !#\\newline[^ \t()";]\+!
  115.  
  116. " This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
  117.  
  118. syn match    schemeOther    oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
  119. syn match    schemeError    oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
  120.  
  121. syn match    schemeOther    oneline    "\.\.\."
  122. syn match    schemeError    oneline    !\.\.\.[^ \t()";]\+!
  123. " ... a special identifier
  124.  
  125. syn match    schemeConstant    oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
  126. syn match    schemeConstant    oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
  127. syn match    schemeError    oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
  128.  
  129. syn match    schemeConstant    oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
  130. syn match    schemeConstant    oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
  131. syn match    schemeError    oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
  132.  
  133. " Non-quoted lists, and strings:
  134.  
  135. syn region schemeStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
  136. syn region schemeStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
  137.  
  138. syn region    schemeString    start=+"+  skip=+\\[\\"]+ end=+"+
  139.  
  140. " Comments:
  141.  
  142. syn match    schemeComment    ";.*$"
  143.  
  144. " Synchronization and the wrapping up...
  145.  
  146. syn sync match matchPlace grouphere NONE "^[^ \t]"
  147. " ... i.e. synchronize on a line that starts at the left margin
  148.  
  149. if !exists("did_scheme_syntax_inits")
  150.   let did_scheme_syntax_inits= 1
  151.  
  152.   hi link schemeSyntax        Statement
  153.   hi link schemeFunc        Function
  154.  
  155.   hi link schemeString        String
  156.   hi link schemeChar        Character
  157.   hi link schemeNumber        Number
  158.   hi link schemeBoolean        Boolean
  159.   
  160.   hi link schemeDelimiter    Delimiter
  161.   hi link schemeConstant    Constant
  162.  
  163.   hi link schemeComment        Comment
  164.   hi link schemeError        Error
  165.  
  166.   endif
  167.  
  168. let b:current_syntax = "scheme"
  169.