Updated runtime files.
diff --git a/runtime/syntax/d.vim b/runtime/syntax/d.vim
index 244e053..964936e 100644
--- a/runtime/syntax/d.vim
+++ b/runtime/syntax/d.vim
@@ -1,29 +1,44 @@
-" Vim syntax file for the D programming language (version 0.149).
+" Vim syntax file for the D programming language (version 1.053 and 2.039).
 "
 " Language:	D
-" Maintainer:	Jason Mills<jmills@cs.mun.ca>
-"   When emailing me, please put the word vim somewhere in the subject
-"   to ensure the email does not get marked as spam.
-" Last Change:	2006 Apr 30
-" Version:	0.15
+" Maintainer:	Jason Mills<jasonmills@nf.sympatico.ca>
+" Last Change:	2010 Jan 07
+" Version:	0.18
+"
+" Contributors:
+"   - Kirk McDonald: version 0.17 updates, with minor modifications
+"     (http://paste.dprogramming.com/dplmb7qx?view=hidelines)
+"   - Jesse K. Phillips: patch for some keywords and attributes (annotations), with modifications
+"   - Tim Keating: patch to fix a bug in highlighting the `\` literal
+"   - Frank Benoit: Fixed a bug that caused some identifiers and numbers to highlight as octal number errors.
+"
+" Please email me with bugs, comments, and suggestions.
 "
 " Options:
-"   d_comment_strings - set to highlight strings and numbers in comments
+"   d_comment_strings - Set to highlight strings and numbers in comments.
 "
-"   d_hl_operator_overload - set to highlight D's specially named functions
-"   that when overloaded implement unary and binary operators (e.g. cmp).
+"   d_hl_operator_overload - Set to highlight D's specially named functions
+"   that when overloaded implement unary and binary operators (e.g. opCmp).
 "
 " Todo:
-"   - Must determine a better method of sync'ing than simply setting minlines
-"   to a large number for /+ +/.
+"   - Determine a better method of sync'ing than simply setting minlines
+"   to a large number.
 "
-"   - Several keywords (namely, in and out) are both storage class and
-"   statements, depending on their context. Must use some matching to figure
-"   out which and highlight appropriately. For now I have made such keywords
-"   statements.
+"   - Several keywords (e.g., in, out, inout) are both storage class and
+"   statements, depending on their context. Perhaps use pattern matching to
+"   figure out which and highlight appropriately. For now I have made such
+"   keywords storage classes so their highlighting is consistent with other
+"   keywords that are commonly used with them, but are true storage classes,
+"   such as lazy. Similarly, I made some statement keywords (e.g. body) storage
+"   classes.
 "
 "   - Mark contents of the asm statement body as special
 "
+"   - Maybe highlight the 'exit', 'failure', and 'success' parts of the
+"   scope() statement.
+"
+"   - Highlighting DDoc comments.
+"
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -33,46 +48,59 @@
 " Keyword definitions
 "
 syn keyword dExternal		import package module extern
-syn keyword dConditional	if else switch iftype
+syn keyword dConditional	if else switch
 syn keyword dBranch		goto break continue
-syn keyword dRepeat		while for do foreach
+syn keyword dRepeat		while for do foreach foreach_reverse
 syn keyword dBoolean		true false
 syn keyword dConstant		null
-syn keyword dConstant		__FILE__ __LINE__ __DATE__ __TIME__ __TIMESTAMP__
+syn keyword dConstant		__FILE__ __LINE__ __EOF__ __VERSION__
+syn keyword dConstant		__DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
+
 syn keyword dTypedef		alias typedef
-syn keyword dStructure		template interface class enum struct union
+syn keyword dStructure		template interface class struct union
+syn keyword dEnum		enum
 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 opCast 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	opCat_r opEquals opEquals opCmp
+  syn keyword dOpOverload	opAssign 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 opSliceAssign opPos
-  syn keyword dOpOverload	opAdd_r opMul_r opAnd_r opOr_r opXor_r 
+  syn keyword dOpOverload	opAdd_r opMul_r opAnd_r opOr_r opXor_r opIn opIn_r
+  syn keyword dOpOverload	opPow opDispatch opStar opDot opApply opApplyReverse
 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		short bool dchar string wstring dstring
 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 scope
-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 dStatement		version debug return with
+syn keyword dStatement		function delegate __traits asm mixin macro
+syn keyword dStorageClass	in out inout ref lazy scope body
+syn keyword dStorageClass	pure nothrow
+syn keyword dStorageClass	auto static override final abstract volatile __gshared __thread
+syn keyword dStorageClass	synchronized immutable shared const invariant lazy
 syn keyword dPragma		pragma
 
+" Attributes/annotations
+syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
 
 " Assert is a statement and a module name.
 syn match dAssert "^assert\>"
 syn match dAssert "[^.]\s*\<assert\>"ms=s+1
 
+" dTokens is used by the token string highlighting
+syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean
+syn cluster dTokens add=dConstant,dTypedef,dStructure,dOperator,dOpOverload
+syn cluster dTokens add=dType,dDebug,dExceptions,dScopeDecl,dStatement
+syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation
+
 " Marks contents of the asm statment body as special
 "
 " TODO
@@ -85,12 +113,14 @@
 " 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 match dUserLabel    "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl,dEnum
 syn keyword dLabel	case default
 
+syn cluster dTokens add=dUserLabel,dLabel
+
 " Comments
 "
-syn keyword dTodo	contained TODO FIXME TEMP XXX
+syn keyword dTodo	contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
 syn match dCommentStar	contained "^\s*\*[^/]"me=e-1
 syn match dCommentStar	contained "^\s*\*$"
 syn match dCommentPlus	contained "^\s*+[^/]"me=e-1
@@ -114,6 +144,8 @@
 hi link dCommentStar		dBlockComment
 hi link dCommentPlus		dNestedComment
 
+syn cluster dTokens add=dBlockComment,dNestedComment,dLineComment
+
 " /+ +/ style comments and strings that span multiple lines can cause
 " problems. To play it safe, set minlines to a large number.
 syn sync minlines=200
@@ -125,24 +157,55 @@
 syn match dSpecialCharError contained "[^']"
 
 " Escape sequences (oct,specal char,hex,wchar, character entities \&xxx;)
-" These are not contained because they are considered string litterals
+" These are not contained because they are considered string literals.
 syn match dEscSequence	"\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
-syn match dEscSequence "\\&[^;& \t]\+;"
+syn match dEscSequence	"\\&[^;& \t]\+;"
 syn match dCharacter	"'[^']*'" contains=dEscSequence,dSpecialCharError
 syn match dCharacter	"'\\''" contains=dEscSequence
 syn match dCharacter	"'[^\\]'"
 
+syn cluster dTokens add=dEscSequence,dCharacter
+
 " Unicode characters
 "
 syn match dUnicode "\\u\d\{4\}"
 
-
 " String.
 "
-syn region dString	start=+"+ end=+"[cwd]\=+ contains=dEscSequence,@Spell
-syn region dRawString	start=+`+ skip=+\\`+ end=+`[cwd]\=+ contains=@Spell
-syn region dRawString	start=+r"+ skip=+\\"+ end=+"[cwd]\=+ contains=@Spell
-syn region dHexString	start=+x"+ skip=+\\"+ end=+"[cwd]\=+ contains=@Spell
+syn region dString	start=+"+ end=+"[cwd]\=+ skip=+\\\\\|\\"+ contains=dEscSequence,@Spell
+syn region dRawString	start=+`+ end=+`[cwd]\=+ contains=@Spell
+syn region dRawString	start=+r"+ end=+"[cwd]\=+ contains=@Spell
+syn region dHexString	start=+x"+ end=+"[cwd]\=+ contains=@Spell
+syn region dDelimString	start=+q"\z(.\)+ end=+\z1"+ contains=@Spell
+syn region dHereString	start=+q"\z(\I\i*\)\n+ end=+\n\z1"+ contains=@Spell
+
+" Nesting delimited string contents
+"
+syn region dNestParenString start=+(+ end=+)+ contained transparent contains=dNestParenString,@Spell
+syn region dNestBrackString start=+\[+ end=+\]+ contained transparent contains=dNestBrackString,@Spell
+syn region dNestAngleString start=+<+ end=+>+ contained transparent contains=dNestAngleString,@Spell
+syn region dNestCurlyString start=+{+ end=+}+ contained transparent contains=dNestCurlyString,@Spell
+
+" Nesting delimited strings
+"
+syn region dParenString	matchgroup=dParenString start=+q"(+ end=+)"+ contains=dNestParenString,@Spell
+syn region dBrackString	matchgroup=dBrackString start=+q"\[+ end=+\]"+ contains=dNestBrackString,@Spell
+syn region dAngleString	matchgroup=dAngleString start=+q"<+ end=+>"+ contains=dNestAngleString,@Spell
+syn region dCurlyString	matchgroup=dCurlyString start=+q"{+ end=+}"+ contains=dNestCurlyString,@Spell
+
+hi link dParenString dNestString
+hi link dBrackString dNestString
+hi link dAngleString dNestString
+hi link dCurlyString dNestString
+
+syn cluster dTokens add=dString,dRawString,dHexString,dDelimString,dNestString
+
+" Token strings
+"
+syn region dNestTokenString start=+{+ end=+}+ contained contains=dNestTokenString,@dTokens
+syn region dTokenString matchgroup=dTokenStringBrack transparent start=+q{+ end=+}+ contains=dNestTokenString,@dTokens
+
+syn cluster dTokens add=dTokenString
 
 " Numbers
 "
@@ -177,6 +240,8 @@
 "floating point number, without dot, with exponent
 syn match dHexFloat	display "\<0x[0-9a-f_]\+p[-+]\=[0-9_]\+[fl]\=i\=\>"
 
+syn cluster dTokens add=dDec,dHex,dOctal,dOctalError,dBinary,dFloat,dHexFloat
+
 syn case match
 
 " Pragma (preprocessor) support
@@ -205,6 +270,10 @@
 hi def link dStorageClass	StorageClass
 hi def link dBoolean		Boolean
 hi def link dUnicode		Special
+hi def link dTokenStringBrack	String
+hi def link dHereString		String
+hi def link dNestString		String
+hi def link dDelimString	String
 hi def link dRawString		String
 hi def link dString		String
 hi def link dHexString		String
@@ -213,9 +282,10 @@
 hi def link dSpecialCharError	Error
 hi def link dOctalError		Error
 hi def link dOperator		Operator
-hi def link dOpOverload		Operator
+hi def link dOpOverload		Identifier
 hi def link dConstant		Constant
 hi def link dTypedef		Typedef
+hi def link dEnum		Structure
 hi def link dStructure		Structure
 hi def link dTodo		Todo
 hi def link dType		Type
@@ -224,7 +294,8 @@
 hi def link dNestedComment	Comment
 hi def link dExternal		Include
 hi def link dPragma		PreProc
+hi def link dAnnotation		PreProc
 
 let b:current_syntax = "d"
-   
+
 " vim: ts=8 noet