Plain Text Paste by KirkMcDonald
Description: d.vim
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | " Vim syntax file for the D programming language (version 2.004). " " Language: D " Maintainer: Jason Mills <jmills@cs.mun.ca> " Last Change: 2007 Sep 14 " Version: 0.17 " " Please email me with bugs, comments, and suggestion. Put vim in the subject " to ensure the email will not be marked as spam. " " (Version 0.17 updated by Kirk McDonald.) " " 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. opCmp). " " d_hl_string_types - Set to highlight the built-in string, wstring, and " dstring aliases. " " Todo: " - Must determine a better method of sync'ing than simply setting minlines " to a large number for /+ +/ style comments. " " - Several keywords (namely, in, out, inout) are both storage class and " statements, depending on their context. I must use some matching to figure " out which and highlight appropriately. For now I have made such keywords " statements. To be somewhat consistent, I also made lazy a statement, even " though it's a storage class. " " - Mark contents of the asm statement body as special " " - Maybe highlight the 'exit', 'failure', and 'success' parts of the " scope() statement. " " 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 syn keyword dBranch goto break continue syn keyword dRepeat while for do foreach foreach_reverse 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 struct union syn keyword dEnum enum 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 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 opCast 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 opPos opAssign syn keyword dOpOverload opSliceAssign opApply opApplyReverse opIn opIn_r 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 lazy ref macro syn keyword dStatement function delegate __traits syn keyword dStorageClass auto static override final const abstract volatile syn keyword dStorageClass synchronized syn keyword dPragma pragma if exists("d_hl_string_types") syn keyword dStringType string wstring dstring endif " Assert is a statement and a module name. syn match dAssert "^assert\>" syn match dAssert "[^.]\s*\<assert\>"ms=s+1 " dTokens is used by the token string highlighting syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean syn cluster dTokens add=dConstant,dTypedef,dStructure,dOperator,dOpOverload syn cluster dTokens add=dType,dDebug,dExceptions,dScopeDecl,dStatement syn cluster dTokens add=dStorageClass,dPragma,dAssert " 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,dEnum syn keyword dLabel case default syn cluster dTokens add=dUserLabel,dLabel " Comments " syn keyword dTodo contained TODO FIXME TEMP XXX BUG 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 syn cluster dTokens add=dBlockComment,dNestedComment,dLineComment " /+ +/ 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 literals. 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 "'[^\\]'" syn cluster dTokens add=dEscSequence,dCharacter " Unicode characters " syn match dUnicode "\\u\d\{4\}" " String. " syn region dString start=+"+ end=+"[cwd]\=+ contains=dEscSequence,@Spell syn region dRawString start=+`+ end=+`[cwd]\=+ contains=@Spell syn region dRawString start=+r"+ end=+"[cwd]\=+ contains=@Spell syn region dHexString start=+x"+ end=+"[cwd]\=+ contains=@Spell syn region dDelimString start=+q"\z(.\)+ end=+\z1"+ contains=@Spell syn region dHereString start=+q"\z(\I\i*\)\n+ end=+\n\z1"+ contains=@Spell " Nesting delimited string contents " syn region dNestParenString start=+(+ end=+)+ contained transparent contains=dNestParenString,@Spell syn region dNestBrackString start=+\[+ end=+\]+ contained transparent contains=dNestBrackString,@Spell syn region dNestAngleString start=+<+ end=+>+ contained transparent contains=dNestAngleString,@Spell syn region dNestCurlyString start=+{+ end=+}+ contained transparent contains=dNestCurlyString,@Spell " Nesting delimited strings " syn region dParenString matchgroup=dParenString start=+q"(+ end=+)"+ contains=dNestParenString,@Spell syn region dBrackString matchgroup=dBrackString start=+q"\[+ end=+\]"+ contains=dNestBrackString,@Spell syn region dAngleString matchgroup=dAngleString start=+q"<+ end=+>"+ contains=dNestAngleString,@Spell syn region dCurlyString matchgroup=dCurlyString start=+q"{+ end=+}"+ contains=dNestCurlyString,@Spell hi link dParenString dNestString hi link dBrackString dNestString hi link dAngleString dNestString hi link dCurlyString dNestString syn cluster dTokens add=dString,dRawString,dHexString,dDelimString,dNestString " Token strings " syn region dNestTokenString start=+{+ end=+}+ contained contains=dNestTokenString,@dTokens syn region dTokenString matchgroup=dTokenStringBrack transparent start=+q{+ end=+}+ contains=dNestTokenString,@dTokens syn cluster dTokens add=dTokenString " 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 cluster dTokens add=dDec,dHex,dOctal,dOctalError,dBinary,dFloat,dHexFloat 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 dTokenStringBrack String hi def link dHereString String hi def link dNestString String hi def link dDelimString String 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 Identifier hi def link dStringType Identifier hi def link dConstant Constant hi def link dTypedef Typedef hi def link dEnum Structure 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 |