summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/d.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-01-16 14:29:14 +0100
committerBram Moolenaar <Bram@vim.org>2010-01-16 14:29:14 +0100
commit9db9d9ce056ea1a23f5e2e002cb5602c86d130ac (patch)
tree4c7f7ccc97d60f156c612f758037b96c2c0e0315 /runtime/syntax/d.vim
parent555cdc2f8cf2911739714d6b701d6bd09e219208 (diff)
Updated runtime files.
Diffstat (limited to 'runtime/syntax/d.vim')
-rw-r--r--runtime/syntax/d.vim149
1 files changed, 110 insertions, 39 deletions
diff --git a/runtime/syntax/d.vim b/runtime/syntax/d.vim
index 244e053596..964936e606 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 @@ endif
" 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 @@ syn match dAssert "[^.]\s*\<assert\>"ms=s+1
" 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 dNestedCommentString dString
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 sync ccomment dBlockComment
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 @@ syn match dHexFloat display "\<0x[0-9a-f_]\+\.[0-9a-f_]*\(p[-+]\=[0-9_]\+\)\=[fl
"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 dScopeDecl dStorageClass
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 dEscSequence SpecialChar
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 dBlockComment Comment
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