xref: /vim-8.2.3635/runtime/syntax/d.vim (revision dfccaf0f)
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