| " 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 |