230 lines · 8.6 KB · Text
RawDownload
" 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