updated for version 7.0009
diff --git a/runtime/syntax/d.vim b/runtime/syntax/d.vim
index 51ecc43..bfb6a03 100644
--- a/runtime/syntax/d.vim
+++ b/runtime/syntax/d.vim
@@ -1,10 +1,9 @@
-" Vim syntax file for the D programming language (version 0.90).
+" Vim syntax file for the D programming language (version 0.95).
 "
-" Language:     D
-" Maintainer:   Jason Mills<jmills@cs.mun.ca>
-" URL:
-" Last Change:  2004 May 21
-" Version:      0.8
+" Language:	D
+" Maintainer:	Jason Mills<jmills@cs.mun.ca>
+" Last Change:	2004 Jul 15
+" Version:	0.10
 "
 " Options:
 "   d_comment_strings - set to highlight strings and numbers in comments
@@ -30,39 +29,40 @@
 
 " Keyword definitions
 "
-syn keyword dExternal	     import module extern
-syn keyword dConditional     if else switch
-syn keyword dBranch	     goto break continue
-syn keyword dRepeat	     while for do foreach
-syn keyword dBoolean	     true false
-syn keyword dConstant	     null
-syn keyword dTypedef	     alias typedef
-syn keyword dStructure	     template interface class enum struct union
-syn keyword dOperator	     new delete typeof cast align is
-syn keyword dOperator	     this super
+syn keyword dExternal		import package module extern
+syn keyword dConditional	if else switch
+syn keyword dBranch		goto break continue
+syn keyword dRepeat		while for do foreach
+syn keyword dBoolean		true false
+syn keyword dConstant		null
+syn keyword dTypedef		alias typedef
+syn keyword dStructure		template interface class enum struct union
+syn keyword dOperator		new delete typeof typeid cast align is
+syn keyword dOperator		this super
 if exists("d_hl_operator_overload")
-  syn keyword dOpOverload  opNeg opCom opPostInc opPostDec opAdd opSub opSub_r
-  syn keyword dOpOverload  opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
-  syn keyword dOpOverload  opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
-  syn keyword dOpOverload  opCat_r opEquals opEquals opCmp opCmp opCmp opCmp
-  syn keyword dOpOverload  opAddAssign opSubAssign opMulAssign opDivAssign
-  syn keyword dOpOverload  opModAssign opAndAssign opOrAssign opXorAssign
-  syn keyword dOpOverload  opShlAssign opShrAssign opUShrAssign opCatAssign
-  syn keyword dOpOverload  opIndex opCall opSlice
+  syn keyword dOpOverload	opNeg opCom opPostInc opPostDec opAdd opSub opSub_r
+  syn keyword dOpOverload	opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
+  syn keyword dOpOverload	opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
+  syn keyword dOpOverload	opCat_r opEquals opEquals opCmp opCmp opCmp opCmp
+  syn keyword dOpOverload	opAddAssign opSubAssign opMulAssign opDivAssign
+  syn keyword dOpOverload	opModAssign opAndAssign opOrAssign opXorAssign
+  syn keyword dOpOverload	opShlAssign opShrAssign opUShrAssign opCatAssign
+  syn keyword dOpOverload	opIndex opIndexAssign opCall opSlice
+  syn keyword dOpOverload	opAdd_r opMul_r opAnd_r opOr_r opXor_r 
 endif
-syn keyword dType	     ushort int uint long ulong float
-syn keyword dType	     void byte ubyte double bit char wchar ucent cent
-syn keyword dType	     short bool dchar
-syn keyword dType	     real ireal ifloat idouble creal cfloat cdouble
-syn keyword dDebug	     deprecated unittest
-syn keyword dExceptions      throw try catch finally
-syn keyword dScopeDecl       public protected private export
-syn keyword dStatement       version debug return with invariant body
-syn keyword dStatement       in out inout asm mixin
-syn keyword dStatement       function delegate
-syn keyword dStorageClass    auto static override final const abstract volatile
-syn keyword dStorageClass    synchronized
-syn keyword dPragma	     pragma
+syn keyword dType		ushort int uint long ulong float
+syn keyword dType		void byte ubyte double bit char wchar ucent cent
+syn keyword dType		short bool dchar
+syn keyword dType		real ireal ifloat idouble creal cfloat cdouble
+syn keyword dDebug		deprecated unittest
+syn keyword dExceptions		throw try catch finally
+syn keyword dScopeDecl		public protected private export
+syn keyword dStatement		version debug return with invariant body
+syn keyword dStatement		in out inout asm mixin
+syn keyword dStatement		function delegate
+syn keyword dStorageClass	auto static override final const abstract volatile
+syn keyword dStorageClass	synchronized
+syn keyword dPragma		pragma
 
 
 " Assert is a statement and a module name.
@@ -81,34 +81,34 @@
 " Labels
 "
 " We contain dScopeDecl so public: private: etc. are not highlighted like labels
-syn match   dUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl
-syn keyword dLabel	     case default
+syn match dUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl
+syn keyword dLabel	case default
 
 " Comments
 "
-syn keyword dTodo	      contained TODO FIXME TEMP XXX
-syn match   dCommentStar      contained "^\s*\*[^/]"me=e-1
-syn match   dCommentStar      contained "^\s*\*$"
-syn match   dCommentPlus      contained "^\s*+[^/]"me=e-1
-syn match   dCommentPlus      contained "^\s*+$"
+syn keyword dTodo	contained TODO FIXME TEMP XXX
+syn match dCommentStar	contained "^\s*\*[^/]"me=e-1
+syn match dCommentStar	contained "^\s*\*$"
+syn match dCommentPlus	contained "^\s*+[^/]"me=e-1
+syn match dCommentPlus	contained "^\s*+$"
 if exists("d_comment_strings")
-  syn region  dBlockCommentString   contained  start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
-  syn region  dNestedCommentString  contained  start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
-  syn region  dLineCommentString    contained start=+"+  end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
-  syn region  dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region  dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
-  syn match   dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
+  syn region dBlockCommentString	contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
+  syn region dNestedCommentString	contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
+  syn region dLineCommentString		contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 else
-  syn region  dBlockComment     start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region  dNestedComment    start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
-  syn match   dLineComment      "//.*" contains=dLineCommentString,dTodo,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 endif
 
-hi link dLineCommentString dBlockCommentString
-hi link dBlockCommentString dString
-hi link dNestedCommentString dString
-hi link dCommentStar  dBlockComment
-hi link dCommentPlus  dNestedComment
+hi link dLineCommentString	dBlockCommentString
+hi link dBlockCommentString	dString
+hi link dNestedCommentString	dString
+hi link dCommentStar		dBlockComment
+hi link dCommentPlus		dNestedComment
 
 syn sync minlines=25
 
@@ -118,54 +118,54 @@
 
 " Escape sequences (oct,specal char,hex,wchar). These are not contained
 " because they are considered string litterals
-syn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
-syn match dCharacter  "'[^']*'" contains=dEscSequence,dSpecialCharError
-syn match dCharacter  "'\\''" contains=dEscSequence
-syn match dCharacter  "'[^\\]'"
+syn match dEscSequence	"\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
+syn match dCharacter	"'[^']*'" contains=dEscSequence,dSpecialCharError
+syn match dCharacter	"'\\''" contains=dEscSequence
+syn match dCharacter	"'[^\\]'"
 
 " Unicode characters
 "
-syn match   dUnicode "\\u\d\{4\}"
+syn match dUnicode "\\u\d\{4\}"
 
 " String.
 "
-syn region  dString start=+"+ end=+"+ contains=dEscSequence,@Spell
-syn region  dRawString start=+`+ skip=+\\`+ end=+`+ contains=@Spell
-syn region  dRawString start=+r"+ skip=+\\"+ end=+"+ contains=@Spell
-syn region  dHexString start=+x"+ skip=+\\"+ end=+"+
+syn region dString	start=+"+ end=+"+ contains=dEscSequence,@Spell
+syn region dRawString	start=+`+ skip=+\\`+ end=+`+ contains=@Spell
+syn region dRawString	start=+r"+ skip=+\\"+ end=+"+ contains=@Spell
+syn region dHexString	start=+x"+ skip=+\\"+ end=+"+
 
 " Numbers
 "
 syn case ignore
-syn match dInt        display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
+syn match dInt		display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
 " Hex number
-syn match dHex        display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
-syn match dHex        display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>"
+syn match dHex		display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
+syn match dHex		display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>"
 " Flag the first zero of an octal number as something special
-syn match dOctal      display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero
-syn match dOctalZero  display contained "\<0"
+syn match dOctal	display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero
+syn match dOctalZero	display contained "\<0"
 
 "floating point without the dot
-syn match dFloat      display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
+syn match dFloat	display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
 "floating point number, with dot, optional exponent
-syn match dFloat      display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
+syn match dFloat	display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
 "floating point number, starting with a dot, optional exponent
-syn match dFloat      display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
+syn match dFloat	display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
 "floating point number, without dot, with exponent
-"syn match dFloat      display "\<\d\+e[-+]\=\d\+[fl]\=\>"
-syn match dFloat      display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
+"syn match dFloat	display "\<\d\+e[-+]\=\d\+[fl]\=\>"
+syn match dFloat	display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
 
 "floating point without the dot
-syn match dHexFloat      display "\<0x\x\+\(fi\=\|l\=i\)\>"
+syn match dHexFloat	display "\<0x\x\+\(fi\=\|l\=i\)\>"
 "floating point number, with dot, optional exponent
-syn match dHexFloat      display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\="
+syn match dHexFloat	display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\="
 "floating point number, without dot, with exponent
-syn match dHexFloat      display "\<0x\x\+p[-+]\=\x\+[fl]\=\>"
+syn match dHexFloat	display "\<0x\x\+p[-+]\=\x\+[fl]\=\>"
 
 " binary numbers
-syn match dBinary     display "\<0b[01_]\+\>"
+syn match dBinary	display "\<0b[01_]\+\>"
 " flag an octal number with wrong digits
-syn match dOctalError display "0\o*[89]\d*"
+syn match dOctalError	display "0\o*[89]\d*"
 syn case match
 
 " Pragma (preprocessor) support
diff --git a/runtime/syntax/iss.vim b/runtime/syntax/iss.vim
index 557cd0a..f94c7cd 100644
--- a/runtime/syntax/iss.vim
+++ b/runtime/syntax/iss.vim
@@ -1,7 +1,8 @@
 " Vim syntax file
-" Language:	Inno Setup File (iss file) and My InnoSetup extension
-" Maintainer:	Dominique Stéphan (dominique@mggen.com)
-" Last change:	2004 July 5
+" Language:             Inno Setup File (iss file) and My InnoSetup extension
+" Maintainer:           Jason Mills (jmills@cs.mun.ca)
+" Previous Maintainer:  Dominique Stéphan (dominique@mggen.com)
+" Last Change:          2004 Jul 13
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,37 +15,40 @@
 " shut case off
 syn case ignore
 
+" Preprocessor
+syn region issPreProc start="^\s*#" end="$"
+
 " Section
-syn region issHeader		start="\[" end="\]"
+syn region issHeader            start="\[" end="\]"
 
 " Label in the [Setup] Section
-syn match  issLabel		"^[^=]\+="
+syn match  issLabel             "^[^=]\+="
 
 " URL
-syn match  issURL		"http[s]\=:\/\/.*$"
+syn match  issURL       "http[s]\=:\/\/.*$"
 
-" syn match  issName		"[^: ]\+:"
-syn match  issName		"Name:"
-syn match  issName		"MinVersion:\|OnlyBelowVersion:\|Languages:"
-syn match  issName		"Source:\|DestDir:\|DestName:\|CopyMode:"
-syn match  issName		"Attribs:\|Permissions:\|FontInstall:\|Flags:"
-syn match  issName		"FileName:\|Parameters:\|WorkingDir:\|HotKey:\|Comment:"
-syn match  issName		"IconFilename:\|IconIndex:"
-syn match  issName		"Section:\|Key:\|String:"
-syn match  issName		"Root:\|SubKey:\|ValueType:\|ValueName:\|ValueData:"
-syn match  issName		"RunOnceId:"
-syn match  issName		"Type:"
-syn match  issName		"Components:\|Description:\|GroupDescription:\|Types:\|ExtraDiskSpaceRequired:"
-syn match  issName              "StatusMsg:\|RunOnceId:\|Tasks:"
-syn match  issName              "MessagesFile:\|LicenseFile:\|InfoBeforeFile:\|InfoAfterFile:"
+" syn match  issName    "[^: ]\+:"
+syn match  issName      "Name:"
+syn match  issName      "MinVersion:\|OnlyBelowVersion:\|Languages:"
+syn match  issName      "Source:\|DestDir:\|DestName:\|CopyMode:"
+syn match  issName      "Attribs:\|Permissions:\|FontInstall:\|Flags:"
+syn match  issName      "FileName:\|Parameters:\|WorkingDir:\|HotKey:\|Comment:"
+syn match  issName      "IconFilename:\|IconIndex:"
+syn match  issName      "Section:\|Key:\|String:"
+syn match  issName      "Root:\|SubKey:\|ValueType:\|ValueName:\|ValueData:"
+syn match  issName      "RunOnceId:"
+syn match  issName      "Type:"
+syn match  issName      "Components:\|Description:\|GroupDescription:\|Types:\|ExtraDiskSpaceRequired:"
+syn match  issName      "StatusMsg:\|RunOnceId:\|Tasks:"
+syn match  issName      "MessagesFile:\|LicenseFile:\|InfoBeforeFile:\|InfoAfterFile:"
 
-syn match  issComment		"^;.*$"
+syn match  issComment   "^;.*$"
 
 " folder constant
-syn match  issFolder		"{[^{]*}"
+syn match  issFolder    "{[^{]*}"
 
 " string
-syn region issString	start=+"+  end=+"+ contains=issFolder
+syn region issString    start=+"+  end=+"+ contains=issFolder
 
 " [Dirs]
 syn keyword issDirsFlags deleteafterinstall uninsalwaysuninstall uninsneveruninstall
@@ -104,31 +108,30 @@
   endif
 
    " The default methods for highlighting.  Can be overridden later
-   HiLink issHeader	Special
-   HiLink issComment	Comment
-   HiLink issLabel	Type
-   HiLink issName	Type
-   HiLink issFolder	Special
-   HiLink issString	String
-   HiLink issValue	String
-   HiLink issURL	Include
+   HiLink issHeader     Special
+   HiLink issComment    Comment
+   HiLink issLabel      Type
+   HiLink issName       Type
+   HiLink issFolder     Special
+   HiLink issString     String
+   HiLink issValue      String
+   HiLink issURL        Include
+   HiLink issPreProc    PreProc 
 
-   HiLink issDirsFlags		Keyword
-   HiLink issFilesCopyMode	Keyword
-   HiLink issFilesAttribs	Keyword
-   HiLink issFilesPermissions	Keyword
-   HiLink issFilesFlags		Keyword
-   HiLink issIconsFlags		Keyword
-   HiLink issINIFlags		Keyword
-   HiLink issRegRootKey		Keyword
-   HiLink issRegValueType	Keyword
-   HiLink issRegFlags		Keyword
-   HiLink issRunFlags		Keyword
-   HiLink issTypesFlags		Keyword
-   HiLink issComponentsFlags	Keyword
-   HiLink issInstallDeleteType	Keyword
-   HiLink issTasksFlags 	Keyword
-
+   HiLink issDirsFlags          Keyword
+   HiLink issFilesCopyMode      Keyword
+   HiLink issFilesAttribs       Keyword
+   HiLink issFilesFlags         Keyword
+   HiLink issIconsFlags         Keyword
+   HiLink issINIFlags           Keyword
+   HiLink issRegRootKey         Keyword
+   HiLink issRegValueType       Keyword
+   HiLink issRegFlags           Keyword
+   HiLink issRunFlags           Keyword
+   HiLink issTypesFlags         Keyword
+   HiLink issComponentsFlags    Keyword
+   HiLink issInstallDeleteType  Keyword
+   HiLink issTasksFlags         Keyword
 
   delcommand HiLink
 endif
diff --git a/runtime/syntax/scheme.vim b/runtime/syntax/scheme.vim
index d3de35b..1d4f55d 100644
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -1,11 +1,14 @@
 " Vim syntax file
 " Language:	Scheme (R5RS)
-" Maintainer:	Dirk van Deun <dirk@igwe.vub.ac.be>
-" Last Change:	April 30, 1998
+" Last Change:	July 14, 2004
+" Maintainer:	Sergey Khorev <iamphet@nm.ru>
+" Original author:	Dirk van Deun <dirk@igwe.vub.ac.be>
 
 " This script incorrectly recognizes some junk input as numerals:
 " parsing the complete system of Scheme numerals using the pattern
 " language is practically impossible: I did a lax approximation.
+ 
+" MzScheme extensions can be activated with setting is_mzscheme variable
 
 " Suggestions and bug reports are solicited by the author.
 
@@ -23,12 +26,12 @@
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
 
-syn match	schemeError	oneline    ![^ \t()";]*!
+syn match	schemeError	oneline    ![^ \t()\[\]";]*!
 syn match	schemeError	oneline    ")"
 
 " Quoted and backquoted stuff
 
-syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeQuoted matchgroup=Delimiter start="['`]" end=![ \t()\[\]";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 
 syn region schemeQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 syn region schemeQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
@@ -36,15 +39,26 @@
 syn region schemeStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 syn region schemeStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 
-syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
-syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+" Popular Scheme extension:
+" using [] as well as ()
+syn region schemeStrucRestricted matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeStrucRestricted matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 
-syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
-syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start="," end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start=",@" end=![ \t\[\]()";]!me=e-1 contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
+syn region schemeUnquote matchgroup=Delimiter start=",(" end=")" contains=ALL
+syn region schemeUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALL
 
 syn region schemeUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 syn region schemeUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
 
+syn region schemeUnquote matchgroup=Delimiter start=",\[" end="\]" contains=ALL
+syn region schemeUnquote matchgroup=Delimiter start=",@\[" end="\]" contains=ALL
+
+syn region schemeUnquote matchgroup=Delimiter start=",#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+syn region schemeUnquote matchgroup=Delimiter start=",@#\[" end="\]" contains=ALLBUT,schemeStruc,schemeSyntax,schemeFunc
+
 " R5RS Scheme Functions and Syntax:
 
 if version < 600
@@ -96,63 +110,126 @@
 syn keyword schemeFunc scheme-report-environment null-environment
 syn keyword schemeFunc interaction-environment
 
-" Writing out the complete description of Scheme numerals without
-" using variables is a day's work for a trained secretary...
-" This is a useful lax approximation:
-
-syn match	schemeNumber	oneline    "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
-syn match	schemeError	oneline    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
-
-syn match	schemeOther	oneline    ![+-][ \t()";]!me=e-1
-syn match	schemeOther	oneline    ![+-]$!
 " ... so that a single + or -, inside a quoted context, would not be
 " interpreted as a number (outside such contexts, it's a schemeFunc)
 
-syn match	schemeDelimiter	oneline    !\.[ \t()";]!me=e-1
+syn match	schemeDelimiter	oneline    !\.[ \t\[\]()";]!me=e-1
 syn match	schemeDelimiter	oneline    !\.$!
 " ... and a single dot is not a number but a delimiter
 
-" Simple literals:
-
-syn match	schemeBoolean	oneline    "#[tf]"
-syn match	schemeError	oneline    !#[tf][^ \t()";]\+!
-
-syn match	schemeChar	oneline    "#\\"
-syn match	schemeChar	oneline    "#\\."
-syn match       schemeError	oneline    !#\\.[^ \t()";]\+!
-syn match	schemeChar	oneline    "#\\space"
-syn match	schemeError	oneline    !#\\space[^ \t()";]\+!
-syn match	schemeChar	oneline    "#\\newline"
-syn match	schemeError	oneline    !#\\newline[^ \t()";]\+!
-
 " This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
 
-syn match	schemeOther	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
-syn match	schemeError	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+syn match	schemeOther	oneline    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*,
+syn match	schemeError	oneline    ,[a-z!$%&*/:<=>?^_~+@#%-][-a-z!$%&*/:<=>?^_~0-9+.@#%]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
 syn match	schemeOther	oneline    "\.\.\."
-syn match	schemeError	oneline    !\.\.\.[^ \t()";]\+!
+syn match	schemeError	oneline    !\.\.\.[^ \t\[\]()";]\+!
 " ... a special identifier
 
-syn match	schemeConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
+syn match	schemeConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t\[\]()";],me=e-1
 syn match	schemeConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
-syn match	schemeError	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+syn match	schemeError	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
-syn match	schemeConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
+syn match	schemeConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t\[\]()";],me=e-1
 syn match	schemeConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
-syn match	schemeError	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
+syn match	schemeError	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t\[\]()";]\+[^ \t\[\]()";]*,
 
 " Non-quoted lists, and strings:
 
 syn region schemeStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
 syn region schemeStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
 
+syn region schemeStruc matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=ALL
+syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
+
+" Simple literals:
 syn region	schemeString	start=+"+  skip=+\\[\\"]+ end=+"+
 
 " Comments:
 
 syn match	schemeComment	";.*$"
 
+
+" Writing out the complete description of Scheme numerals without
+" using variables is a day's work for a trained secretary...
+
+syn match	schemeOther	oneline    ![+-][ \t\[\]()";]!me=e-1
+syn match	schemeOther	oneline    ![+-]$!
+"
+" This is a useful lax approximation:
+syn match	schemeNumber	oneline    "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
+syn match	schemeError	oneline    ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t\[\]()";][^ \t\[\]()";]*!
+
+syn match	schemeBoolean	oneline    "#[tf]"
+syn match	schemeError	oneline    !#[tf][^ \t\[\]()";]\+!
+
+syn match	schemeChar	oneline    "#\\"
+syn match	schemeChar	oneline    "#\\."
+syn match       schemeError	oneline    !#\\.[^ \t\[\]()";]\+!
+syn match	schemeChar	oneline    "#\\space"
+syn match	schemeError	oneline    !#\\space[^ \t\[\]()";]\+!
+syn match	schemeChar	oneline    "#\\newline"
+syn match	schemeError	oneline    !#\\newline[^ \t\[\]()";]\+!
+
+if exists("b:is_mzscheme") || exists("is_mzscheme")
+    " MzScheme extensions added by Sergey Khorev
+    " multiline comment
+    syntax region schemeMultilineComment start=/#|/ end=/|#/
+    " #%xxx are the special MzScheme identifiers
+    syn match schemeOther oneline    "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    " anything limited by |'s is identifier
+    syn match schemeOther oneline    "|[^|]\+|"
+
+    syn match	schemeChar	oneline    "#\\return"
+
+    " Modules require stmt
+    syn keyword schemeExtSyntax module require dynamic-require lib prefix all-except prefix-all-except rename
+    " modules provide stmt
+    syn keyword schemeExtSyntax provide struct all-from all-from-except all-defined all-defined-except
+    " Other from MzScheme
+    syn keyword schemeExtSyntax with-handlers when unless instantiate define-struct case-lambda syntax-case
+    syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
+    syn keyword schemeExtSyntax datum->syntax-object
+    syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
+    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature 
+    syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
+    syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
+    hi def link schemeExtSyntax Type
+
+    syn keyword schemeExtFunc format system-type current-extension-compiler current-extension-linker
+    syn keyword schemeExtFunc use-standard-linker use-standard-compiler
+    syn keyword schemeExtFunc find-executable-path append-object-suffix append-extension-suffix
+    syn keyword schemeExtFunc current-library-collection-paths current-extension-compiler-flags make-parameter
+    syn keyword schemeExtFunc current-directory build-path normalize-path current-extension-linker-flags
+    syn keyword schemeExtFunc file-exists? directory-exists? delete-directory/files delete-directory delete-file
+    syn keyword schemeExtFunc system compile-file system-library-subpath getenv putenv current-standard-link-libraries
+    syn keyword schemeExtFunc remove* file-size find-files fold-files directory-list shell-execute split-path
+    syn keyword schemeExtFunc current-error-port process/ports process printf fprintf open-input-string open-output-string
+    syn keyword schemeExtFunc get-output-string
+    " exceptions
+    syn keyword schemeExtFunc exn exn:application:arity exn:application:continuation exn:application:fprintf:mismatch
+    syn keyword schemeExtFunc exn:application:mismatch exn:application:type exn:application:mismatch exn:break exn:i/o:filesystem exn:i/o:port
+    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
+    syn keyword schemeExtFunc exn:read:non-char exn:special-comment exn:syntax exn:thread exn:user exn:variable exn:application:mismatch
+    syn keyword schemeExtFunc exn? exn:application:arity? exn:application:continuation? exn:application:fprintf:mismatch? exn:application:mismatch?
+    syn keyword schemeExtFunc exn:application:type? exn:application:mismatch? exn:break? exn:i/o:filesystem? exn:i/o:port? exn:i/o:port:closed?
+    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?
+    syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
+    " Command-line parsing
+    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each 
+    hi def link schemeExtFunc PreProc
+
+    " syntax quoting, unquoting and quasiquotation
+    syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
+    syn region schemeUnquote matchgroup=Delimiter start="#,@" end=![ \t\[\]()";]!me=e-1 contains=ALL
+    syn region schemeUnquote matchgroup=Delimiter start="#,(" end=")" contains=ALL
+    syn region schemeUnquote matchgroup=Delimiter start="#,@(" end=")" contains=ALL
+    syn region schemeUnquote matchgroup=Delimiter start="#,\[" end="\]" contains=ALL
+    syn region schemeUnquote matchgroup=Delimiter start="#,@\[" end="\]" contains=ALL
+    syn region schemeQuoted matchgroup=Delimiter start="#['`]" end=![ \t()\[\]";]!me=e-1 contains=ALL
+    syn region schemeQuoted matchgroup=Delimiter start="#['`](" matchgroup=Delimiter end=")" contains=ALL
+endif
+
 " Synchronization and the wrapping up...
 
 syn sync match matchPlace grouphere NONE "^[^ \t]"
@@ -181,6 +258,7 @@
   HiLink schemeConstant	Constant
 
   HiLink schemeComment		Comment
+  HiLink schemeMultilineComment	Comment
   HiLink schemeError		Error
 
   delcommand HiLink