1" Vim syntax file for the D programming language (version 0.95). 2" 3" Language: D 4" Maintainer: Jason Mills<[email protected]> 5" Last Change: 2004 Jul 15 6" Version: 0.10 7" 8" Options: 9" d_comment_strings - set to highlight strings and numbers in comments 10" 11" d_hl_operator_overload - set to highlight D's specially named functions 12" that when overloaded implement unary and binary operators (e.g. cmp). 13" 14" Todo: 15" - Allow user to set sync minlines 16" 17" - Several keywords (namely, in and out) are both storage class and 18" statements, depending on their context. Must use some matching to figure 19" out which and highlight appropriately. For now I have made such keywords 20" statements. 21" 22" - Mark contents of the asm statement body as special 23" 24 25" Quit when a syntax file was already loaded 26if exists("b:current_syntax") 27 finish 28endif 29 30" Keyword definitions 31" 32syn keyword dExternal import package module extern 33syn keyword dConditional if else switch 34syn keyword dBranch goto break continue 35syn keyword dRepeat while for do foreach 36syn keyword dBoolean true false 37syn keyword dConstant null 38syn keyword dTypedef alias typedef 39syn keyword dStructure template interface class enum struct union 40syn keyword dOperator new delete typeof typeid cast align is 41syn keyword dOperator this super 42if exists("d_hl_operator_overload") 43 syn keyword dOpOverload opNeg opCom opPostInc opPostDec opAdd opSub opSub_r 44 syn keyword dOpOverload opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor 45 syn keyword dOpOverload opShl opShl_r opShr opShr_r opUShr opUShr_r opCat 46 syn keyword dOpOverload opCat_r opEquals opEquals opCmp opCmp opCmp opCmp 47 syn keyword dOpOverload opAddAssign opSubAssign opMulAssign opDivAssign 48 syn keyword dOpOverload opModAssign opAndAssign opOrAssign opXorAssign 49 syn keyword dOpOverload opShlAssign opShrAssign opUShrAssign opCatAssign 50 syn keyword dOpOverload opIndex opIndexAssign opCall opSlice 51 syn keyword dOpOverload opAdd_r opMul_r opAnd_r opOr_r opXor_r 52endif 53syn keyword dType ushort int uint long ulong float 54syn keyword dType void byte ubyte double bit char wchar ucent cent 55syn keyword dType short bool dchar 56syn keyword dType real ireal ifloat idouble creal cfloat cdouble 57syn keyword dDebug deprecated unittest 58syn keyword dExceptions throw try catch finally 59syn keyword dScopeDecl public protected private export 60syn keyword dStatement version debug return with invariant body 61syn keyword dStatement in out inout asm mixin 62syn keyword dStatement function delegate 63syn keyword dStorageClass auto static override final const abstract volatile 64syn keyword dStorageClass synchronized 65syn keyword dPragma pragma 66 67 68" Assert is a statement and a module name. 69syn match dAssert "^assert\>" 70syn match dAssert "[^.]\s*\<assert\>"ms=s+1 71 72" Marks contents of the asm statment body as special 73" 74" TODO 75"syn match dAsmStatement "\<asm\>" 76"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement 77" 78"hi def link dAsmBody dUnicode 79"hi def link dAsmStatement dStatement 80 81" Labels 82" 83" We contain dScopeDecl so public: private: etc. are not highlighted like labels 84syn match dUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl 85syn keyword dLabel case default 86 87" Comments 88" 89syn keyword dTodo contained TODO FIXME TEMP XXX 90syn match dCommentStar contained "^\s*\*[^/]"me=e-1 91syn match dCommentStar contained "^\s*\*$" 92syn match dCommentPlus contained "^\s*+[^/]"me=e-1 93syn match dCommentPlus contained "^\s*+$" 94if exists("d_comment_strings") 95 syn region dBlockCommentString contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell 96 syn region dNestedCommentString contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell 97 syn region dLineCommentString contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell 98 syn region dBlockComment start="/\*" end="\*/" contains=dBlockCommentString,dTodo,@Spell 99 syn region dNestedComment start="/+" end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell 100 syn match dLineComment "//.*" contains=dLineCommentString,dTodo,@Spell 101else 102 syn region dBlockComment start="/\*" end="\*/" contains=dBlockCommentString,dTodo,@Spell 103 syn region dNestedComment start="/+" end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell 104 syn match dLineComment "//.*" contains=dLineCommentString,dTodo,@Spell 105endif 106 107hi link dLineCommentString dBlockCommentString 108hi link dBlockCommentString dString 109hi link dNestedCommentString dString 110hi link dCommentStar dBlockComment 111hi link dCommentPlus dNestedComment 112 113syn sync minlines=25 114 115" Characters 116" 117syn match dSpecialCharError contained "[^']" 118 119" Escape sequences (oct,specal char,hex,wchar). These are not contained 120" because they are considered string litterals 121syn match dEscSequence "\\\(\o\{1,3}\|[\"\\'\\?ntbrfva]\|u\x\{4}\|U\x\{8}\|x\x\x\)" 122syn match dCharacter "'[^']*'" contains=dEscSequence,dSpecialCharError 123syn match dCharacter "'\\''" contains=dEscSequence 124syn match dCharacter "'[^\\]'" 125 126" Unicode characters 127" 128syn match dUnicode "\\u\d\{4\}" 129 130" String. 131" 132syn region dString start=+"+ end=+"+ contains=dEscSequence,@Spell 133syn region dRawString start=+`+ skip=+\\`+ end=+`+ contains=@Spell 134syn region dRawString start=+r"+ skip=+\\"+ end=+"+ contains=@Spell 135syn region dHexString start=+x"+ skip=+\\"+ end=+"+ 136 137" Numbers 138" 139syn case ignore 140syn match dInt display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>" 141" Hex number 142syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>" 143syn match dHex display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>" 144" Flag the first zero of an octal number as something special 145syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero 146syn match dOctalZero display contained "\<0" 147 148"floating point without the dot 149syn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>" 150"floating point number, with dot, optional exponent 151syn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=" 152"floating point number, starting with a dot, optional exponent 153syn match dFloat display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>" 154"floating point number, without dot, with exponent 155"syn match dFloat display "\<\d\+e[-+]\=\d\+[fl]\=\>" 156syn match dFloat display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>" 157 158"floating point without the dot 159syn match dHexFloat display "\<0x\x\+\(fi\=\|l\=i\)\>" 160"floating point number, with dot, optional exponent 161syn match dHexFloat display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\=" 162"floating point number, without dot, with exponent 163syn match dHexFloat display "\<0x\x\+p[-+]\=\x\+[fl]\=\>" 164 165" binary numbers 166syn match dBinary display "\<0b[01_]\+\>" 167" flag an octal number with wrong digits 168syn match dOctalError display "0\o*[89]\d*" 169syn case match 170 171" Pragma (preprocessor) support 172" TODO: Highlight following Integer and optional Filespec. 173syn region dPragma start="#\s*\(line\>\)" skip="\\$" end="$" 174 175 176" The default highlighting. 177" 178hi def link dBinary Number 179hi def link dInt Number 180hi def link dHex Number 181hi def link dOctal Number 182hi def link dFloat Float 183hi def link dHexFloat Float 184hi def link dDebug Debug 185hi def link dBranch Conditional 186hi def link dConditional Conditional 187hi def link dLabel Label 188hi def link dUserLabel Label 189hi def link dRepeat Repeat 190hi def link dExceptions Exception 191hi def link dAssert Statement 192hi def link dStatement Statement 193hi def link dScopeDecl dStorageClass 194hi def link dStorageClass StorageClass 195hi def link dBoolean Boolean 196hi def link dUnicode Special 197hi def link dRawString String 198hi def link dString String 199hi def link dHexString String 200hi def link dCharacter Character 201hi def link dEscSequence SpecialChar 202hi def link dSpecialCharError Error 203hi def link dOctalError Error 204hi def link dOperator Operator 205hi def link dOpOverload Operator 206hi def link dConstant Constant 207hi def link dTypedef Typedef 208hi def link dStructure Structure 209hi def link dTodo Todo 210hi def link dType Type 211hi def link dLineComment Comment 212hi def link dBlockComment Comment 213hi def link dNestedComment Comment 214hi def link dExternal Include 215hi def link dPragma PreProc 216 217let b:current_syntax = "d" 218 219" vim: ts=8 220