blob: bfb6a0344334ed1006300398b2365e7d52bea0b8 [file] [log] [blame]
Bram Moolenaar21cf8232004-07-16 20:18:37 +00001" Vim syntax file for the D programming language (version 0.95).
Bram Moolenaar071d4272004-06-13 20:20:40 +00002"
Bram Moolenaar21cf8232004-07-16 20:18:37 +00003" Language: D
4" Maintainer: Jason Mills<jmills@cs.mun.ca>
5" Last Change: 2004 Jul 15
6" Version: 0.10
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
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"
Bram Moolenaar21cf8232004-07-16 20:18:37 +000032syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000042if exists("d_hl_operator_overload")
Bram Moolenaar21cf8232004-07-16 20:18:37 +000043 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000052endif
Bram Moolenaar21cf8232004-07-16 20:18:37 +000053syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
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
Bram Moolenaar21cf8232004-07-16 20:18:37 +000084syn match dUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl
85syn keyword dLabel case default
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
87" Comments
88"
Bram Moolenaar21cf8232004-07-16 20:18:37 +000089syn 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*+$"
Bram Moolenaar071d4272004-06-13 20:20:40 +000094if exists("d_comment_strings")
Bram Moolenaar21cf8232004-07-16 20:18:37 +000095 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000101else
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000102 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105endif
106
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000107hi link dLineCommentString dBlockCommentString
108hi link dBlockCommentString dString
109hi link dNestedCommentString dString
110hi link dCommentStar dBlockComment
111hi link dCommentPlus dNestedComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112
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
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000121syn 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 "'[^\\]'"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
126" Unicode characters
127"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000128syn match dUnicode "\\u\d\{4\}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129
130" String.
131"
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000132syn 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=+"+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136
137" Numbers
138"
139syn case ignore
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000140syn match dInt display "\<\d[0-9_]*\(u\=l\=\|l\=u\=\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000141" Hex number
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000142syn match dHex display "\<0x[0-9a-f_]\+\(u\=l\=\|l\=u\=\)\>"
143syn match dHex display "\<\x[0-9a-f_]*h\(u\=l\=\|l\=u\=\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144" Flag the first zero of an octal number as something special
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000145syn match dOctal display "\<0[0-7_]\+\(u\=l\=\|l\=u\=\)\>" contains=cOctalZero
146syn match dOctalZero display contained "\<0"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000147
148"floating point without the dot
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000149syn match dFloat display "\<\d[0-9_]*\(fi\=\|l\=i\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150"floating point number, with dot, optional exponent
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000151syn match dFloat display "\<\d[0-9_]*\.[0-9_]*\(e[-+]\=[0-9_]\+\)\=[fl]\=i\="
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152"floating point number, starting with a dot, optional exponent
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000153syn match dFloat display "\(\.[0-9_]\+\)\(e[-+]\=[0-9_]\+\)\=[fl]\=i\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000154"floating point number, without dot, with exponent
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000155"syn match dFloat display "\<\d\+e[-+]\=\d\+[fl]\=\>"
156syn match dFloat display "\<\d[0-9_]*e[-+]\=[0-9_]\+[fl]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157
158"floating point without the dot
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000159syn match dHexFloat display "\<0x\x\+\(fi\=\|l\=i\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160"floating point number, with dot, optional exponent
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000161syn match dHexFloat display "\<0x\x\+\.\x*\(p[-+]\=\x\+\)\=[fl]\=i\="
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162"floating point number, without dot, with exponent
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000163syn match dHexFloat display "\<0x\x\+p[-+]\=\x\+[fl]\=\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164
165" binary numbers
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000166syn match dBinary display "\<0b[01_]\+\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167" flag an octal number with wrong digits
Bram Moolenaar21cf8232004-07-16 20:18:37 +0000168syn match dOctalError display "0\o*[89]\d*"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169syn 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