Plain Text Paste by KirkMcDonald
Description: d.vim
Hide line numbers

Create new paste
Post a reply
View replies

Paste:
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

Replies:

    (some replies deleted)