1 module plist.types..string;
2 import plist.types.element;
3 
4 class PlistElementString : PlistElement {
5     void instantiate(DOMEntity!string entity) {
6         if(entity.name == "key") {
7             key = true;
8         }
9 
10         _entity = entity;
11         if (entity.type == EntityType.elementEmpty) return; 
12         if (entity.children.length == 0) return;
13 
14         if(entity.children.length == 1) {
15             if (entity.children[0].type != EntityType.text)
16                 throw new PlistParsingException("Expected a text element after string\n");
17             _text = entity.children[0].text;
18         } else {
19             throw new PlistParsingException("Expected only one child under the string\n");
20         }
21     }
22 
23     override string toString() {
24         import std.format : format;
25         return format!"<PlistElementString text: %s>"(_text);
26     }
27 
28     @property string value() {
29         return _text;
30     }
31 
32     @property string value(string newText) {
33         _text = newText;
34         return _text;
35     }
36 
37     string type() {
38         return PlistElementType.PLIST_ELEMENT_STRING;
39     }
40 
41     void write(ref XMLWriter!(Appender!string) writer) {
42         if (key) {
43             writer.openStartTag("key");
44         } else {
45             writer.openStartTag("string");
46         }
47 
48         writer.closeStartTag();
49         writer.writeText(_text, Newline.no);
50 
51         if (key) {
52             writer.writeEndTag("key", Newline.no);
53         } else {
54             writer.writeEndTag("string", Newline.no);
55         }
56     }
57 
58     private {
59         bool key;
60         string _text;
61         DOMEntity!string _entity;
62     }
63 }
64 
65