home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / dos / syntax / scheme.vim < prev    next >
Encoding:
Text File  |  2012-05-31  |  17.6 KB  |  331 lines

  1. " Vim syntax file
  2. " Language:    Scheme (R5RS + some R6RS extras)
  3. " Last Change:    2012 May 13
  4. " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
  5. " Original author:    Dirk van Deun <dirk@igwe.vub.ac.be>
  6.  
  7. " This script incorrectly recognizes some junk input as numerals:
  8. " parsing the complete system of Scheme numerals using the pattern
  9. " language is practically impossible: I did a lax approximation.
  10.  
  11. " MzScheme extensions can be activated with setting is_mzscheme variable
  12.  
  13. " Suggestions and bug reports are solicited by the author.
  14.  
  15. " Initializing:
  16.  
  17. " For version 5.x: Clear all syntax items
  18. " For version 6.x: Quit when a syntax file was already loaded
  19. if version < 600
  20.   syntax clear
  21. elseif exists("b:current_syntax")
  22.   finish
  23. endif
  24.  
  25. let s:cpo_save = &cpo
  26. set cpo&vim
  27.  
  28. syn case ignore
  29.  
  30. " Fascist highlighting: everything that doesn't fit the rules is an error...
  31.  
  32. syn match    schemeError    ![^ \t()\[\]";]*!
  33. syn match    schemeError    ")"
  34.  
  35. " Quoted and backquoted stuff
  36.  
  37. syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  38.  
  39. syn region schemeQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  40. syn region schemeQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  41.  
  42. syn region schemeStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  43. syn region schemeStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  44.  
  45. " Popular Scheme extension:
  46. " using [] as well as ()
  47. syn region schemeStrucRestricted matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  48. syn region schemeStrucRestricted matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  49.  
  50. syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  51. syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  52.  
  53. syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALL
  54. syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALL
  55.  
  56. syn region schemeUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  57. syn region schemeUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  58.  
  59. syn region schemeUnquote matchgroup=Delimiter start=",\[" end="\]" contains=ALL
  60. syn region schemeUnquote matchgroup=Delimiter start=",@\[" end="\]" contains=ALL
  61.  
  62. syn region schemeUnquote matchgroup=Delimiter start=",#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  63. syn region schemeUnquote matchgroup=Delimiter start=",@#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
  64.  
  65. " R5RS Scheme Functions and Syntax:
  66.  
  67. if version < 600
  68.   set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
  69. else
  70.   setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
  71. endif
  72.  
  73. syn keyword schemeSyntax lambda and or if cond case define let let* letrec
  74. syn keyword schemeSyntax begin do delay set! else =>
  75. syn keyword schemeSyntax quote quasiquote unquote unquote-splicing
  76. syn keyword schemeSyntax define-syntax let-syntax letrec-syntax syntax-rules
  77. " R6RS
  78. syn keyword schemeSyntax define-record-type fields protocol
  79.  
  80. syn keyword schemeFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
  81. syn keyword schemeFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
  82. syn keyword schemeFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
  83. syn keyword schemeFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
  84. syn keyword schemeFunc cddaar cddadr cdddar cddddr null? list? list length
  85. syn keyword schemeFunc append reverse list-ref memq memv member assq assv assoc
  86. syn keyword schemeFunc symbol? symbol->string string->symbol number? complex?
  87. syn keyword schemeFunc real? rational? integer? exact? inexact? = < > <= >=
  88. syn keyword schemeFunc zero? positive? negative? odd? even? max min + * - / abs
  89. syn keyword schemeFunc quotient remainder modulo gcd lcm numerator denominator
  90. syn keyword schemeFunc floor ceiling truncate round rationalize exp log sin cos
  91. syn keyword schemeFunc tan asin acos atan sqrt expt make-rectangular make-polar
  92. syn keyword schemeFunc real-part imag-part magnitude angle exact->inexact
  93. syn keyword schemeFunc inexact->exact number->string string->number char=?
  94. syn keyword schemeFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
  95. syn keyword schemeFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
  96. syn keyword schemeFunc char-numeric? char-whitespace? char-upper-case?
  97. syn keyword schemeFunc char-lower-case?
  98. syn keyword schemeFunc char->integer integer->char char-upcase char-downcase
  99. syn keyword schemeFunc string? make-string string string-length string-ref
  100. syn keyword schemeFunc string-set! string=? string-ci=? string<? string-ci<?
  101. syn keyword schemeFunc string>? string-ci>? string<=? string-ci<=? string>=?
  102. syn keyword schemeFunc string-ci>=? substring string-append vector? make-vector
  103. syn keyword schemeFunc vector vector-length vector-ref vector-set! procedure?
  104. syn keyword schemeFunc apply map for-each call-with-current-continuation
  105. syn keyword schemeFunc call-with-input-file call-with-output-file input-port?
  106. syn keyword schemeFunc output-port? current-input-port current-output-port
  107. syn keyword schemeFunc open-input-file open-output-file close-input-port
  108. syn keyword schemeFunc close-output-port eof-object? read read-char peek-char
  109. syn keyword schemeFunc write display newline write-char call/cc
  110. syn keyword schemeFunc list-tail string->list list->string string-copy
  111. syn keyword schemeFunc string-fill! vector->list list->vector vector-fill!
  112. syn keyword schemeFunc force with-input-from-file with-output-to-file
  113. syn keyword schemeFunc char-ready? load transcript-on transcript-off eval
  114. syn keyword schemeFunc dynamic-wind port? values call-with-values
  115. syn keyword schemeFunc scheme-report-environment null-environment
  116. syn keyword schemeFunc interaction-environment
  117. " R6RS
  118. syn keyword schemeFunc make-eq-hashtable make-eqv-hashtable make-hashtable
  119. syn keyword schemeFunc hashtable? hashtable-size hashtable-ref hashtable-set!
  120. syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
  121. syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
  122. syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
  123. syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash
  124. syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
  125. syn keyword schemeFunc remp remove remv remq memp assp cons*
  126.  
  127. " ... so that a single + or -, inside a quoted context, would not be
  128. " interpreted as a number (outside such contexts, it's a schemeFunc)
  129.  
  130. syn match    schemeDelimiter    !\.[ \t\[\]()";]!me=e-1
  131. syn match    schemeDelimiter    !\.$!
  132. " ... and a single dot is not a number but a delimiter
  133.  
  134. " This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
  135.  
  136. syn match    schemeOther    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*,
  137. syn match    schemeError    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
  138.  
  139. syn match    schemeOther    "\.\.\."
  140. syn match    schemeError    !\.\.\.[^ \t\[\]()";]\+!
  141. " ... a special identifier
  142.  
  143. syn match    schemeConstant    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*[ \t\[\]()";],me=e-1
  144. syn match    schemeConstant    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]\+\*$,
  145. syn match    schemeError    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
  146.  
  147. syn match    schemeConstant    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1
  148. syn match    schemeConstant    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
  149. syn match    schemeError    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
  150.  
  151. " Non-quoted lists, and strings:
  152.  
  153. syn region schemeStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
  154. syn region schemeStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
  155.  
  156. syn region schemeStruc matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALL
  157. syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
  158.  
  159. " Simple literals:
  160. syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+ contains=@Spell
  161.  
  162. " Comments:
  163.  
  164. syn match    schemeComment    ";.*$" contains=@Spell
  165.  
  166.  
  167. " Writing out the complete description of Scheme numerals without
  168. " using variables is a day's work for a trained secretary...
  169.  
  170. syn match    schemeOther    ![+-][ \t\[\]()";]!me=e-1
  171. syn match    schemeOther    ![+-]$!
  172. "
  173. " This is a useful lax approximation:
  174. syn match    schemeNumber    "[-#+.]\=[0-9][-#+/0-9a-f@i.boxesfdl]*"
  175. syn match    schemeError    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*!
  176.  
  177. syn match    schemeBoolean    "#[tf]"
  178. syn match    schemeError    !#[tf][^ \t\[\]()";]\+!
  179.  
  180. syn match    schemeCharacter    "#\\"
  181. syn match    schemeCharacter    "#\\."
  182. syn match       schemeError    !#\\.[^ \t\[\]()";]\+!
  183. syn match    schemeCharacter    "#\\space"
  184. syn match    schemeError    !#\\space[^ \t\[\]()";]\+!
  185. syn match    schemeCharacter    "#\\newline"
  186. syn match    schemeError    !#\\newline[^ \t\[\]()";]\+!
  187.  
  188. " R6RS
  189. syn match schemeCharacter "#\\x[0-9a-fA-F]\+"
  190.  
  191.  
  192. if exists("b:is_mzscheme") || exists("is_mzscheme")
  193.     " MzScheme extensions
  194.     " multiline comment
  195.     syn region    schemeComment start="#|" end="|#" contains=@Spell
  196.  
  197.     " #%xxx are the special MzScheme identifiers
  198.     syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
  199.     " anything limited by |'s is identifier
  200.     syn match schemeOther "|[^|]\+|"
  201.  
  202.     syn match    schemeCharacter    "#\\\%(return\|tab\)"
  203.  
  204.     " Modules require stmt
  205.     syn keyword schemeExtSyntax module require dynamic-require lib prefix all-except prefix-all-except rename
  206.     " modules provide stmt
  207.     syn keyword schemeExtSyntax provide struct all-from all-from-except all-defined all-defined-except
  208.     " Other from MzScheme
  209.     syn keyword schemeExtSyntax with-handlers when unless instantiate define-struct case-lambda syntax-case
  210.     syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
  211.     syn keyword schemeExtSyntax datum->syntax-object
  212.     syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
  213.     syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature
  214.     syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
  215.     syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
  216.  
  217.     syn keyword schemeExtFunc format system-type current-extension-compiler current-extension-linker
  218.     syn keyword schemeExtFunc use-standard-linker use-standard-compiler
  219.     syn keyword schemeExtFunc find-executable-path append-object-suffix append-extension-suffix
  220.     syn keyword schemeExtFunc current-library-collection-paths current-extension-compiler-flags make-parameter
  221.     syn keyword schemeExtFunc current-directory build-path normalize-path current-extension-linker-flags
  222.     syn keyword schemeExtFunc file-exists? directory-exists? delete-directory/files delete-directory delete-file
  223.     syn keyword schemeExtFunc system compile-file system-library-subpath getenv putenv current-standard-link-libraries
  224.     syn keyword schemeExtFunc remove* file-size find-files fold-files directory-list shell-execute split-path
  225.     syn keyword schemeExtFunc current-error-port process/ports process printf fprintf open-input-string open-output-string
  226.     syn keyword schemeExtFunc get-output-string
  227.     " exceptions
  228.     syn keyword schemeExtFunc exn exn:application:arity exn:application:continuation exn:application:fprintf:mismatch
  229.     syn keyword schemeExtFunc exn:application:mismatch exn:application:type exn:application:mismatch exn:break exn:i/o:filesystem exn:i/o:port
  230.     syn keyword schemeExtFunc exn:i/o:port:closed exn:i/o:tcp exn:i/o:udp exn:misc exn:misc:application exn:misc:unsupported exn:module exn:read
  231.     syn keyword schemeExtFunc exn:read:non-char exn:special-comment exn:syntax exn:thread exn:user exn:variable exn:application:mismatch
  232.     syn keyword schemeExtFunc exn? exn:application:arity? exn:application:continuation? exn:application:fprintf:mismatch? exn:application:mismatch?
  233.     syn keyword schemeExtFunc exn:application:type? exn:application:mismatch? exn:break? exn:i/o:filesystem? exn:i/o:port? exn:i/o:port:closed?
  234.     syn keyword schemeExtFunc exn:i/o:tcp? exn:i/o:udp? exn:misc? exn:misc:application? exn:misc:unsupported? exn:module? exn:read? exn:read:non-char?
  235.     syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
  236.     " Command-line parsing
  237.     syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
  238.  
  239.     " syntax quoting, unquoting and quasiquotation
  240.     syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
  241.     syn region schemeUnquote matchgroup=Delimiter start="#,@" end=![ \t\[\]()";]!me=e-1 contains=ALL
  242.     syn region schemeUnquote matchgroup=Delimiter start="#,(" end=")" contains=ALL
  243.     syn region schemeUnquote matchgroup=Delimiter start="#,@(" end=")" contains=ALL
  244.     syn region schemeUnquote matchgroup=Delimiter start="#,\[" end="\]" contains=ALL
  245.     syn region schemeUnquote matchgroup=Delimiter start="#,@\[" end="\]" contains=ALL
  246.     syn region schemeQuoted matchgroup=Delimiter start="#['`]" end=![ \t()\[\]";]!me=e-1 contains=ALL
  247.     syn region schemeQuoted matchgroup=Delimiter start="#['`](" matchgroup=Delimiter end=")" contains=ALL
  248. endif
  249.  
  250.  
  251. if exists("b:is_chicken") || exists("is_chicken")
  252.     " multiline comment
  253.     syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=@Spell,schemeMultilineComment
  254.  
  255.     syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
  256.     syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
  257.  
  258.     syn keyword schemeExtSyntax unit uses declare hide foreign-declare foreign-parse foreign-parse/spec
  259.     syn keyword schemeExtSyntax foreign-lambda foreign-lambda* define-external define-macro load-library
  260.     syn keyword schemeExtSyntax let-values let*-values letrec-values ->string require-extension
  261.     syn keyword schemeExtSyntax let-optionals let-optionals* define-foreign-variable define-record
  262.     syn keyword schemeExtSyntax pointer tag-pointer tagged-pointer? define-foreign-type
  263.     syn keyword schemeExtSyntax require require-for-syntax cond-expand and-let* receive argc+argv
  264.     syn keyword schemeExtSyntax fixnum? fx= fx> fx< fx>= fx<= fxmin fxmax
  265.     syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
  266.  
  267.     " here-string
  268.     syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
  269.  
  270.     if filereadable(expand("<sfile>:p:h")."/cpp.vim")
  271.     unlet! b:current_syntax
  272.     syn include @ChickenC <sfile>:p:h/cpp.vim
  273.     syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-declare "+ end=+")\@=+ contains=@ChickenC
  274.     syn region ChickenC matchgroup=schemeComment start=+foreign-declare\s*#<<\z(.*\)$+hs=s+15 end=+^\z1$+ contains=@ChickenC
  275.     syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse "+ end=+")\@=+ contains=@ChickenC
  276.     syn region ChickenC matchgroup=schemeComment start=+foreign-parse\s*#<<\z(.*\)$+hs=s+13 end=+^\z1$+ contains=@ChickenC
  277.     syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse/spec "+ end=+")\@=+ contains=@ChickenC
  278.     syn region ChickenC matchgroup=schemeComment start=+foreign-parse/spec\s*#<<\z(.*\)$+hs=s+18 end=+^\z1$+ contains=@ChickenC
  279.     syn region ChickenC matchgroup=schemeComment start=+#>+ end=+<#+ contains=@ChickenC
  280.     syn region ChickenC matchgroup=schemeComment start=+#>?+ end=+<#+ contains=@ChickenC
  281.     syn region ChickenC matchgroup=schemeComment start=+#>!+ end=+<#+ contains=@ChickenC
  282.     syn region ChickenC matchgroup=schemeComment start=+#>\$+ end=+<#+ contains=@ChickenC
  283.     syn region ChickenC matchgroup=schemeComment start=+#>%+ end=+<#+ contains=@ChickenC
  284.     endif
  285.  
  286.     " suggested by Alex Queiroz
  287.     syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
  288.     syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
  289. endif
  290.  
  291. " Synchronization and the wrapping up...
  292.  
  293. syn sync match matchPlace grouphere NONE "^[^ \t]"
  294. " ... i.e. synchronize on a line that starts at the left margin
  295.  
  296. " Define the default highlighting.
  297. " For version 5.7 and earlier: only when not done already
  298. " For version 5.8 and later: only when an item doesn't have highlighting yet
  299. if version >= 508 || !exists("did_scheme_syntax_inits")
  300.   if version < 508
  301.     let did_scheme_syntax_inits = 1
  302.     command -nargs=+ HiLink hi link <args>
  303.   else
  304.     command -nargs=+ HiLink hi def link <args>
  305.   endif
  306.  
  307.   HiLink schemeSyntax        Statement
  308.   HiLink schemeFunc        Function
  309.  
  310.   HiLink schemeString        String
  311.   HiLink schemeCharacter    Character
  312.   HiLink schemeNumber        Number
  313.   HiLink schemeBoolean        Boolean
  314.  
  315.   HiLink schemeDelimiter    Delimiter
  316.   HiLink schemeConstant        Constant
  317.  
  318.   HiLink schemeComment        Comment
  319.   HiLink schemeMultilineComment    Comment
  320.   HiLink schemeError        Error
  321.  
  322.   HiLink schemeExtSyntax    Type
  323.   HiLink schemeExtFunc        PreProc
  324.   delcommand HiLink
  325. endif
  326.  
  327. let b:current_syntax = "scheme"
  328.  
  329. let &cpo = s:cpo_save
  330. unlet s:cpo_save
  331.