@@ -14,12 +14,10 @@ * file. */ #include "config.h" -#define OF_XML_ELEMENT_BUILDER_M - #import "OFXMLElementBuilder.h" #import "OFXMLElement.h" #import "OFXMLAttribute.h" #import "OFXMLCharacters.h" #import "OFXMLCDATA.h" @@ -76,18 +74,19 @@ processingInstructionsWithString: pi]; OFXMLElement *parent = [stack lastObject]; if (parent != nil) [parent addChild: node]; - else + else if ([delegate respondsToSelector: + @selector(elementBuilder:didBuildParentlessNode:)]) [delegate elementBuilder: self didBuildParentlessNode: node]; } - (void)parser: (OFXMLParser*)parser didStartElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns attributes: (OFArray*)attributes { OFXMLElement *element; OFXMLAttribute **objects; @@ -116,19 +115,25 @@ [stack addObject: element]; } - (void)parser: (OFXMLParser*)parser didEndElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns { switch ([stack count]) { case 0: - [delegate elementBuilder: self - didNotExpectCloseTag: name - withPrefix: prefix - namespace: ns]; + if ([delegate respondsToSelector: @selector(elementBuilder: + didNotExpectCloseTag:prefix:namespace:)]) + [delegate elementBuilder: self + didNotExpectCloseTag: name + prefix: prefix + namespace: ns]; + else + @throw [OFMalformedXMLException + exceptionWithClass: [self class]]; + return; case 1: [delegate elementBuilder: self didBuildElement: [stack firstObject]]; break; @@ -146,11 +151,12 @@ node = [OFXMLCharacters charactersWithString: characters]; parent = [stack lastObject]; if (parent != nil) [parent addChild: node]; - else + else if ([delegate respondsToSelector: + @selector(elementBuilder:didBuildParentlessNode:)]) [delegate elementBuilder: self didBuildParentlessNode: node]; } - (void)parser: (OFXMLParser*)parser @@ -159,11 +165,12 @@ OFXMLCDATA *node = [OFXMLCDATA CDATAWithString: CDATA]; OFXMLElement *parent = [stack lastObject]; if (parent != nil) [parent addChild: node]; - else + else if ([delegate respondsToSelector: + @selector(elementBuilder:didBuildParentlessNode:)]) [delegate elementBuilder: self didBuildParentlessNode: node]; } - (void)parser: (OFXMLParser*)parser @@ -172,43 +179,22 @@ OFXMLComment *node = [OFXMLComment commentWithString: comment]; OFXMLElement *parent = [stack lastObject]; if (parent != nil) [parent addChild: node]; - else + else if ([delegate respondsToSelector: + @selector(elementBuilder:didBuildParentlessNode:)]) [delegate elementBuilder: self didBuildParentlessNode: node]; } - (OFString*)parser: (OFXMLParser*)parser foundUnknownEntityNamed: (OFString*)entity { - return [delegate elementBuilder: self - foundUnknownEntityNamed: entity]; -} -@end - -@implementation OFObject (OFXMLElementBuilderDelegate) -- (void)elementBuilder: (OFXMLElementBuilder*)builder - didBuildElement: (OFXMLElement*)element -{ -} - -- (void)elementBuilder: (OFXMLElementBuilder*)builder - didBuildParentlessNode: (OFXMLNode*)node -{ -} - -- (void)elementBuilder: (OFXMLElementBuilder*)builder - didNotExpectCloseTag: (OFString*)name - withPrefix: (OFString*)prefix - namespace: (OFString*)ns -{ - @throw [OFMalformedXMLException exceptionWithClass: [builder class]]; -} - -- (OFString*)elementBuilder: (OFXMLElementBuilder*)builder - foundUnknownEntityNamed: (OFString*)entity -{ + if ([delegate respondsToSelector: + @selector(elementBuilder:foundUnknownEntityNamed:)]) + return [delegate elementBuilder: self + foundUnknownEntityNamed: entity]; + return nil; } @end