ObjFW  Diff

Differences From Artifact [23f4713294]:

To Artifact [415f6ac93d]:


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
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







-
+


-
-
-
-
+
+
+
+

-
-
+
+

-
-
-
+
+
+

-
-
-
+
+
+


-
+

-
-
+
+

-
+


-
-
+
+







	delegate = delegate_;
}

-    (void)parser: (OFXMLParser*)parser
  didStartElement: (OFString*)name
       withPrefix: (OFString*)prefix
	namespace: (OFString*)ns
       attributes: (OFArray*)attrs
       attributes: (OFArray*)attributes
{
	OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
	OFXMLElement *elem;
	OFXMLAttribute **attrs_c;
	size_t i, attrs_cnt;
	IMP add_attr;
	OFXMLElement *element;
	OFXMLAttribute **cArray;
	size_t i, count;
	IMP addAttribute;

	elem = [OFXMLElement elementWithName: name
				   namespace: ns];
	element = [OFXMLElement elementWithName: name
				      namespace: ns];

	attrs_c = [attrs cArray];
	attrs_cnt = [attrs count];
	add_attr = [elem methodForSelector: @selector(addAttribute:)];
	cArray = [attributes cArray];
	count = [attributes count];
	addAttribute = [element methodForSelector: @selector(addAttribute:)];

	for (i = 0; i < attrs_cnt; i++) {
		if ([attrs_c[i] namespace] == nil &&
		    [[attrs_c[i] name] isEqual: @"xmlns"])
	for (i = 0; i < count; i++) {
		if ([cArray[i] namespace] == nil &&
		    [[cArray[i] name] isEqual: @"xmlns"])
			continue;

		if ([[attrs_c[i] namespace]
		if ([[cArray[i] namespace]
		    isEqual: @"http://www.w3.org/2000/xmlns/"])
			[elem setPrefix: [attrs_c[i] name]
			   forNamespace: [attrs_c[i] stringValue]];
			[element setPrefix: [cArray[i] name]
			      forNamespace: [cArray[i] stringValue]];

		add_attr(elem, @selector(addAttribute:), attrs_c[i]);
		addAttribute(element, @selector(addAttribute:), cArray[i]);
	}

	[[stack lastObject] addChild: elem];
	[stack addObject: elem];
	[[stack lastObject] addChild: element];
	[stack addObject: element];

	[pool release];
}

-  (void)parser: (OFXMLParser*)parser
  didEndElement: (OFString*)name
     withPrefix: (OFString*)prefix
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

147
148
149
150

151
152

153
154
155
156
157
158
159
160
161

162
163
164
165

166
167

168
169
170
171
172
173
174
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

147
148
149
150

151
152

153
154
155
156
157
158
159
160
161

162
163
164
165

166
167

168
169
170
171
172
173
174
175







-
+


+
-
+



-
+

-
+





-
+


-
+



-
+

-
+








-
+



-
+

-
+







		[delegate elementBuilder: self
			 didBuildElement: [stack firstObject]];

	[stack removeNObjects: 1];
}

-    (void)parser: (OFXMLParser*)parser
  foundCharacters: (OFString*)str
  foundCharacters: (OFString*)characters
{
	OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
	OFXMLElement *element =
	OFXMLElement *elem = [OFXMLElement elementWithCharacters: str];
	    [OFXMLElement elementWithCharacters: characters];

	if ([stack count] == 0)
		[delegate elementBuilder: self
			 didBuildElement: elem];
			 didBuildElement: element];
	else
		[[stack lastObject] addChild: elem];
		[[stack lastObject] addChild: element];

	[pool release];
}

- (void)parser: (OFXMLParser*)parser
    foundCDATA: (OFString*)cdata
    foundCDATA: (OFString*)CDATA
{
	OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
	OFXMLElement *elem = [OFXMLElement elementWithCDATA: cdata];
	OFXMLElement *element = [OFXMLElement elementWithCDATA: CDATA];

	if ([stack count] == 0)
		[delegate elementBuilder: self
			 didBuildElement: elem];
			 didBuildElement: element];
	else
		[[stack lastObject] addChild: elem];
		[[stack lastObject] addChild: element];

	[pool release];
}

- (void)parser: (OFXMLParser*)parser
  foundComment: (OFString*)comment
{
	OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
	OFXMLElement *elem = [OFXMLElement elementWithComment: comment];
	OFXMLElement *element = [OFXMLElement elementWithComment: comment];

	if ([stack count] == 0)
		[delegate elementBuilder: self
			 didBuildElement: elem];
			 didBuildElement: element];
	else
		[[stack lastObject] addChild: elem];
		[[stack lastObject] addChild: element];

	[pool release];
}
@end

@implementation OFObject (OFXMLElementBuilderDelegate)
- (void)elementBuilder: (OFXMLElementBuilder*)builder