1 /// Authors: Aziz Köksal, Jari-Matti Mäkelä
2 /// License: GPL3
3 /// $(Maturity average)
4 module dil.doc.DDocXML;
5 
6 import dil.doc.DDocEmitter,
7        dil.doc.Macro;
8 import dil.ast.Declarations;
9 import dil.semantic.Module;
10 import dil.Highlighter,
11        dil.Diagnostics;
12 import common;
13 
14 /// Traverses the syntax tree and writes DDoc macros to a string buffer.
15 class DDocXMLEmitter : DDocEmitter
16 {
17   /// Constructs a DDocXMLEmitter object.
18   this(Module modul, MacroTable mtable,
19        bool includeUndocumented, bool includePrivate,
20        Diagnostics reportDiag, Highlighter tokenHL)
21   {
22     super(modul, mtable, includeUndocumented, includePrivate,
23       reportDiag, tokenHL);
24   }
25 
26 override:
27   //alias visit = super.visit;
28 
29   void visit(FunctionDecl d)
30   {
31     if (!ddoc(d))
32       return;
33     DECL({
34       write("function, ", "\1TYPE \1RETURNS");
35       if (d.returnType) write(d.returnType);
36       else write("auto");
37       write("\2");
38       writeTemplateParams();
39       writeParams(d.params);
40       write("\2");
41       SYMBOL(d.name.text, K.Function, d);
42     }, d);
43     DESC();
44   }
45 
46   void visit(VariablesDecl d)
47   {
48     if (!ddoc(d))
49       return;
50     foreach (name; d.names)
51       DECL({
52         write("variable, ", "\1TYPE ");
53         if (d.type) write(d.type);
54         else write("auto");
55         write("\2 ");
56         SYMBOL(name.text, K.Variable, d);
57       }, d);
58     DESC();
59   }
60 }