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