Mercurial > projects > dil
annotate src/cmd/DDocXML.d @ 806:bcb74c9b895c
Moved out files in the trunk folder to the root.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 09 Mar 2008 00:12:19 +0100 |
parents | trunk/src/cmd/DDocXML.d@c39667f1e814 |
children | a2880c95eda3 |
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(); |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
149 d.decls && DefaultVisitor.visit(d.decls); |
799
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 |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
154 // templated decls are not virtual so we need these: |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
155 |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
156 /// Writes a class declaration. |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
157 void writeClass(ClassDeclaration d) { |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
158 writeClassOrInterface(d); |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
159 } |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
160 |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
161 /// Writes an interface declaration. |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
162 void writeInterface(InterfaceDeclaration d) { |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
163 writeClassOrInterface(d); |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
164 } |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
165 |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
166 /// Writes a struct or union declaration. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
167 void writeStructOrUnion(T)(T d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
168 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
169 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
170 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
171 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
172 write(d.begin.srcText, d.name ? ", " : ""); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
173 if (d.name) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
174 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
175 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
176 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
177 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
178 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
179 MEMBERS(is(T == StructDeclaration) ? "STRUCT" : "UNION", { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
180 scope s = new Scope(); |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
181 d.decls && DefaultVisitor.visit(d.decls); |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
182 }); |
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 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
185 |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
186 // templated decls are not virtual so we need these: |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
187 |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
188 /// Writes a struct declaration. |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
189 void writeStruct(StructDeclaration d) { |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
190 writeStructOrUnion(d); |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
191 } |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
192 |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
193 /// Writes an union declaration. |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
194 void writeUnion(UnionDeclaration d) { |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
195 writeStructOrUnion(d); |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
196 } |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
197 |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
198 /// Writes an alias or typedef declaration. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
199 void writeAliasOrTypedef(T)(T d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
200 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
201 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
|
202 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
|
203 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
204 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
|
205 foreach (name; vd.names) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
206 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
|
207 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
208 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
|
209 {} |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
210 // 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
|
211 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
212 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
213 |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
214 |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
215 /// 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
|
216 void writeAttributes(Declaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
217 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
218 char[][] attributes; |
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 if (d.prot != Protection.None) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
221 attributes ~= "$(PROT " ~ .toString(d.prot) ~ ")"; |
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 auto stc = d.stc; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
224 stc &= ~StorageClass.Auto; // Ignore auto. |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
225 foreach (stcStr; .toStrings(stc)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
226 attributes ~= "$(STC " ~ stcStr ~ ")"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
227 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
228 LinkageType ltype; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
229 if (auto vd = d.Is!(VariablesDeclaration)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
230 ltype = vd.linkageType; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
231 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
|
232 ltype = fd.linkageType; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
233 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
234 if (ltype != LinkageType.None) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
235 attributes ~= "$(LINKAGE extern(" ~ .toString(ltype) ~ "))"; |
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 if (!attributes.length) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
238 return; |
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 write("$(ATTRIBUTES "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
241 foreach (attribute; attributes) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
242 write(attribute); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
243 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
244 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
245 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
246 alias Declaration D; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
247 |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
248 alias DDocEmitter.visit visit; |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
249 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
250 D visit(EnumDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
251 { |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
252 /+ FIXME: broken, infinite recursion :/ |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
253 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
254 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
255 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
256 write("enum, ", d.name ? " " : ""); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
257 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
|
258 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
259 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
260 writeComment(); |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
261 Stdout("help\n"); |
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
262 ///*FIXME*/ MEMBERS("ENUM", { scope s = new Scope(); DDocEmitter.visit(d); }); |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
263 }); |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
264 +/ |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
265 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
266 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
267 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
268 D visit(EnumMemberDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
269 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
270 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
271 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
272 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
|
273 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
274 return d; |
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 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
277 D visit(TemplateDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
278 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
279 this.tparams = d.tparams; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
280 if (d.begin.kind != TOK.Template) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
281 { // This is a templatized class/interface/struct/union/function. |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
282 DefaultVisitor.visit(d.decls); |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
283 this.tparams = null; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
284 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
285 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
286 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
287 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
288 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
289 write("template, "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
290 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
291 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
292 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
293 DESC({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
294 writeComment(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
295 MEMBERS("TEMPLATE", { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
296 scope s = new Scope(); |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
297 DefaultVisitor.visit(d.decls); |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
298 }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
299 }); |
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(ConstructorDeclaration 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("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
|
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(StaticConstructorDeclaration 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 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
|
317 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
318 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
319 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
320 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
321 D visit(DestructorDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
322 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
323 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
324 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
325 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
|
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(StaticDestructorDeclaration 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("static destructor, ~"); SYMBOL("this", d); }, 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(FunctionDeclaration 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 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
|
344 DECL({ |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
345 write("function, "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
346 write("$(TYPE "); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
347 write("$(RETURNS ", escape(type), ")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
348 writeTemplateParams(); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
349 writeParams(d.params); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
350 write(")"); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
351 SYMBOL(d.name.str, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
352 }, d); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
353 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
354 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
355 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
356 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
357 D visit(NewDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
358 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
359 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
360 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
361 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
|
362 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
363 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
364 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
365 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
366 D visit(DeleteDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
367 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
368 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
369 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
370 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
|
371 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
372 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
373 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
374 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
375 D visit(VariablesDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
376 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
377 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
378 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
379 char[] type = "auto"; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
380 if (d.typeNode) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
381 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
|
382 foreach (name; d.names) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
383 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
|
384 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
385 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
386 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
387 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
388 D visit(InvariantDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
389 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
390 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
391 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
392 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
|
393 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
394 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
395 } |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
396 |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
397 D visit(UnittestDeclaration d) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
398 { |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
399 if (!ddoc(d)) |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
400 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
401 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
|
402 DESC({ writeComment(); }); |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
403 return d; |
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
404 } |
801
c39667f1e814
Fixes to non-virtual functions. Commented out broken method for enums.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
800
diff
changeset
|
405 |
799
fd719161e743
New ddoc emitter for XML type output.
Jari-Matti M?kel? <jmjm@iki.fi>
parents:
diff
changeset
|
406 } |