Overview
Comment: | OFXMLComment: Add a property for the text |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f7713f3033f0c2aa2c0a7e545c2d0a06 |
User & Date: | js on 2021-04-08 19:30:19 |
Other Links: | manifest | tags |
Context
2021-04-09
| ||
01:28 | Split XML processing instructions into target/data check-in: d4b3f8ea70 user: js tags: trunk | |
2021-04-08
| ||
19:30 | OFXMLComment: Add a property for the text check-in: f7713f3033 user: js tags: trunk | |
17:27 | src/Makefile: Indentation fix check-in: bc662af57b user: js tags: trunk | |
Changes
Modified src/OFXMLComment.h from [bf4f3dc402] to [48d39c6a70].
︙ | ︙ | |||
20 21 22 23 24 25 26 | /** * @class OFXMLComment OFXMLComment.h ObjFW/OFXMLComment.h * * @brief A class for representing XML comments. */ @interface OFXMLComment: OFXMLNode { | | > > > > > | | | | | | | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /** * @class OFXMLComment OFXMLComment.h ObjFW/OFXMLComment.h * * @brief A class for representing XML comments. */ @interface OFXMLComment: OFXMLNode { OFString *_text; OF_RESERVE_IVARS(OFXMLComment, 4) } /** * @brief The comment text. */ @property (readonly, nonatomic) OFString *text; /** * @brief Creates a new OFXMLComment with the specified text. * * @param text The text for the comment * @return A new OFXMLComment */ + (instancetype)commentWithText: (OFString *)text; /** * @brief Initializes an already allocated OFXMLComment with the specified * text. * * @param text The text for the comment * @return An initialized OFXMLComment */ - (instancetype)initWithText: (OFString *)text; - (instancetype)initWithSerialization: (OFXMLElement *)element; @end OF_ASSUME_NONNULL_END |
Modified src/OFXMLComment.m from [5cb4fa05d6] to [ba703cfd99].
︙ | ︙ | |||
21 22 23 24 25 26 27 | #import "OFXMLNode+Private.h" #import "OFString.h" #import "OFXMLElement.h" #import "OFInvalidArgumentException.h" @implementation OFXMLComment | > > | | | | | | | | | | | < | | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | #import "OFXMLNode+Private.h" #import "OFString.h" #import "OFXMLElement.h" #import "OFInvalidArgumentException.h" @implementation OFXMLComment @synthesize text = _text; + (instancetype)commentWithText: (OFString *)text { return [[[self alloc] initWithText: text] autorelease]; } - (instancetype)initWithText: (OFString *)text { self = [super of_init]; @try { _text = [text copy]; } @catch (id e) { [self release]; @throw e; } return self; } - (instancetype)initWithSerialization: (OFXMLElement *)element { self = [super of_init]; @try { void *pool = objc_autoreleasePoolPush(); if (![element.name isEqual: self.className] || ![element.namespace isEqual: OF_SERIALIZATION_NS]) @throw [OFInvalidArgumentException exception]; _text = [element.stringValue copy]; objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; } return self; } - (void)dealloc { [_text release]; [super dealloc]; } - (bool)isEqual: (id)object { OFXMLComment *comment; if (object == self) return true; if (![object isKindOfClass: [OFXMLComment class]]) return false; comment = object; return ([comment->_text isEqual: _text]); } - (unsigned long)hash { return _text.hash; } - (OFString *)stringValue { return @""; } - (OFString *)XMLString { return [OFString stringWithFormat: @"<!--%@-->", _text]; } - (OFString *)XMLStringWithIndentation: (unsigned int)indentation { return [OFString stringWithFormat: @"<!--%@-->", _text]; } - (OFString *)XMLStringWithIndentation: (unsigned int)indentation level: (unsigned int)level { OFString *ret; if (indentation > 0 && level > 0) { char *whitespaces = of_alloc((level * indentation) + 1, 1); memset(whitespaces, ' ', level * indentation); whitespaces[level * indentation] = 0; @try { ret = [OFString stringWithFormat: @"%s<!--%@-->", whitespaces, _text]; } @finally { free(whitespaces); } } else ret = [OFString stringWithFormat: @"<!--%@-->", _text]; return ret; } - (OFString *)description { return [OFString stringWithFormat: @"<!--%@-->", _text]; } - (OFXMLElement *)XMLElementBySerializing { return [OFXMLElement elementWithName: self.className namespace: OF_SERIALIZATION_NS stringValue: _text]; } @end |
Modified src/OFXMLElementBuilder.m from [032a141300] to [07f6f7fa7b].
︙ | ︙ | |||
150 151 152 153 154 155 156 | @selector(elementBuilder:didBuildParentlessNode:)]) [_delegate elementBuilder: self didBuildParentlessNode: node]; } - (void)parser: (OFXMLParser *)parser foundComment: (OFString *)comment { | | | 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | @selector(elementBuilder:didBuildParentlessNode:)]) [_delegate elementBuilder: self didBuildParentlessNode: node]; } - (void)parser: (OFXMLParser *)parser foundComment: (OFString *)comment { OFXMLComment *node = [OFXMLComment commentWithText: comment]; OFXMLElement *parent = _stack.lastObject; if (parent != nil) [parent addChild: node]; else if ([_delegate respondsToSelector: @selector(elementBuilder:didBuildParentlessNode:)]) [_delegate elementBuilder: self didBuildParentlessNode: node]; |
︙ | ︙ |
Modified tests/OFXMLNodeTests.m from [bd9f707bbe] to [c231b8bd5e].
︙ | ︙ | |||
61 62 63 64 65 66 67 | (nodes[3] = [OFXMLCharacters charactersWithString: @"<foo>"]) && [[nodes[3] XMLString] isEqual: @"<foo>"]) TEST(@"+[CDATAWithString:]", (nodes[3] = [OFXMLCDATA CDATAWithString: @"<foo>"]) && [[nodes[3] XMLString] isEqual: @"<![CDATA[<foo>]]>"]); | | | | 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | (nodes[3] = [OFXMLCharacters charactersWithString: @"<foo>"]) && [[nodes[3] XMLString] isEqual: @"<foo>"]) TEST(@"+[CDATAWithString:]", (nodes[3] = [OFXMLCDATA CDATAWithString: @"<foo>"]) && [[nodes[3] XMLString] isEqual: @"<![CDATA[<foo>]]>"]); TEST(@"+[commentWithText:]", (nodes[3] = [OFXMLComment commentWithText: @" comment "]) && [[nodes[3] XMLString] isEqual: @"<!-- comment -->"]) module = @"OFXMLElement"; TEST(@"-[addAttributeWithName:stringValue:]", R([nodes[0] addAttributeWithName: @"foo" stringValue: @"b&ar"]) && [[nodes[0] XMLString] isEqual: @"<foo foo='b&ar'/>"] && |
︙ | ︙ |