1 module hunt.xml.Document;
2 
3 import hunt.xml.Attribute;
4 import hunt.xml.Common;
5 import hunt.xml.Element;
6 import hunt.xml.Node;
7 import hunt.xml.Internal;
8 import hunt.xml.DocumentParser;
9 
10 import hunt.xml.Writer;
11 
12 import std.array : Appender;
13 
14 import hunt.logging.ConsoleLogger;
15 
16 /** 
17  * 
18  */
19 class Document : Element {
20     this() {
21         super(NodeType.Document);
22     }
23 
24     this(string name) {
25         super(name, NodeType.Document);
26     }    
27 
28     static Document load(string fileName) {
29         import std.file;
30         return parse(readText(fileName));
31     }
32 
33     static Document parse(ParsingFlags Flags = ParsingFlags.Full)(string text) {
34         return DocumentParser.parse!(Flags)(text);
35     }
36 
37     void save(string fileName, bool isIndented = true) {
38         import std.stdio;
39         auto file = File(fileName, "w");
40         scope(exit) {
41             file.close();
42         }
43         auto textWriter = file.lockingTextWriter;
44         if(isIndented) {
45             auto writer = buildWriter(textWriter, PrettyPrinters.Indenter());
46             writer.write(this);
47         } else {
48             auto writer = buildWriter(textWriter, PrettyPrinters.Minimalizer());
49             writer.write(this);
50         }
51     }
52 
53     string toPrettyString() {
54         auto appender = Appender!string();
55         auto writer = buildWriter(appender, PrettyPrinters.Indenter());
56         writer.write(this);
57         return appender.data();
58     }
59 
60     override string toString() {
61         auto appender = Appender!string();
62         auto writer = buildWriter(appender, PrettyPrinters.Minimalizer());
63         writer.write(this);
64         return appender.data();
65     }
66 }