" Vim syntax file for the D programming language (version 0.149)."" 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"" Options:" 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)."" Todo:" - Must determine a better method of sync'ing than simply setting minlines" to a large number for /+ +/."" - 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."" - Mark contents of the asm statement body as special" " Quit when a syntax file was already loadedif exists("b:current_syntax") finishendif " Keyword definitions"syn keyword dExternal import package module externsyn keyword dConditional if else switch iftypesyn keyword dBranch goto break continuesyn keyword dRepeat while for do foreachsyn keyword dBoolean true falsesyn keyword dConstant nullsyn keyword dConstant __FILE__ __LINE__ __DATE__ __TIME__ __TIMESTAMP__syn keyword dTypedef alias typedefsyn keyword dStructure template interface class enum struct unionsyn keyword dOperator new delete typeof typeid cast align issyn keyword dOperator this superif 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 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 endifsyn keyword dType ushort int uint long ulong floatsyn keyword dType void byte ubyte double bit char wchar ucent centsyn keyword dType short bool dcharsyn keyword dType real ireal ifloat idouble creal cfloat cdoublesyn keyword dDebug deprecated unittestsyn keyword dExceptions throw try catch finallysyn keyword dScopeDecl public protected private exportsyn keyword dStatement version debug return with invariant body scopesyn keyword dStatement in out inout asm mixinsyn keyword dStatement function delegatesyn keyword dStorageClass auto static override final const abstract volatilesyn keyword dStorageClass synchronizedsyn keyword dPragma pragma " Assert is a statement and a module name.syn match dAssert "^assert\>"syn match dAssert "[^.]\s*\<assert\>"ms=s+1 " 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 labelssyn match dUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDeclsyn keyword dLabel case default " Comments"syn keyword dTodo contained TODO FIXME TEMP XXXsyn match dCommentStar contained "^\s*\*[^/]"me=e-1syn match dCommentStar contained "^\s*\*$"syn match dCommentPlus contained "^\s*+[^/]"me=e-1syn 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,@Spellelse 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,@Spellendif hi link dLineCommentString dBlockCommentStringhi link dBlockCommentString dStringhi link dNestedCommentString dStringhi link dCommentStar dBlockCommenthi link dCommentPlus dNestedComment " /+ +/ 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 commentssyn sync ccomment dBlockComment " Characters"syn match dSpecialCharError contained "[^']" " Escape sequences (oct,specal char,hex,wchar, character entities \&xxx;)" These are not contained because they are considered string litteralssyn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)"syn match dEscSequence "\\&[^;& \t]\+;"syn match dCharacter "'[^']*'" contains=dEscSequence,dSpecialCharErrorsyn match dCharacter "'\\''" contains=dEscSequencesyn match dCharacter "'[^\\]'" " Unicode characters"syn match dUnicode "\\u\d\{4\}" " String."syn region dString start=+"+ end=+"[cwd]\=+ contains=dEscSequence,@Spellsyn region dRawString start=+`+ skip=+\\`+ end=+`[cwd]\=+ contains=@Spellsyn region dRawString start=+r"+ skip=+\\"+ end=+"[cwd]\=+ contains=@Spellsyn region dHexString start=+x"+ skip=+\\"+ end=+"[cwd]\=+ contains=@Spell " Numbers"syn case ignore syn match dDec display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>" " Hex numbersyn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>" syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>"" flag an octal number with wrong digitssyn match dOctalError display "\<0[0-7_]*[89][0-9_]*" " binary numberssyn match dBinary display "\<0b[01_]\+\(u\=l\=\|l\=u\=\)\>" "floating point without the dotsyn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>""floating point number, with dot, optional exponentsyn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=""floating point number, starting with a dot, optional exponentsyn 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]\=\>" "floating point without the dotsyn match dHexFloat display "\<0x[0-9a-f_]\+\(fi\=\|l\=i\)\>""floating point number, with dot, optional exponentsyn match dHexFloat display "\<0x[0-9a-f_]\+\.[0-9a-f_]*\(p[-+]\=[0-9_]\+\)\=[fl]\=i\=""floating point number, without dot, with exponentsyn match dHexFloat display "\<0x[0-9a-f_]\+p[-+]\=[0-9_]\+[fl]\=i\=\>" 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 Numberhi def link dDec Numberhi def link dHex Numberhi def link dOctal Numberhi def link dFloat Floathi def link dHexFloat Floathi def link dDebug Debughi def link dBranch Conditionalhi def link dConditional Conditionalhi def link dLabel Labelhi def link dUserLabel Labelhi def link dRepeat Repeathi def link dExceptions Exceptionhi def link dAssert Statementhi def link dStatement Statementhi def link dScopeDecl dStorageClasshi def link dStorageClass StorageClasshi def link dBoolean Booleanhi def link dUnicode Specialhi def link dRawString Stringhi def link dString Stringhi def link dHexString Stringhi def link dCharacter Characterhi def link dEscSequence SpecialCharhi def link dSpecialCharError Errorhi def link dOctalError Errorhi def link dOperator Operatorhi def link dOpOverload Operatorhi def link dConstant Constanthi def link dTypedef Typedefhi def link dStructure Structurehi def link dTodo Todohi def link dType Typehi def link dLineComment Commenthi def link dBlockComment Commenthi def link dNestedComment Commenthi def link dExternal Includehi def link dPragma PreProc let b:current_syntax = "d" " vim: ts=8 noet
" Vim syntax file for the D programming language (version 0.149).
"
" 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
"
" Options:
" 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).
"
" Todo:
" - Must determine a better method of sync'ing than simply setting minlines
" to a large number for /+ +/.
"
" - 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.
"
" - Mark contents of the asm statement body as special
"
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Keyword definitions
"
syn keyword dExternal import package module extern
syn keyword dConditional if else switch iftype
syn keyword dBranch goto break continue
syn keyword dRepeat while for do foreach
syn keyword dBoolean true false
syn keyword dConstant null
syn keyword dConstant __FILE__ __LINE__ __DATE__ __TIME__ __TIMESTAMP__
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 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 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
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 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 dPragma pragma
" Assert is a statement and a module name.
syn match dAssert "^assert\>"
syn match dAssert "[^.]\s*\<assert\>"ms=s+1
" 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
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*+$"
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
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
endif
hi link dLineCommentString dBlockCommentString
hi link dBlockCommentString dString
hi link dNestedCommentString dString
hi link dCommentStar dBlockComment
hi link dCommentPlus dNestedComment
" /+ +/ 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
" Characters
"
syn match dSpecialCharError contained "[^']"
" Escape sequences (oct,specal char,hex,wchar, character entities \&xxx;)
" 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 dEscSequence "\\&[^;& \t]\+;"
syn match dCharacter "'[^']*'" contains=dEscSequence,dSpecialCharError
syn match dCharacter "'\\''" contains=dEscSequence
syn match 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
" Numbers
"
syn case ignore
syn match dDec display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
" Hex number
syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
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\=\)\>"
"floating point without the dot
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\="
"floating point number, starting with a dot, optional exponent
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]\=\>"
"floating point without the dot
syn match dHexFloat display "\<0x[0-9a-f_]\+\(fi\=\|l\=i\)\>"
"floating point number, with dot, optional exponent
syn match dHexFloat display "\<0x[0-9a-f_]\+\.[0-9a-f_]*\(p[-+]\=[0-9_]\+\)\=[fl]\=i\="
"floating point number, without dot, with exponent
syn match dHexFloat display "\<0x[0-9a-f_]\+p[-+]\=[0-9_]\+[fl]\=i\=\>"
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
hi def link dDec Number
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
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
hi def link dOpOverload Operator
hi def link dConstant Constant
hi def link dTypedef Typedef
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
let b:current_syntax = "d"
" vim: ts=8 noet