Mercurial > projects > dil
annotate trunk/src/cmd/DDocXML.d @ 800:dcd30b0ba711
Added --xml option to command 'ddoc'.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sat, 01 Mar 2008 17:58:23 +0100 |
parents | fd719161e743 |
children | c39667f1e814 |
rev | line source |
---|---|
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
1 /++ |
800
dcd30b0ba711
Added --xml option to command 'ddoc'.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
799
diff
changeset
|
2 Authors: Aziz Köksal & Jari-Matti Mäkelä |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
3 License: GPL3 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
4 +/ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
5 module cmd.DDocXML; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
6 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
7 import cmd.DDoc; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
8 import cmd.Generate; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
9 import dil.doc.Parser; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
10 import dil.doc.Macro; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
11 import dil.doc.Doc; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
12 import dil.ast.Node; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
13 import dil.ast.Declarations, |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
14 dil.ast.Statements, |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
15 dil.ast.Expression, |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
16 dil.ast.Parameters, |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
17 dil.ast.Types; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
18 import dil.ast.DefaultVisitor; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
19 import dil.lexer.Token; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
20 import dil.lexer.Funcs; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
21 import dil.semantic.Module; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
22 import dil.semantic.Pass1; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
23 import dil.semantic.Symbol; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
24 import dil.semantic.Symbols; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
25 import dil.Compilation; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
26 import dil.Information; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
27 import dil.Converter; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
28 import dil.SourceText; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
29 import dil.Enums; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
30 import dil.Time; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
31 import common; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
32 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
33 import tango.text.Ascii : toUpper; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
34 import tango.io.File; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
35 import tango.io.FilePath; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
36 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
37 /// Traverses the syntax tree and writes DDoc macros to a string buffer. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
38 class DDocXMLEmitter : DDocEmitter |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
39 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
40 this(Module modul, MacroTable mtable, bool includeUndocumented, |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
41 TokenHighlighter tokenHL) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
42 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
43 super(modul, mtable, includeUndocumented, tokenHL); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
44 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
45 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
46 /// Writes params to the text buffer. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
47 void writeParams(Parameters params) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
48 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
49 if (!params.items.length) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
50 return; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
51 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
52 write("$(PARAMS "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
53 auto lastParam = params.items[$-1]; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
54 foreach (param; params.items) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
55 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
56 if (param.isCVariadic) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
57 write("..."); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
58 else |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
59 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
60 assert(param.type); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
61 // Write storage classes. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
62 auto typeBegin = param.type.baseType.begin; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
63 if (typeBegin !is param.begin) // Write storage classes. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
64 write(textSpan(param.begin, typeBegin.prevNWS), " "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
65 write(escape(textSpan(typeBegin, param.type.end))); // Write type. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
66 if (param.name) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
67 write(" $(DDOC_PARAM ", param.name.str, ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
68 if (param.isDVariadic) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
69 write("..."); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
70 if (param.defValue) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
71 write(" = ", escape(textSpan(param.defValue.begin, param.defValue.end))); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
72 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
73 if (param !is lastParam) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
74 write(", "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
75 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
76 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
77 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
78 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
79 /// Writes the current template parameters to the text buffer. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
80 void writeTemplateParams() |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
81 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
82 if (!tparams) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
83 return; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
84 write("$(TEMPLATE_PARAMS ", escape(textSpan(tparams.begin, tparams.end))[1..$-1], ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
85 tparams = null; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
86 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
87 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
88 /// Writes bases to the text buffer. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
89 void writeInheritanceList(BaseClassType[] bases) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
90 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
91 if (bases.length == 0) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
92 return; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
93 auto basesBegin = bases[0].begin.prevNWS; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
94 if (basesBegin.kind == TOK.Colon) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
95 basesBegin = bases[0].begin; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
96 write("$(PARENTS ", escape(textSpan(basesBegin, bases[$-1].end)), ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
97 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
98 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
99 /// Writes a symbol to the text buffer. E.g: $(SYMBOL Buffer, 123) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
100 void SYMBOL(char[] name, Declaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
101 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
102 auto loc = d.begin.getRealLocation(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
103 auto str = Format("$(SYMBOL {}, {})", name, loc.lineNum); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
104 write(str); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
105 // write("$(DDOC_PSYMBOL ", name, ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
106 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
107 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
108 /// Writes a declaration to the text buffer. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
109 void DECL(void delegate() dg, Declaration d, bool writeSemicolon = true) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
110 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
111 if (cmntIsDitto) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
112 { alias prevDeclOffset offs; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
113 assert(offs != 0); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
114 auto savedText = text; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
115 text = ""; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
116 write("\n$(DDOC_DECL "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
117 dg(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
118 writeAttributes(d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
119 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
120 // Insert text at offset. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
121 auto len = text.length; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
122 text = savedText[0..offs] ~ text ~ savedText[offs..$]; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
123 offs += len; // Add length of the inserted text to the offset. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
124 return; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
125 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
126 write("\n$(DDOC_DECL "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
127 dg(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
128 writeAttributes(d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
129 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
130 prevDeclOffset = text.length; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
131 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
132 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
133 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
134 /// Writes a class or interface declaration. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
135 void writeClassOrInterface(T)(T d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
136 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
137 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
138 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
139 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
140 write(d.begin.srcText, ", "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
141 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
142 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
143 writeInheritanceList(d.bases); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
144 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
145 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
146 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
147 MEMBERS(is(T == ClassDeclaration) ? "CLASS" : "INTERFACE", { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
148 scope s = new Scope(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
149 /*FIXME*/ d.decls && DefaultVisitor.visit(d.decls); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
150 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
151 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
152 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
153 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
154 /// Writes a struct or union declaration. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
155 void writeStructOrUnion(T)(T d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
156 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
157 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
158 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
159 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
160 write(d.begin.srcText, d.name ? ", " : ""); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
161 if (d.name) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
162 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
163 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
164 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
165 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
166 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
167 MEMBERS(is(T == StructDeclaration) ? "STRUCT" : "UNION", { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
168 scope s = new Scope(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
169 /*FIXME*/ d.decls && DefaultVisitor.visit(d.decls); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
170 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
171 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
172 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
173 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
174 /// Writes an alias or typedef declaration. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
175 void writeAliasOrTypedef(T)(T d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
176 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
177 auto prefix = is(T == AliasDeclaration) ? "alias " : "typedef "; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
178 if (auto vd = d.decl.Is!(VariablesDeclaration)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
179 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
180 auto type = textSpan(vd.typeNode.baseType.begin, vd.typeNode.end); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
181 foreach (name; vd.names) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
182 DECL({ write(prefix, ", "); write(escape(type), " "); SYMBOL(name.str, d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
183 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
184 else if (auto fd = d.decl.Is!(FunctionDeclaration)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
185 {} |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
186 // DECL({ write(textSpan(d.begin, d.end)); }, false); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
187 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
188 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
189 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
190 /// Writes the attributes of a declaration in brackets. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
191 void writeAttributes(Declaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
192 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
193 char[][] attributes; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
194 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
195 if (d.prot != Protection.None) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
196 attributes ~= "$(PROT " ~ .toString(d.prot) ~ ")"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
197 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
198 auto stc = d.stc; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
199 stc &= ~StorageClass.Auto; // Ignore auto. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
200 foreach (stcStr; .toStrings(stc)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
201 attributes ~= "$(STC " ~ stcStr ~ ")"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
202 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
203 LinkageType ltype; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
204 if (auto vd = d.Is!(VariablesDeclaration)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
205 ltype = vd.linkageType; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
206 else if (auto fd = d.Is!(FunctionDeclaration)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
207 ltype = fd.linkageType; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
208 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
209 if (ltype != LinkageType.None) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
210 attributes ~= "$(LINKAGE extern(" ~ .toString(ltype) ~ "))"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
211 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
212 if (!attributes.length) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
213 return; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
214 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
215 write("$(ATTRIBUTES "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
216 foreach (attribute; attributes) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
217 write(attribute); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
218 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
219 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
220 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
221 alias Declaration D; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
222 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
223 // alias DDocEmitter.visit visit; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
224 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
225 D visit(EnumDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
226 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
227 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
228 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
229 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
230 write("enum, ", d.name ? " " : ""); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
231 d.name && SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
232 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
233 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
234 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
235 /*FIXME*/ MEMBERS("ENUM", { scope s = new Scope(); DefaultVisitor.visit(d); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
236 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
237 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
238 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
239 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
240 D visit(EnumMemberDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
241 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
242 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
243 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
244 DECL({ write("member, "); SYMBOL(d.name.str, d); }, d, false); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
245 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
246 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
247 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
248 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
249 D visit(TemplateDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
250 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
251 this.tparams = d.tparams; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
252 if (d.begin.kind != TOK.Template) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
253 { // This is a templatized class/interface/struct/union/function. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
254 /*FIXME*/ DefaultVisitor.visit(d.decls); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
255 this.tparams = null; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
256 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
257 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
258 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
259 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
260 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
261 write("template, "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
262 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
263 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
264 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
265 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
266 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
267 MEMBERS("TEMPLATE", { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
268 scope s = new Scope(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
269 /*FIXME*/ DefaultVisitor.visit(d.decls); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
270 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
271 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
272 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
273 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
274 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
275 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
276 D visit(ConstructorDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
277 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
278 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
279 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
280 DECL({ write("constructor, "); SYMBOL("this", d); writeParams(d.params); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
281 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
282 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
283 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
284 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
285 D visit(StaticConstructorDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
286 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
287 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
288 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
289 DECL({ write("static constructor, "); SYMBOL("this", d); write("()"); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
290 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
291 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
292 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
293 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
294 D visit(DestructorDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
295 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
296 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
297 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
298 DECL({ write("destructor, ~"); SYMBOL("this", d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
299 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
300 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
301 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
302 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
303 D visit(StaticDestructorDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
304 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
305 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
306 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
307 DECL({ write("static destructor, ~"); SYMBOL("this", d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
308 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
309 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
310 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
311 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
312 D visit(FunctionDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
313 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
314 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
315 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
316 auto type = textSpan(d.returnType.baseType.begin, d.returnType.end); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
317 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
318 write("function, "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
319 write("$(TYPE "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
320 write("$(RETURNS ", escape(type), ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
321 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
322 writeParams(d.params); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
323 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
324 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
325 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
326 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
327 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
328 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
329 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
330 D visit(NewDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
331 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
332 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
333 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
334 DECL({ write("new, "); SYMBOL("new", d); writeParams(d.params); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
335 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
336 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
337 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
338 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
339 D visit(DeleteDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
340 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
341 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
342 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
343 DECL({ write("delete, "); SYMBOL("delete", d); writeParams(d.params); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
344 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
345 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
346 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
347 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
348 D visit(VariablesDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
349 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
350 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
351 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
352 char[] type = "auto"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
353 if (d.typeNode) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
354 type = textSpan(d.typeNode.baseType.begin, d.typeNode.end); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
355 foreach (name; d.names) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
356 DECL({ write("variable, "); write("$(TYPE ", escape(type), ")"); SYMBOL(name.str, d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
357 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
358 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
359 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
360 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
361 D visit(InvariantDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
362 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
363 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
364 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
365 DECL({ write("invariant, "); SYMBOL("invariant", d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
366 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
367 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
368 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
369 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
370 D visit(UnittestDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
371 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
372 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
373 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
374 DECL({ write("unittest, "); SYMBOL("unittest", d); }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
375 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
376 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
377 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
378 } |