vim-patch:9b03d3e75b42 (#20013)

Update runtime files
9b03d3e75b
This commit is contained in:
Christian Clason 2022-08-31 08:08:51 +02:00 committed by GitHub
parent f4274d0f62
commit 0903702634
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 1082 additions and 0 deletions

14
runtime/compiler/raco.vim Normal file
View File

@ -0,0 +1,14 @@
" Vim compiler file
" Compiler: raco (Racket command-line tools)
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 12
let current_compiler = 'raco'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco
CompilerSet errorformat=%f:%l:%c:%m

View File

@ -0,0 +1,14 @@
" Vim compiler file
" Compiler: raco make (Racket command-line tools)
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 12
let current_compiler = 'racomake'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ make\ --\ %
CompilerSet errorformat=%f:%l:%c:%m

View File

@ -0,0 +1,14 @@
" Vim compiler file
" Compiler: raco setup (Racket command-line tools)
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 12
let current_compiler = 'racosetup'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ setup
CompilerSet errorformat=%f:%l:%c:%m

View File

@ -0,0 +1,14 @@
" Vim compiler file
" Compiler: raco test (Racket command-line tools)
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 12
let current_compiler = 'racotest'
if exists(":CompilerSet") != 2
command -nargs=* CompilerSet setlocal <args>
endif
CompilerSet makeprg=raco\ test\ %
CompilerSet errorformat=location:%f:%l:%c

View File

@ -3167,6 +3167,9 @@ text...
iterate over. Unlike with |List|, modifying the
|Blob| does not affect the iteration.
When {object} is a |String| each item is a string with
one character, plus any combining characters.
:for [{var1}, {var2}, ...] in {listlist}
:endfo[r]
Like `:for` above, but each item in {listlist} must be

View File

@ -0,0 +1,82 @@
" Vim filetype plugin
" Language: Racket
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" Previous Maintainer: Will Langstroth <will@langstroth.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 29
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
" quick hack to allow adding values
setlocal iskeyword=@,!,#-',*-:,<-Z,a-z,~,_,94
" Enable auto begin new comment line when continuing from an old comment line
setlocal comments=:;;;;,:;;;,:;;,:;
setlocal formatoptions+=r
"setlocal commentstring=;;%s
setlocal commentstring=#\|\ %s\ \|#
setlocal formatprg=raco\ fmt
" Undo our settings when the filetype changes away from Racket
" (this should be amended if settings/mappings are added above!)
let b:undo_ftplugin =
\ "setlocal iskeyword< lispwords< lisp< comments< formatoptions< formatprg<"
\. " | setlocal commentstring<"
if !exists("no_plugin_maps") && !exists("no_racket_maps")
" Simply setting keywordprg like this works:
" setlocal keywordprg=raco\ docs
" but then vim says:
" "press ENTER or type a command to continue"
" We avoid the annoyance of having to hit enter by remapping K directly.
function s:RacketDoc(word) abort
execute 'silent !raco docs --' shellescape(a:word)
redraw!
endfunction
nnoremap <buffer> <Plug>RacketDoc :call <SID>RacketDoc(expand('<cword>'))<CR>
nmap <buffer> K <Plug>RacketDoc
" For the visual mode K mapping, it's slightly more convoluted to get the
" selected text:
function! s:Racket_visual_doc()
try
let l:old_a = @a
normal! gv"ay
call system("raco docs '". @a . "'")
redraw!
return @a
finally
let @a = l:old_a
endtry
endfunction
xnoremap <buffer> <Plug>RacketDoc :call <SID>Racket_visual_doc()<cr>
xmap <buffer> K <Plug>RacketDoc
let b:undo_ftplugin .=
\ " | silent! execute 'nunmap <buffer> K'"
\. " | silent! execute 'xunmap <buffer> K'"
endif
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
let b:browsefilter =
\ "Racket Source Files (*.rkt *.rktl)\t*.rkt;*.rktl\n"
\. "All Files (*.*)\t*.*\n"
let b:undo_ftplugin .= " | unlet! b:browsefilter"
endif
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_words = '#|:|#'
let b:undo_ftplugin .= " | unlet! b:match_words"
endif
let &cpo = s:cpo_save
unlet s:cpo_save

60
runtime/indent/racket.vim Normal file
View File

@ -0,0 +1,60 @@
" Vim indent file
" Language: Racket
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" Previous Maintainer: Will Langstroth <will@langstroth.com>
" URL: https://github.com/benknoble/vim-racket
" Last Change: 2022 Aug 12
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal lisp autoindent nosmartindent
setlocal lispwords+=module,module*,module+,parameterize,let-values,let*-values,letrec-values,local
setlocal lispwords+=define/contract
setlocal lispwords+=λ
setlocal lispwords+=with-handlers
setlocal lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case,syntax-parse
setlocal lispwords+=define-for-syntax,define-syntax-parser,define-syntax-parse-rule,define-syntax-class,define-splicing-syntax-class
setlocal lispwords+=define-signature,unit,unit/sig,compund-unit/sig,define-values/invoke-unit/sig
setlocal lispwords+=define-opt/c,define-syntax-rule
setlocal lispwords+=define-test-suite
setlocal lispwords+=struct
setlocal lispwords+=with-input-from-file,with-output-to-file
" Racket OOP
" TODO missing a lot of define-like forms here (e.g., define/augment, etc.)
setlocal lispwords+=class,class*,mixin,interface,class/derived
setlocal lispwords+=define/public,define/pubment,define/public-final
setlocal lispwords+=define/override,define/overment,define/override-final
setlocal lispwords+=define/augment,define/augride,define/augment-final
setlocal lispwords+=define/private
" kanren
setlocal lispwords+=fresh,run,run*,project,conde,condu
" loops
setlocal lispwords+=for,for/list,for/fold,for*,for*/list,for*/fold,for/or,for/and,for*/or,for*/and
setlocal lispwords+=for/hash,for/hasheq,for/hasheqv,for/sum,for/flvector,for*/flvector,for/vector,for*/vector,for*/sum,for*/hash,for*/hasheq,for*/hasheqv
setlocal lispwords+=for/async
setlocal lispwords+=for/set,for*/set
setlocal lispwords+=for/first,for*/first
setlocal lispwords+=match,match*,match/values,define/match,match-lambda,match-lambda*,match-lambda**
setlocal lispwords+=match-let,match-let*,match-let-values,match-let*-values
setlocal lispwords+=match-letrec,match-define,match-define-values
setlocal lispwords+=let/cc,let/ec
" qi
setlocal lispwords+=define-flow,define-switch,flow-lambda,switch-lambda,on,switch,π,λ01
setlocal lispwords+=define-qi-syntax,define-qi-syntax-parser,define-qi-syntax-rule
" gui-easy
setlocal lispwords+=if-view,case-view,cond-view,list-view,dyn-view
setlocal lispwords+=case/dep
setlocal lispwords+=define/obs
let b:undo_indent = "setlocal lisp< ai< si< lw<"

View File

@ -0,0 +1,64 @@
" Vim syntax file for Godot resource (scenes)
" Language: gdresource
" Maintainer: Maxim Kim <habamax@gmail.com>
" Filenames: *.tscn, *.tres
if exists("b:current_syntax")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
syn match gdResourceNumber "\<0x\%(_\=\x\)\+\>"
syn match gdResourceNumber "\<0b\%(_\=[01]\)\+\>"
syn match gdResourceNumber "\<\d\%(_\=\d\)*\>"
syn match gdResourceNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
syn match gdResourceNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@="
syn match gdResourceNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
syn keyword gdResourceKeyword true false
syn region gdResourceString
\ start=+[uU]\="+ end='"' skip='\\\\\|\\"'
\ contains=@Spell keepend
" Section
syn region gdResourceSection matchgroup=gdResourceSectionDelimiter
\ start='^\[' end=']\s*$'
\ oneline keepend
\ contains=gdResourceSectionName,gdResourceSectionAttribute
syn match gdResourceSectionName '\[\@<=\S\+' contained skipwhite
syn match gdResourceSectionAttribute '\S\+\s*=\s*\S\+'
\ skipwhite keepend contained
\ contains=gdResourceSectionAttributeName,gdResourceSectionAttributeValue
syn match gdResourceSectionAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
syn match gdResourceSectionAttributeValue '\(=\s*\)\zs\S\+\ze' skipwhite
\ contained
\ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
" Section body
syn match gdResourceAttribute '^\s*\S\+\s*=.*$'
\ skipwhite keepend
\ contains=gdResourceAttributeName,gdResourceAttributeValue
syn match gdResourceAttributeName '\S\+\ze\(\s*=\)' skipwhite contained
syn match gdResourceAttributeValue '\(=\s*\)\zs.*$' skipwhite
\ contained
\ contains=gdResourceString,gdResourceNumber,gdResourceKeyword
hi def link gdResourceNumber Constant
hi def link gdResourceKeyword Constant
hi def link gdResourceSectionName Statement
hi def link gdResourceSectionDelimiter Delimiter
hi def link gdResourceSectionAttributeName Type
hi def link gdResourceAttributeName Identifier
hi def link gdResourceString String
let b:current_syntax = "gdresource"
let &cpo = s:keepcpo
unlet s:keepcpo

104
runtime/syntax/gdscript.vim Normal file
View File

@ -0,0 +1,104 @@
" Vim syntax file for Godot gdscript
" Language: gdscript
" Maintainer: Maxim Kim <habamax@gmail.com>
" Filenames: *.gd
if exists("b:current_syntax")
finish
endif
let s:keepcpo= &cpo
set cpo&vim
syntax sync maxlines=100
syn keyword gdscriptConditional if else elif match
syn keyword gdscriptRepeat for while break continue
syn keyword gdscriptOperator is as not and or in
syn match gdscriptClass "\v<\u\w+>"
syn match gdscriptConstant "\<[_A-Z]\+[0-9_A-Z]*\>"
syn match gdscriptBlockStart ":\s*$"
syn keyword gdscriptKeyword null self owner parent tool
syn keyword gdscriptBoolean false true
syn keyword gdscriptStatement remote master puppet remotesync mastersync puppetsync sync
syn keyword gdscriptStatement return pass
syn keyword gdscriptStatement static const enum
syn keyword gdscriptStatement breakpoint assert
syn keyword gdscriptStatement onready
syn keyword gdscriptStatement class_name extends
syn keyword gdscriptType void bool int float String contained
syn keyword gdscriptStatement var nextgroup=gdscriptTypeDecl skipwhite
syn keyword gdscriptStatement const nextgroup=gdscriptTypeDecl skipwhite
syn match gdscriptTypeDecl "\h\w*\s*:\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
syn match gdscriptTypeDecl "->\s*\h\w*" contains=gdscriptOperator,gdscriptType,gdscriptClass skipwhite
syn keyword gdscriptStatement export nextgroup=gdscriptExportTypeDecl skipwhite
syn match gdscriptExportTypeDecl "(.\{-}[,)]" contains=gdscriptOperator,gdscriptType,gdscriptClass contained skipwhite
syn keyword gdscriptStatement setget nextgroup=gdscriptSetGet,gdscriptSetGetSeparator skipwhite
syn match gdscriptSetGet "\h\w*" nextgroup=gdscriptSetGetSeparator display contained skipwhite
syn match gdscriptSetGetSeparator "," nextgroup=gdscriptSetGet display contained skipwhite
syn keyword gdscriptStatement class func signal nextgroup=gdscriptFunctionName skipwhite
syn match gdscriptFunctionName "\h\w*" nextgroup=gdscriptFunctionParams display contained skipwhite
syn match gdscriptFunctionParams "(.*)" contains=gdscriptTypeDecl display contained skipwhite
syn match gdscriptNode "\$\h\w*\%(/\h\w*\)*"
syn match gdscriptComment "#.*$" contains=@Spell,gdscriptTodo
syn region gdscriptString matchgroup=gdscriptQuotes
\ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
\ contains=gdscriptEscape,@Spell
syn region gdscriptString matchgroup=gdscriptTripleQuotes
\ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
\ contains=gdscriptEscape,@Spell
syn match gdscriptEscape +\\[abfnrtv'"\\]+ contained
syn match gdscriptEscape "\\$"
" Numbers
syn match gdscriptNumber "\<0x\%(_\=\x\)\+\>"
syn match gdscriptNumber "\<0b\%(_\=[01]\)\+\>"
syn match gdscriptNumber "\<\d\%(_\=\d\)*\>"
syn match gdscriptNumber "\<\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
syn match gdscriptNumber "\<\d\%(_\=\d\)*\.\%(e[+-]\=\d\%(_\=\d\)*\)\=\%(\W\|$\)\@="
syn match gdscriptNumber "\%(^\|\W\)\@1<=\%(\d\%(_\=\d\)*\)\=\.\d\%(_\=\d\)*\%(e[+-]\=\d\%(_\=\d\)*\)\=\>"
" XXX, TODO, etc
syn keyword gdscriptTodo TODO XXX FIXME HACK NOTE BUG contained
hi def link gdscriptStatement Statement
hi def link gdscriptKeyword Keyword
hi def link gdscriptConditional Conditional
hi def link gdscriptBoolean Boolean
hi def link gdscriptOperator Operator
hi def link gdscriptRepeat Repeat
hi def link gdscriptSetGet Function
hi def link gdscriptFunctionName Function
hi def link gdscriptClass Type
hi def link gdscriptConstant Constant
hi def link gdscriptBuiltinStruct Typedef
hi def link gdscriptComment Comment
hi def link gdscriptString String
hi def link gdscriptQuotes String
hi def link gdscriptTripleQuotes String
hi def link gdscriptEscape Special
hi def link gdscriptNode PreProc
hi def link gdscriptType Type
hi def link gdscriptNumber Number
hi def link gdscriptBlockStart Special
hi def link gdscriptTodo Todo
let b:current_syntax = "gdscript"
let &cpo = s:keepcpo
unlet s:keepcpo

View File

@ -0,0 +1,57 @@
" Vim syntax file for Godot shading language
" Language: gdshader
" Maintainer: Maxim Kim <habamax@gmail.com>
" Filenames: *.gdshader
if exists("b:current_syntax")
finish
endif
syn keyword gdshaderConditional if else switch case default
syn keyword gdshaderRepeat for while do
syn keyword gdshaderStatement return discard
syn keyword gdshaderBoolean true false
syn keyword gdshaderKeyword shader_type render_mode
syn keyword gdshaderKeyword in out inout
syn keyword gdshaderKeyword lowp mediump highp
syn keyword gdshaderKeyword uniform varying const
syn keyword gdshaderKeyword flat smooth
syn keyword gdshaderType float vec2 vec3 vec4
syn keyword gdshaderType uint uvec2 uvec3 uvec4
syn keyword gdshaderType int ivec2 ivec3 ivec4
syn keyword gdshaderType void bool
syn keyword gdshaderType bvec2 bvec3 bvec4
syn keyword gdshaderType mat2 mat3 mat4
syn keyword gdshaderType sampler2D isampler2D usampler2D samplerCube
syn match gdshaderMember "\v<(\.)@<=[a-z_]+\w*>"
syn match gdshaderBuiltin "\v<[A-Z_]+[A-Z0-9_]*>"
syn match gdshaderFunction "\v<\w*>(\()@="
syn match gdshaderNumber "\v<\d+(\.)@!>"
syn match gdshaderFloat "\v<\d*\.\d+(\.)@!>"
syn match gdshaderFloat "\v<\d*\.=\d+(e-=\d+)@="
syn match gdshaderExponent "\v(\d*\.=\d+)@<=e-=\d+>"
syn match gdshaderComment "\v//.*$" contains=@Spell
syn region gdshaderComment start="/\*" end="\*/" contains=@Spell
syn keyword gdshaderTodo TODO FIXME XXX NOTE BUG HACK OPTIMIZE containedin=gdshaderComment
hi def link gdshaderConditional Conditional
hi def link gdshaderRepeat Repeat
hi def link gdshaderStatement Statement
hi def link gdshaderBoolean Boolean
hi def link gdshaderKeyword Keyword
hi def link gdshaderMember Identifier
hi def link gdshaderBuiltin Identifier
hi def link gdshaderFunction Function
hi def link gdshaderType Type
hi def link gdshaderNumber Number
hi def link gdshaderFloat Float
hi def link gdshaderExponent Special
hi def link gdshaderComment Comment
hi def link gdshaderTodo Todo
let b:current_syntax = "gdshader"

656
runtime/syntax/racket.vim Normal file
View File

@ -0,0 +1,656 @@
" Vim syntax file
" Language: Racket
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com>
" Previous Maintainer: Will Langstroth <will@langstroth.com>
" URL: https://github.com/benknoble/vim-racket
" Description: Contains all of the keywords in #lang racket
" Last Change: 2022 Aug 12
" Initializing:
if exists("b:current_syntax")
finish
endif
" Highlight unmatched parens
syntax match racketError ,[]})],
if version < 800
set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
else
" syntax iskeyword 33,35-39,42-58,60-90,94,95,97-122,126,_
" converted from decimal to char
" :s/\d\+/\=submatch(0)->str2nr()->nr2char()/g
" but corrected to remove duplicate _, move ^ to end
syntax iskeyword @,!,#-',*-:,<-Z,a-z,~,_,^
" expanded
" syntax iskeyword !,#,$,%,&,',*,+,,,-,.,/,0-9,:,<,=,>,?,@,A-Z,_,a-z,~,^
endif
" Forms in order of appearance at
" http://docs.racket-lang.org/reference/index.html
"
syntax keyword racketSyntax module module* module+ require provide quote
syntax keyword racketSyntax #%datum #%expression #%top #%variable-reference #%app
syntax keyword racketSyntax lambda case-lambda let let* letrec
syntax keyword racketSyntax let-values let*-values let-syntax letrec-syntax
syntax keyword racketSyntax let-syntaxes letrec-syntaxes letrec-syntaxes+values
syntax keyword racketSyntax local shared
syntax keyword racketSyntax if cond and or case define else =>
syntax keyword racketSyntax define define-values define-syntax define-syntaxes
syntax keyword racketSyntax define-for-syntax define-require-syntax define-provide-syntax
syntax keyword racketSyntax define-syntax-rule
syntax keyword racketSyntax define-record-type
syntax keyword racketSyntax begin begin0
syntax keyword racketSyntax begin-for-syntax
syntax keyword racketSyntax when unless
syntax keyword racketSyntax set! set!-values
syntax keyword racketSyntax for for/list for/vector for/hash for/hasheq for/hasheqv
syntax keyword racketSyntax for/and for/or for/lists for/first
syntax keyword racketSyntax for/last for/fold
syntax keyword racketSyntax for* for*/list for*/vector for*/hash for*/hasheq for*/hasheqv
syntax keyword racketSyntax for*/and for*/or for*/lists for*/first
syntax keyword racketSyntax for*/last for*/fold
syntax keyword racketSyntax for/fold/derived for*/fold/derived
syntax keyword racketSyntax define-sequence-syntax :do-in do
syntax keyword racketSyntax with-continuation-mark
syntax keyword racketSyntax quasiquote unquote unquote-splicing quote-syntax
syntax keyword racketSyntax #%top-interaction
syntax keyword racketSyntax define-package open-package package-begin
syntax keyword racketSyntax define* define*-values define*-syntax define*-syntaxes open*-package
syntax keyword racketSyntax package? package-exported-identifiers package-original-identifiers
syntax keyword racketSyntax block #%stratified-body
" 8 Contracts
" 8.2 Function contracts
syntax keyword racketSyntax -> ->* ->i ->d case-> dynamic->* unconstrained-domain->
" 8.6.1 Nested Contract Boundaries
syntax keyword racketSyntax with-contract define/contract define-struct/contract
syntax keyword racketSyntax invariant-assertion current-contract-region
" 9 Pattern Matching
syntax keyword racketSyntax match match* match/values define/match
syntax keyword racketSyntax match-lambda match-lambda* match-lambda**
syntax keyword racketSyntax match-let match-let* match-let-values match-let*-values
syntax keyword racketSyntax match-letrec match-define match-define-values
" 10.2.3 Handling Exceptions
syntax keyword racketSyntax with-handlers with-handlers*
" 10.4 Continuations
syntax keyword racketSyntax let/cc let/ec
" 10.4.1 Additional Control Operators
syntax keyword racketSyntax % prompt control prompt-at control-at reset shift
syntax keyword racketSyntax reset-at shift-at prompt0 reset0 control0 shift0
syntax keyword racketSyntax prompt0-at reset0-at control0-at shift0-at
syntax keyword racketSyntax set cupto
" 11.3.2 Parameters
syntax keyword racketSyntax parameterize parameterize*
" 12.5 Writing
syntax keyword racketSyntax write display displayln print
syntax keyword racketSyntax fprintf printf eprintf format
syntax keyword racketSyntax print-pair-curly-braces print-mpair-curly-braces print-unreadable
syntax keyword racketSyntax print-graph print-struct print-box print-vector-length print-hash-table
syntax keyword racketSyntax print-boolean-long-form print-reader-abbreviations print-as-expression print-syntax-width
syntax keyword racketSyntax current-write-relative-directory port-write-handler port-display-handler
syntax keyword racketSyntax port-print-handler global-port-print-handler
" 13.7 Custodians
syntax keyword racketSyntax custodian? custodian-memory-accounting-available? custodian-box?
syntax keyword racketSyntax make-custodian custodian-shutdown-all current-custodian custodian-managed-list
syntax keyword racketSyntax custodian-require-memory custodian-limit-memory
syntax keyword racketSyntax make-custodian-box custodian-box-value
" lambda sign
syntax match racketSyntax /\<[\u03bb]\>/
" Functions ==================================================================
syntax keyword racketFunc boolean? not equal? eqv? eq? equal?/recur immutable?
syntax keyword racketFunc true false symbol=? boolean=? false?
syntax keyword racketFunc number? complex? real? rational? integer?
syntax keyword racketFunc exact-integer? exact-nonnegative-integer?
syntax keyword racketFunc exact-positive-integer? inexact-real?
syntax keyword racketFunc fixnum? flonum? zero? positive? negative?
syntax keyword racketFunc even? odd? exact? inexact?
syntax keyword racketFunc inexact->exact exact->inexact
" 3.2.2 General Arithmetic
" 3.2.2.1 Arithmetic
syntax keyword racketFunc + - * / quotient remainder quotient/remainder modulo
syntax keyword racketFunc add1 sub1 abs max min gcd lcm round exact-round floor
syntax keyword racketFunc ceiling truncate numerator denominator rationalize
" 3.2.2.2 Number Comparison
syntax keyword racketFunc = < <= > >=
" 3.2.2.3 Powers and Roots
syntax keyword racketFunc sqrt integer-sqrt integer-sqrt/remainder
syntax keyword racketFunc expt exp log
" 3.2.2.3 Trigonometric Functions
syntax keyword racketFunc sin cos tan asin acos atan
" 3.2.2.4 Complex Numbers
syntax keyword racketFunc make-rectangular make-polar
syntax keyword racketFunc real-part imag-part magnitude angle
syntax keyword racketFunc bitwise-ior bitwise-and bitwise-xor bitwise-not
syntax keyword racketFunc bitwise-bit-set? bitwise-bit-field arithmetic-shift
syntax keyword racketFunc integer-length
" 3.2.2.5 Random Numbers
syntax keyword racketFunc random random-seed
syntax keyword racketFunc make-pseudo-random-generator pseudo-random-generator?
syntax keyword racketFunc current-pseudo-random-generator pseudo-random-generator->vector
syntax keyword racketFunc vector->pseudo-random-generator vector->pseudo-random-generator!
" 3.2.2.8 Number-String Conversions
syntax keyword racketFunc number->string string->number real->decimal-string
syntax keyword racketFunc integer->integer-bytes
syntax keyword racketFunc floating-point-bytes->real real->floating-point-bytes
syntax keyword racketFunc system-big-endian?
" 3.2.2.9 Extra Constants and Functions
syntax keyword racketFunc pi sqr sgn conjugate sinh cosh tanh order-of-magnitude
" 3.2.3 Flonums
" 3.2.3.1 Flonum Arithmetic
syntax keyword racketFunc fl+ fl- fl* fl/ flabs
syntax keyword racketFunc fl= fl< fl> fl<= fl>= flmin flmax
syntax keyword racketFunc flround flfloor flceiling fltruncate
syntax keyword racketFunc flsin flcos fltan flasin flacos flatan
syntax keyword racketFunc fllog flexp flsqrt
syntax keyword racketFunc ->fl fl->exact-integer make-flrectangular
syntax keyword racketFunc flreal-part flimag-part
" 3.2.3.2 Flonum Vectors
syntax keyword racketFunc flvector? flvector make-flvector flvector-length
syntax keyword racketFunc flvector-ref flvector-set! flvector-copy in-flvector
syntax keyword racketFunc shared-flvector make-shared-flvector
syntax keyword racketSyntax for/flvector for*/flvector
" 3.2.4 Fixnums
syntax keyword racketFunc fx+ fx- fx* fxquotient fxremainder fxmodulo fxabs
syntax keyword racketFunc fxand fxior fxxor fxnot fxlshift fxrshift
syntax keyword racketFunc fx= fx< fx> fx<= fx>= fxmin fxmax fx->fl fl->fx
" 3.2.4.2 Fixnum Vectors
syntax keyword racketFunc fxvector? fxvector make-fxvector fxvector-length
syntax keyword racketFunc fxvector-ref fxvector-set! fxvector-copy in-fxvector
syntax keyword racketFunc for/fxvector for*/fxvector
syntax keyword racketFunc shared-fxvector make-shared-fxvector
" 3.3 Strings
syntax keyword racketFunc string? make-string string string->immutable-string string-length
syntax keyword racketFunc string-ref string-set! substring string-copy string-copy!
syntax keyword racketFunc string-fill! string-append string->list list->string
syntax keyword racketFunc build-string string=? string<? string<=? string>? string>=?
syntax keyword racketFunc string-ci=? string-ci<? string-ci<=? string-ci>? string-ci>=?
syntax keyword racketFunc string-upcase string-downcase string-titlecase string-foldcase
syntax keyword racketFunc string-normalize-nfd string-normalize-nfc string-normalize-nfkc
syntax keyword racketFunc string-normalize-spaces string-trim
syntax keyword racketFunc string-locale=? string-locale>? string-locale<?
syntax keyword racketFunc string-locale-ci=? string-locale<=?
syntax keyword racketFunc string-locale-upcase string-locale-downcase
syntax keyword racketFunc string-append* string-join
" 3.4 Bytestrings
syntax keyword racketFunc bytes? make-bytes bytes bytes->immutable-bytes byte?
syntax keyword racketFunc bytes-length bytes-ref bytes-set! subbytes bytes-copy
syntax keyword racketFunc bytes-copy! bytes-fill! bytes-append bytes->list list->bytes
syntax keyword racketFunc make-shared-bytes shared-bytes
syntax keyword racketFunc bytes=? bytes<? bytes>?
syntax keyword racketFunc bytes->string/utf-8 bytes->string/latin-1
syntax keyword racketFunc string->bytes/locale string->bytes/latin-1 string->bytes/utf-8
syntax keyword racketFunc string-utf-8-length bytes-utf8-ref bytes-utf-8-index
syntax keyword racketFunc bytes-open-converter bytes-close-converter
syntax keyword racketFunc bytes-convert bytes-convert-end bytes-converter?
syntax keyword racketFunc locale-string-encoding
" 3.5 Characters
syntax keyword racketFunc char? char->integer integer->char
syntax keyword racketFunc char=? char<? char<=? char>? char>=?
syntax keyword racketFunc char-ci=? char-ci<? char-ci<=? char-ci>? char-ci>=?
syntax keyword racketFunc char-alphabetic? char-lower-case? char-upper-case? char-title-case?
syntax keyword racketFunc char-numeric? char-symbolic? char-punctuation? char-graphic?
syntax keyword racketFunc char-whitespace? char-blank?
syntax keyword racketFunc char-iso-control? char-general-category
syntax keyword racketFunc make-known-char-range-list
syntax keyword racketFunc char-upcase char-downcase char-titlecase char-foldcase
" 3.6 Symbols
syntax keyword racketFunc symbol? symbol-interned? symbol-unreadable?
syntax keyword racketFunc symbol->string string->symbol
syntax keyword racketFunc string->uninterned-symbol string->unreadable-symbol
syntax keyword racketFunc gensym
" 3.7 Regular Expressions
syntax keyword racketFunc regexp? pregexp? byte-regexp? byte-pregexp?
syntax keyword racketFunc regexp pregexp byte-regexp byte-pregexp
syntax keyword racketFunc regexp-quote regexp-match regexp-match*
syntax keyword racketFunc regexp-try-match regexp-match-positions
syntax keyword racketFunc regexp-match-positions* regexp-match?
syntax keyword racketFunc regexp-match-peek-positions regexp-match-peek-immediate
syntax keyword racketFunc regexp-match-peek regexp-match-peek-positions*
syntax keyword racketFunc regexp-match/end regexp-match-positions/end
syntax keyword racketFunc regexp-match-peek-positions-immediat/end
syntax keyword racketFunc regexp-split regexp-replace regexp-replace*
syntax keyword racketFunc regexp-replace-quote
" 3.8 Keywords
syntax keyword racketFunc keyword? keyword->string string->keyword keyword<?
" 3.9 Pairs and Lists
syntax keyword racketFunc pair? null? cons car cdr null
syntax keyword racketFunc list? list list* build-list length
syntax keyword racketFunc list-ref list-tail append reverse map andmap ormap
syntax keyword racketFunc for-each foldl foldr filter remove remq remv remove*
syntax keyword racketFunc remq* remv* sort member memv memq memf
syntax keyword racketFunc findf assoc assv assq assf
syntax keyword racketFunc caar cadr cdar cddr caaar caadr cadar caddr cdaar
syntax keyword racketFunc cddar cdddr caaaar caaadr caadar caaddr cadadr caddar
syntax keyword racketFunc cadddr cdaaar cdaadr cdadar cddaar cdddar cddddr
" 3.9.7 Additional List Functions and Synonyms
" (require racket/list)
syntax keyword racketFunc empty cons? empty? first rest
syntax keyword racketFunc second third fourth fifth sixth seventh eighth ninth tenth
syntax keyword racketFunc last last-pair make-list take drop split-at
syntax keyword racketFunc take-right drop-right split-at-right add-between
syntax keyword racketFunc append* flatten remove-duplicates filter-map
syntax keyword racketFunc count partition append-map filter-not shuffle
syntax keyword racketFunc argmin argmax make-reader-graph placeholder? make-placeholder
syntax keyword racketFunc placeholder-set! placeholder-get hash-placeholder?
syntax keyword racketFunc make-hash-placeholder make-hasheq-placeholder
syntax keyword racketFunc make-hasheqv-placeholder make-immutable-hasheqv
" 3.10 Mutable Pairs and Lists
syntax keyword racketFunc mpair? mcons mcar mcdr
" 3.11 Vectors
syntax keyword racketFunc vector? make-vector vector vector-immutable vector-length
syntax keyword racketFunc vector-ref vector-set! vector->list list->vector
syntax keyword racketFunc vector->immutable-vector vector-fill! vector-copy!
syntax keyword racketFunc vector->values build-vector vector-set*! vector-map
syntax keyword racketFunc vector-map! vector-append vector-take vector-take-right
syntax keyword racketFunc vector-drop vector-drop-right vector-split-at
syntax keyword racketFunc vector-split-at-right vector-copy vector-filter
syntax keyword racketFunc vector-filter-not vector-count vector-argmin vector-argmax
syntax keyword racketFunc vector-member vector-memv vector-memq
" 3.12 Boxes
syntax keyword racketFunc box? box box-immutable unbox set-box!
" 3.13 Hash Tables
syntax keyword racketFunc hash? hash-equal? hash-eqv? hash-eq? hash-weak? hash
syntax keyword racketFunc hasheq hasheqv
syntax keyword racketFunc make-hash make-hasheqv make-hasheq make-weak-hash make-weak-hasheqv
syntax keyword racketFunc make-weak-hasheq make-immutable-hash make-immutable-hasheqv
syntax keyword racketFunc make-immutable-hasheq
syntax keyword racketFunc hash-set! hash-set*! hash-set hash-set* hash-ref hash-ref!
syntax keyword racketFunc hash-has-key? hash-update! hash-update hash-remove!
syntax keyword racketFunc hash-remove hash-map hash-keys hash-values
syntax keyword racketFunc hash->list hash-for-each hash-count
syntax keyword racketFunc hash-iterate-first hash-iterate-next hash-iterate-key
syntax keyword racketFunc hash-iterate-value hash-copy eq-hash-code eqv-hash-code
syntax keyword racketFunc equal-hash-code equal-secondary-hash-code
" 3.15 Dictionaries
syntax keyword racketFunc dict? dict-mutable? dict-can-remove-keys? dict-can-functional-set?
syntax keyword racketFunc dict-set! dict-set*! dict-set dict-set* dict-has-key? dict-ref
syntax keyword racketFunc dict-ref! dict-update! dict-update dict-remove! dict-remove
syntax keyword racketFunc dict-map dict-for-each dict-count dict-iterate-first dict-iterate-next
syntax keyword racketFunc dict-iterate-key dict-iterate-value in-dict in-dict-keys
syntax keyword racketFunc in-dict-values in-dict-pairs dict-keys dict-values
syntax keyword racketFunc dict->list prop: dict prop: dict/contract dict-key-contract
syntax keyword racketFunc dict-value-contract dict-iter-contract make-custom-hash
syntax keyword racketFunc make-immutable-custom-hash make-weak-custom-hash
" 3.16 Sets
syntax keyword racketFunc set seteqv seteq set-empty? set-count set-member?
syntax keyword racketFunc set-add set-remove set-union set-intersect set-subtract
syntax keyword racketFunc set-symmetric-difference set=? subset? proper-subset?
syntax keyword racketFunc set-map set-for-each set? set-equal? set-eqv? set-eq?
syntax keyword racketFunc set/c in-set for/set for/seteq for/seteqv for*/set
syntax keyword racketFunc for*/seteq for*/seteqv list->set list->seteq
syntax keyword racketFunc list->seteqv set->list
" 3.17 Procedures
syntax keyword racketFunc procedure? apply compose compose1 procedure-rename procedure->method
syntax keyword racketFunc keyword-apply procedure-arity procedure-arity?
syntax keyword racketFunc procedure-arity-includes? procedure-reduce-arity
syntax keyword racketFunc procedure-keywords make-keyword-procedure
syntax keyword racketFunc procedure-reduce-keyword-arity procedure-struct-type?
syntax keyword racketFunc procedure-extract-target checked-procedure-check-and-extract
syntax keyword racketFunc primitive? primitive-closure? primitive-result-arity
syntax keyword racketFunc identity const thunk thunk* negate curry curryr
" 3.18 Void
syntax keyword racketFunc void void?
" 4.1 Defining Structure Types
syntax keyword racketFunc struct struct-field-index define-struct define-struct define-struct/derived
" 4.2 Creating Structure Types
syntax keyword racketFunc make-struct-type make-struct-field-accessor make-struct-field-mutator
" 4.3 Structure Type Properties
syntax keyword racketFunc make-struct-type-property struct-type-property? struct-type-property-accessor-procedure?
" 4.4 Copying and Updating Structures
syntax keyword racketFunc struct-copy
" 4.5 Structure Utilities
syntax keyword racketFunc struct->vector struct? struct-type?
syntax keyword racketFunc struct-constructor-procedure? struct-predicate-procedure? struct-accessor-procedure? struct-mutator-procedure?
syntax keyword racketFunc prefab-struct-key make-prefab-struct prefab-key->struct-type
" 4.6 Structure Type Transformer Binding
syntax keyword racketFunc struct-info? check-struct-info? make-struct-info extract-struct-info
syntax keyword racketFunc struct-auto-info? struct-auto-info-lists
" 5.1 Creating Interfaces
syntax keyword racketFunc interface interface*
" 5.2 Creating Classes
syntax keyword racketFunc class* class inspect
syntax keyword racketFunc init init-field field inherit field init-rest
syntax keyword racketFunc public public* pubment pubment* public-final public-final*
syntax keyword racketFunc override override* overment overment* override-final override-final*
syntax keyword racketFunc augride augride* augment augment* augment-final augment-final*
syntax keyword racketFunc abstract inherit inherit/super inherit/inner
syntax keyword racketFunc rename-inner rename-super
syntax keyword racketFunc define/public define/pubment define/public-final
syntax keyword racketFunc define/override define/overment define/override-final
syntax keyword racketFunc define/augride define/augment define/augment-final
syntax keyword racketFunc private* define/private
" 5.2.3 Methods
syntax keyword racketFunc class/derived
syntax keyword racketFunc super inner define-local-member-name define-member-name
syntax keyword racketFunc member-name-key generate-member-key member-name-key?
syntax keyword racketFunc member-name-key=? member-name-key-hash-code
" 5.3 Creating Objects
syntax keyword racketFunc make-object instantiate new
syntax keyword racketFunc super-make-object super-instantiate super-new
"5.4 Field and Method Access
syntax keyword racketFunc method-id send send/apply send/keyword-apply dynamic-send send*
syntax keyword racketFunc get-field set-field! field-bound?
syntax keyword racketFunc class-field-accessor class-field-mutator
"5.4.3 Generics
syntax keyword racketFunc generic send-generic make-generic
" 8.1 Data-strucure contracts
syntax keyword racketFunc flat-contract-with-explanation flat-named-contract
" TODO where do any/c and none/c `value`s go?
syntax keyword racketFunc or/c first-or/c and/c not/c =/c </c >/c <=/c >=/c
syntax keyword racketFunc between/c real-in integer-in char-in natural-number/c
syntax keyword racketFunc string-len/c printable/c one-of/c symbols vectorof
syntax keyword racketFunc vector-immutableof vector/c box/c box-immutable/c listof
syntax keyword racketFunc non-empty-listof list*of cons/c cons/dc list/c *list/c
syntax keyword racketFunc syntax/c struct/c struct/dc parameter/c
syntax keyword racketFunc procedure-arity-includes/c hash/c hash/dc channel/c
syntax keyword racketFunc prompt-tag/c continuation-mark-key/c evt/c promise/c
syntax keyword racketFunc flat-contract flat-contract-predicate suggest/c
" 9.1 Multiple Values
syntax keyword racketFunc values call-with-values
" 10.2.2 Raising Exceptions
syntax keyword racketFunc raise error raise-user-error raise-argument-error
syntax keyword racketFunc raise-result-error raise-argument-error raise-range-error
syntax keyword racketFunc raise-type-error raise-mismatch-error raise-arity-error
syntax keyword racketFunc raise-syntax-error
" 10.2.3 Handling Exceptions
syntax keyword racketFunc call-with-exception-handler uncaught-exception-handler
" 10.2.4 Configuring Default Handlers
syntax keyword racketFunc error-escape-handler error-display-handler error-print-width
syntax keyword racketFunc error-print-context-length error-values->string-handler
syntax keyword racketFunc error-print-source-location
" 10.2.5 Built-in Exception Types
syntax keyword racketFunc exn exn:fail exn:fail:contract exn:fail:contract:arity
syntax keyword racketFunc exn:fail:contract:divide-by-zero exn:fail:contract:non-fixnum-result
syntax keyword racketFunc exn:fail:contract:continuation exn:fail:contract:variable
syntax keyword racketFunc exn:fail:syntax exn:fail:syntax:unbound exn:fail:syntax:missing-module
syntax keyword racketFunc exn:fail:read exn:fail:read:eof exn:fail:read:non-char
syntax keyword racketFunc exn:fail:filesystem exn:fail:filesystem:exists
syntax keyword racketFunc exn:fail:filesystem:version exn:fail:filesystem:errno
syntax keyword racketFunc exn:fail:filesystem:missing-module
syntax keyword racketFunc exn:fail:network exn:fail:network:errno exn:fail:out-of-memory
syntax keyword racketFunc exn:fail:unsupported exn:fail:user
syntax keyword racketFunc exn:break exn:break:hang-up exn:break:terminate
" 10.3 Delayed Evaluation
syntax keyword racketFunc promise? delay lazy force promise-forced? promise-running?
" 10.3.1 Additional Promise Kinds
syntax keyword racketFunc delay/name promise/name delay/strict delay/sync delay/thread delay/idle
" 10.4 Continuations
syntax keyword racketFunc call-with-continuation-prompt abort-current-continuation make-continuation-prompt-tag
syntax keyword racketFunc default-continuation-prompt-tag call-with-current-continuation call/cc
syntax keyword racketFunc call-with-composable-continuation call-with-escape-continuation call/ec
syntax keyword racketFunc call-with-continuation-barrier continuation-prompt-available
syntax keyword racketFunc continuation? continuation-prompt-tag dynamic-wind
" 10.4.1 Additional Control Operators
syntax keyword racketFunc call/prompt abort/cc call/comp abort fcontrol spawn splitter new-prompt
" 11.3.2 Parameters
syntax keyword racketFunc make-parameter make-derived-parameter parameter?
syntax keyword racketFunc parameter-procedure=? current-parameterization
syntax keyword racketFunc call-with-parameterization parameterization?
" 14.1.1 Manipulating Paths
syntax keyword racketFunc path? path-string? path-for-some-system? string->path path->string path->bytes
syntax keyword racketFunc string->path-element bytes->path-element path-element->string path-element->bytes
syntax keyword racketFunc path-convention-type system-path-convention-type build-type
syntax keyword racketFunc build-type/convention-type
syntax keyword racketFunc absolute-path? relative-path? complete-path?
syntax keyword racketFunc path->complete-path path->directory-path
syntax keyword racketFunc resolve-path cleanse-path expand-user-path simplify-path normal-case-path split-path
syntax keyword racketFunc path-replace-suffix path-add-suffix
" 14.1.2 More Path Utilities
syntax keyword racketFunc explode-path file-name-from-path filename-extension find-relative-path normalize-path
syntax keyword racketFunc path-element? path-only simple-form-path some-simple-path->string string->some-system-path
" 15.6 Time
syntax keyword racketFunc current-seconds current-inexact-milliseconds
syntax keyword racketFunc seconds->date current-milliseconds
syntax match racketDelimiter !\<\.\>!
syntax cluster racketTop contains=racketSyntax,racketFunc,racketDelimiter
syntax match racketConstant ,\<\*\k\+\*\>,
syntax match racketConstant ,\<<\k\+>\>,
" Non-quoted lists, and strings
syntax region racketStruc matchgroup=racketParen start="("rs=s+1 end=")"re=e-1 contains=@racketTop
syntax region racketStruc matchgroup=racketParen start="#("rs=s+2 end=")"re=e-1 contains=@racketTop
syntax region racketStruc matchgroup=racketParen start="{"rs=s+1 end="}"re=e-1 contains=@racketTop
syntax region racketStruc matchgroup=racketParen start="#{"rs=s+2 end="}"re=e-1 contains=@racketTop
syntax region racketStruc matchgroup=racketParen start="\["rs=s+1 end="\]"re=e-1 contains=@racketTop
syntax region racketStruc matchgroup=racketParen start="#\["rs=s+2 end="\]"re=e-1 contains=@racketTop
for lit in ['hash', 'hasheq', 'hasheqv']
execute printf('syntax match racketLit "\<%s\>" nextgroup=@racketParen containedin=ALLBUT,.*String,.*Comment', '#'.lit)
endfor
for lit in ['rx', 'rx#', 'px', 'px#']
execute printf('syntax match racketRe "\<%s\>" nextgroup=@racketString containedin=ALLBUT,.*String,.*Comment,', '#'.lit)
endfor
unlet lit
" Simple literals
" Strings
syntax match racketStringEscapeError "\\." contained display
syntax match racketStringEscape "\\[abtnvfre'"\\]" contained display
syntax match racketStringEscape "\\$" contained display
syntax match racketStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display
syntax match racketUStringEscape "\\u\x\{1,4}\|\\U\x\{1,8}" contained display
syntax match racketUStringEscape "\\u\x\{4}\\u\x\{4}" contained display
syntax region racketString start=/\%(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/ contains=racketStringEscapeError,racketStringEscape,racketUStringEscape
syntax region racketString start=/#"/ skip=/\\[\\"]/ end=/"/ contains=racketStringEscapeError,racketStringEscape
if exists("racket_no_string_fold")
syn region racketString start=/#<<\z(.*\)$/ end=/^\z1$/
else
syn region racketString start=/#<<\z(.*\)$/ end=/^\z1$/ fold
endif
syntax cluster racketTop add=racketError,racketConstant,racketStruc,racketString
" Numbers
" anything which doesn't match the below rules, but starts with a #d, #b, #o,
" #x, #i, or #e, is an error
syntax match racketNumberError "\<#[xdobie]\k*"
syntax match racketContainedNumberError "\<#o\k*[^-+0-7delfinas#./@]\>"
syntax match racketContainedNumberError "\<#b\k*[^-+01delfinas#./@]\>"
syntax match racketContainedNumberError "\<#[ei]#[ei]"
syntax match racketContainedNumberError "\<#[xdob]#[xdob]"
" start with the simpler sorts
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\d\+/\d\+[-+]\d\+\(/\d\+\)\?i\>" contains=racketContainedNumberError
" different possible ways of expressing complex values
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?[-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f][-+]\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?i\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[dobie]\)\{0,2}[-+]\?\(\d\+\|\d\+#*\.\|\d*\.\d\+\)#*\(/\d\+#*\)\?\([sdlef][-+]\?\d\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>" contains=racketContainedNumberError
" hex versions of the above (separate because of the different possible exponent markers)
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\x\+/\x\+[-+]\x\+\(/\x\+\)\?i\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f][-+]\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?i\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?[-+]\(inf\|nan\)\.[0f]i\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\(inf\|nan\)\.[0f]@[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?\>"
syntax match racketNumber "\<\(#x\|#[ei]#x\|#x#[ei]\)[-+]\?\(\x\+\|\x\+#*\.\|\x*\.\x\+\)#*\(/\x\+#*\)\?\([sl][-+]\?\x\+#*\)\?@[-+]\(inf\|nan\)\.[0f]\>"
" these work for any radix
syntax match racketNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]i\?\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f][-+]\(inf\|nan\)\.[0f]i\>" contains=racketContainedNumberError
syntax match racketNumber "\<\(#[xdobie]\)\{0,2}[-+]\(inf\|nan\)\.[0f]@[-+]\(inf\|nan\)\.[0f]\>" contains=racketContainedNumberError
syntax keyword racketBoolean #t #f #true #false #T #F
syntax match racketError "\<#\\\k*\>"
syntax match racketChar "\<#\\.\w\@!"
syntax match racketChar "\<#\\space\>"
syntax match racketChar "\<#\\newline\>"
syntax match racketChar "\<#\\return\>"
syntax match racketChar "\<#\\null\?\>"
syntax match racketChar "\<#\\backspace\>"
syntax match racketChar "\<#\\tab\>"
syntax match racketChar "\<#\\linefeed\>"
syntax match racketChar "\<#\\vtab\>"
syntax match racketChar "\<#\\page\>"
syntax match racketChar "\<#\\rubout\>"
syntax match racketChar "\<#\\\o\{1,3}\>"
syntax match racketChar "\<#\\x\x\{1,2}\>"
syntax match racketChar "\<#\\u\x\{1,6}\>"
syntax cluster racketTop add=racketNumber,racketBoolean,racketChar
" Command-line parsing
syntax keyword racketExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
syntax match racketSyntax "#lang "
syntax match racketExtSyntax "#:\k\+"
syntax cluster racketTop add=racketExtFunc,racketExtSyntax
" syntax quoting, unquoting and quasiquotation
syntax match racketQuote "#\?['`]"
syntax match racketUnquote "#,"
syntax match racketUnquote "#,@"
syntax match racketUnquote ","
syntax match racketUnquote ",@"
" Comments
syntax match racketSharpBang "\%^#![ /].*" display
syntax match racketComment /;.*$/ contains=racketTodo,racketNote,@Spell
syntax region racketMultilineComment start=/#|/ end=/|#/ contains=racketMultilineComment,racketTodo,racketNote,@Spell
syntax match racketFormComment "#;" nextgroup=@racketTop
syntax match racketTodo /\C\<\(FIXME\|TODO\|XXX\)\ze:\?\>/ contained
syntax match racketNote /\CNOTE\ze:\?/ contained
syntax cluster racketTop add=racketQuote,racketUnquote,racketComment,racketMultilineComment,racketFormComment
" Synchronization and the wrapping up...
syntax sync match matchPlace grouphere NONE "^[^ \t]"
" ... i.e. synchronize on a line that starts at the left margin
" Define the default highlighting.
highlight default link racketSyntax Statement
highlight default link racketFunc Function
highlight default link racketString String
highlight default link racketStringEscape Special
highlight default link racketUStringEscape Special
highlight default link racketStringEscapeError Error
highlight default link racketChar Character
highlight default link racketBoolean Boolean
highlight default link racketNumber Number
highlight default link racketNumberError Error
highlight default link racketContainedNumberError Error
highlight default link racketQuote SpecialChar
highlight default link racketUnquote SpecialChar
highlight default link racketDelimiter Delimiter
highlight default link racketParen Delimiter
highlight default link racketConstant Constant
highlight default link racketLit Type
highlight default link racketRe Type
highlight default link racketComment Comment
highlight default link racketMultilineComment Comment
highlight default link racketFormComment SpecialChar
highlight default link racketSharpBang Comment
highlight default link racketTodo Todo
highlight default link racketNote SpecialComment
highlight default link racketError Error
highlight default link racketExtSyntax Type
highlight default link racketExtFunc PreProc
let b:current_syntax = "racket"