0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

302 lines
12 KiB
VimL
Raw Normal View History

2010-01-16 14:29:14 +01:00
" Vim syntax file for the D programming language (version 1.053 and 2.039).
2004-06-13 20:20:40 +00:00
"
2004-07-16 20:18:37 +00:00
" Language: D
2010-01-16 14:29:14 +01:00
" 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.
2004-06-13 20:20:40 +00:00
"
" Options:
2010-01-16 14:29:14 +01:00
" d_comment_strings - Set to highlight strings and numbers in comments.
2004-06-13 20:20:40 +00:00
"
2010-01-16 14:29:14 +01:00
" d_hl_operator_overload - Set to highlight D's specially named functions
" that when overloaded implement unary and binary operators (e.g. opCmp).
2004-06-13 20:20:40 +00:00
"
" Todo:
2010-01-16 14:29:14 +01:00
" - Determine a better method of sync'ing than simply setting minlines
" to a large number.
2004-06-13 20:20:40 +00:00
"
2010-01-16 14:29:14 +01:00
" - 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.
2004-06-13 20:20:40 +00:00
"
" - Mark contents of the asm statement body as special
"
2010-01-16 14:29:14 +01:00
" - Maybe highlight the 'exit', 'failure', and 'success' parts of the
" scope() statement.
"
" - Highlighting DDoc comments.
"
2004-06-13 20:20:40 +00:00
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Keyword definitions
"
2004-07-16 20:18:37 +00:00
syn keyword dExternal import package module extern
2010-01-16 14:29:14 +01:00
syn keyword dConditional if else switch
2004-07-16 20:18:37 +00:00
syn keyword dBranch goto break continue
2010-01-16 14:29:14 +01:00
syn keyword dRepeat while for do foreach foreach_reverse
2004-07-16 20:18:37 +00:00
syn keyword dBoolean true false
syn keyword dConstant null
2010-01-16 14:29:14 +01:00
syn keyword dConstant __FILE__ __LINE__ __EOF__ __VERSION__
syn keyword dConstant __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
2004-07-16 20:18:37 +00:00
syn keyword dTypedef alias typedef
2010-01-16 14:29:14 +01:00
syn keyword dStructure template interface class struct union
syn keyword dEnum enum
2004-07-16 20:18:37 +00:00
syn keyword dOperator new delete typeof typeid cast align is
syn keyword dOperator this super
2004-06-13 20:20:40 +00:00
if exists("d_hl_operator_overload")
2005-11-23 21:25:05 +00:00
syn keyword dOpOverload opNeg opCom opPostInc opPostDec opCast opAdd opSub opSub_r
2004-07-16 20:18:37 +00:00
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
2010-01-16 14:29:14 +01:00
syn keyword dOpOverload opCat_r opEquals opEquals opCmp
syn keyword dOpOverload opAssign opAddAssign opSubAssign opMulAssign opDivAssign
2004-07-16 20:18:37 +00:00
syn keyword dOpOverload opModAssign opAndAssign opOrAssign opXorAssign
syn keyword dOpOverload opShlAssign opShrAssign opUShrAssign opCatAssign
2006-03-12 21:53:56 +00:00
syn keyword dOpOverload opIndex opIndexAssign opCall opSlice opSliceAssign opPos
2010-01-16 14:29:14 +01:00
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
2004-06-13 20:20:40 +00:00
endif
2004-07-16 20:18:37 +00:00
syn keyword dType ushort int uint long ulong float
syn keyword dType void byte ubyte double bit char wchar ucent cent
2010-01-16 14:29:14 +01:00
syn keyword dType short bool dchar string wstring dstring
2004-07-16 20:18:37 +00:00
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
2010-01-16 14:29:14 +01:00
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
2004-07-16 20:18:37 +00:00
syn keyword dPragma pragma
2004-06-13 20:20:40 +00:00
2010-01-16 14:29:14 +01:00
" Attributes/annotations
syn match dAnnotation "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
2004-06-13 20:20:40 +00:00
" Assert is a statement and a module name.
syn match dAssert "^assert\>"
syn match dAssert "[^.]\s*\<assert\>"ms=s+1
2010-01-16 14:29:14 +01:00
" 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
2004-06-13 20:20:40 +00:00
" Marks contents of the asm statment body as special
"
" TODO
"syn match dAsmStatement "\<asm\>"
"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement
"
"hi def link dAsmBody dUnicode
"hi def link dAsmStatement dStatement
" Labels
"
" We contain dScopeDecl so public: private: etc. are not highlighted like labels
2010-01-16 14:29:14 +01:00
syn match dUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl,dEnum
2004-07-16 20:18:37 +00:00
syn keyword dLabel case default
2004-06-13 20:20:40 +00:00
2010-01-16 14:29:14 +01:00
syn cluster dTokens add=dUserLabel,dLabel
2004-06-13 20:20:40 +00:00
" Comments
"
2010-01-16 14:29:14 +01:00
syn keyword dTodo contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
2004-07-16 20:18:37 +00:00
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*+$"
2004-06-13 20:20:40 +00:00
if exists("d_comment_strings")
2004-07-16 20:18:37 +00:00
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
2004-06-13 20:20:40 +00:00
else
2004-07-16 20:18:37 +00:00
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
2004-06-13 20:20:40 +00:00
endif
2004-07-16 20:18:37 +00:00
hi link dLineCommentString dBlockCommentString
hi link dBlockCommentString dString
hi link dNestedCommentString dString
hi link dCommentStar dBlockComment
hi link dCommentPlus dNestedComment
2004-06-13 20:20:40 +00:00
2010-01-16 14:29:14 +01:00
syn cluster dTokens add=dBlockComment,dNestedComment,dLineComment
2006-03-12 21:53:56 +00:00
" /+ +/ 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
" Use ccomment for /* */ style comments
syn sync ccomment dBlockComment
2004-06-13 20:20:40 +00:00
" Characters
"
syn match dSpecialCharError contained "[^']"
2005-03-11 22:46:48 +00:00
" Escape sequences (oct,specal char,hex,wchar, character entities \&xxx;)
2010-01-16 14:29:14 +01:00
" These are not contained because they are considered string literals.
2004-07-16 20:18:37 +00:00
syn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"
2010-01-16 14:29:14 +01:00
syn match dEscSequence "\\&[^;& \t]\+;"
2004-07-16 20:18:37 +00:00
syn match dCharacter "'[^']*'" contains=dEscSequence,dSpecialCharError
syn match dCharacter "'\\''" contains=dEscSequence
syn match dCharacter "'[^\\]'"
2004-06-13 20:20:40 +00:00
2010-01-16 14:29:14 +01:00
syn cluster dTokens add=dEscSequence,dCharacter
2004-06-13 20:20:40 +00:00
" Unicode characters
"
2004-07-16 20:18:37 +00:00
syn match dUnicode "\\u\d\{4\}"
2004-06-13 20:20:40 +00:00
" String.
"
2010-01-16 14:29:14 +01:00
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
2004-06-13 20:20:40 +00:00
" Numbers
"
syn case ignore
2006-03-12 21:53:56 +00:00
syn match dDec display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
2004-06-13 20:20:40 +00:00
" Hex number
2004-07-16 20:18:37 +00:00
syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
2006-03-12 21:53:56 +00:00
syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>"
" flag an octal number with wrong digits
syn match dOctalError display "\<0[0-7_]*[89][0-9_]*"
" binary numbers
syn match dBinary display "\<0b[01_]\+\(u\=l\=\|l\=u\=\)\>"
2004-06-13 20:20:40 +00:00
"floating point without the dot
2004-07-16 20:18:37 +00:00
syn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
2004-06-13 20:20:40 +00:00
"floating point number, with dot, optional exponent
2004-07-16 20:18:37 +00:00
syn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
2004-06-13 20:20:40 +00:00
"floating point number, starting with a dot, optional exponent
2004-07-16 20:18:37 +00:00
syn match dFloat display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
2004-06-13 20:20:40 +00:00
"floating point number, without dot, with exponent
2004-07-16 20:18:37 +00:00
"syn match dFloat display "\<\d\+e[-+]\=\d\+[fl]\=\>"
syn match dFloat display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
2004-06-13 20:20:40 +00:00
"floating point without the dot
2006-03-12 21:53:56 +00:00
syn match dHexFloat display "\<0x[0-9a-f_]\+\(fi\=\|l\=i\)\>"
2004-06-13 20:20:40 +00:00
"floating point number, with dot, optional exponent
2006-03-12 21:53:56 +00:00
syn match dHexFloat display "\<0x[0-9a-f_]\+\.[0-9a-f_]*\(p[-+]\=[0-9_]\+\)\=[fl]\=i\="
2004-06-13 20:20:40 +00:00
"floating point number, without dot, with exponent
2006-03-12 21:53:56 +00:00
syn match dHexFloat display "\<0x[0-9a-f_]\+p[-+]\=[0-9_]\+[fl]\=i\=\>"
2004-06-13 20:20:40 +00:00
2010-01-16 14:29:14 +01:00
syn cluster dTokens add=dDec,dHex,dOctal,dOctalError,dBinary,dFloat,dHexFloat
2004-06-13 20:20:40 +00:00
syn case match
" Pragma (preprocessor) support
" TODO: Highlight following Integer and optional Filespec.
syn region dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
" The default highlighting.
"
hi def link dBinary Number
2006-03-12 21:53:56 +00:00
hi def link dDec Number
2004-06-13 20:20:40 +00:00
hi def link dHex Number
hi def link dOctal Number
hi def link dFloat Float
hi def link dHexFloat Float
hi def link dDebug Debug
hi def link dBranch Conditional
hi def link dConditional Conditional
hi def link dLabel Label
hi def link dUserLabel Label
hi def link dRepeat Repeat
hi def link dExceptions Exception
hi def link dAssert Statement
hi def link dStatement Statement
hi def link dScopeDecl dStorageClass
hi def link dStorageClass StorageClass
hi def link dBoolean Boolean
hi def link dUnicode Special
2010-01-16 14:29:14 +01:00
hi def link dTokenStringBrack String
hi def link dHereString String
hi def link dNestString String
hi def link dDelimString String
2004-06-13 20:20:40 +00:00
hi def link dRawString String
hi def link dString String
hi def link dHexString String
hi def link dCharacter Character
hi def link dEscSequence SpecialChar
hi def link dSpecialCharError Error
hi def link dOctalError Error
hi def link dOperator Operator
2010-01-16 14:29:14 +01:00
hi def link dOpOverload Identifier
2004-06-13 20:20:40 +00:00
hi def link dConstant Constant
hi def link dTypedef Typedef
2010-01-16 14:29:14 +01:00
hi def link dEnum Structure
2004-06-13 20:20:40 +00:00
hi def link dStructure Structure
hi def link dTodo Todo
hi def link dType Type
hi def link dLineComment Comment
hi def link dBlockComment Comment
hi def link dNestedComment Comment
hi def link dExternal Include
hi def link dPragma PreProc
2010-01-16 14:29:14 +01:00
hi def link dAnnotation PreProc
2004-06-13 20:20:40 +00:00
let b:current_syntax = "d"
2010-01-16 14:29:14 +01:00
2005-11-23 21:25:05 +00:00
" vim: ts=8 noet