Index: src/OFApplication.h ================================================================== --- src/OFApplication.h +++ src/OFApplication.h @@ -30,15 +30,11 @@ } /*! * @brief A protocol for delegates of OFApplication. */ -#ifndef OF_APPLICATION_M @protocol OFApplicationDelegate -#else -@protocol OFApplicationDelegate -#endif /*! * @brief A method which is called when the application was initialized and is * running now. */ - (void)applicationDidFinishLaunching; Index: src/OFApplication.m ================================================================== --- src/OFApplication.m +++ src/OFApplication.m @@ -14,12 +14,10 @@ * file. */ #include "config.h" -#define OF_APPLICATION_M - #include #include #include #include @@ -46,11 +44,12 @@ static void atexit_handler(void) { id delegate = [app delegate]; - [delegate applicationWillTerminate]; + if ([delegate respondsToSelector: @selector(applicationWillTerminate)]) + [delegate applicationWillTerminate]; [(id)delegate release]; } #define SIGNAL_HANDLER(sig) \ @@ -274,18 +273,18 @@ - (void)setDelegate: (id )delegate_ { delegate = delegate_; -#define REGISTER_SIGNAL(sig) \ - sig##Handler = (void(*)(id, SEL))[(id)delegate methodForSelector: \ - @selector(applicationDidReceive##sig)]; \ - if (sig##Handler != (void(*)(id, SEL))[OFObject \ - instanceMethodForSelector: \ - @selector(applicationDidReceive##sig)]) \ - signal(sig, handle##sig); \ - else \ +#define REGISTER_SIGNAL(sig) \ + if ([delegate respondsToSelector: \ + @selector(applicationDidReceive##sig)]) { \ + sig##Handler = (void(*)(id, SEL))[(id)delegate \ + methodForSelector: \ + @selector(applicationDidReceive##sig)]; \ + signal(sig, handle##sig); \ + } else \ signal(sig, SIG_DFL); REGISTER_SIGNAL(SIGINT) #ifndef _WIN32 REGISTER_SIGNAL(SIGHUP) REGISTER_SIGNAL(SIGUSR1) @@ -326,35 +325,7 @@ { [arguments release]; [environment release]; [super dealloc]; -} -@end - -@implementation OFObject (OFApplicationDelegate) -- (void)applicationDidFinishLaunching -{ - @throw [OFNotImplementedException exceptionWithClass: [self class] - selector: _cmd]; -} - -- (void)applicationWillTerminate -{ -} - -- (void)applicationDidReceiveSIGINT -{ -} - -- (void)applicationDidReceiveSIGHUP -{ -} - -- (void)applicationDidReceiveSIGUSR1 -{ -} - -- (void)applicationDidReceiveSIGUSR2 -{ } @end Index: src/OFHTTPClient.h ================================================================== --- src/OFHTTPClient.h +++ src/OFHTTPClient.h @@ -25,15 +25,11 @@ @class OFDataArray; /*! * @brief A delegate for OFHTTPClient. */ -#ifndef OF_HTTP_CLIENT_M @protocol OFHTTPClientDelegate -#else -@protocol OFHTTPClientDelegate -#endif #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /*! * @brief A callback which is called when an OFHTTPClient creates a socket. Index: src/OFHTTPClient.m ================================================================== --- src/OFHTTPClient.m +++ src/OFHTTPClient.m @@ -14,12 +14,10 @@ * file. */ #include "config.h" -#define OF_HTTP_CLIENT_M - #include #include #import "OFHTTPClient.h" #import "OFHTTPRequest.h" @@ -150,13 +148,15 @@ URL: URL]; sock = [[[of_tls_socket_class alloc] init] autorelease]; } - [delegate client: self - didCreateSocket: sock - request: request]; + if ([delegate respondsToSelector: + @selector(client:didCreateSocket:request:)]) + [delegate client: self + didCreateSocket: sock + request: request]; [sock connectToHost: [URL host] port: [URL port]]; /* @@ -296,20 +296,22 @@ [key isEqual: @"Location"]) && (insecureRedirectsAllowed || [scheme isEqual: @"http"] || ![value hasPrefix: @"http://"])) { OFURL *newURL; OFHTTPRequest *newRequest; - BOOL follow; + BOOL follow = YES; newURL = [OFURL URLWithString: value relativeToURL: URL]; - follow = [delegate client: self - shouldFollowRedirect: newURL - request: request]; + if ([delegate respondsToSelector: + @selector(client:shouldFollowRedirect:request:)]) + follow = [delegate client: self + shouldFollowRedirect: newURL + request: request]; - if (!follow && delegate != nil) { + if (!follow) { [serverHeaders setObject: value forKey: key]; continue; } @@ -336,14 +338,16 @@ [serverHeaders setObject: value forKey: key]; } - [delegate client: self - didReceiveHeaders: serverHeaders - statusCode: status - request: request]; + if ([delegate respondsToSelector: + @selector(client:didReceiveHeaders:statusCode:request:)]) + [delegate client: self + didReceiveHeaders: serverHeaders + statusCode: status + request: request]; data = (storesData ? [OFDataArray dataArray] : nil); chunked = [[serverHeaders objectForKey: @"Transfer-Encoding"] isEqual: @"chunked"]; @@ -396,14 +400,17 @@ ? toRead : of_pagesize); length = [sock readIntoBuffer: buffer length: length]; - [delegate client: self - didReceiveData: buffer - length: length - request: request]; + if ([delegate respondsToSelector: + @selector(client:didReceiveData: + length:request:)]) + [delegate client: self + didReceiveData: buffer + length: length + request: request]; objc_autoreleasePoolPop(pool2); pool2 = objc_autoreleasePoolPush(); bytesReceived += length; @@ -435,14 +442,17 @@ length = [sock readIntoBuffer: buffer length: of_pagesize]; pool2 = objc_autoreleasePoolPush(); - [delegate client: self - didReceiveData: buffer - length: length - request: request]; + if ([delegate respondsToSelector: + @selector(client:didReceiveData:length: + request:)]) + [delegate client: self + didReceiveData: buffer + length: length + request: request]; objc_autoreleasePoolPop(pool2); bytesReceived += length; [data addItems: buffer @@ -484,35 +494,6 @@ request: request result: result]; return result; } -@end - -@implementation OFObject (OFHTTPClientDelegate) -- (void)client: (OFHTTPClient*)client - didCreateSocket: (OFTCPSocket*)socket - request: (OFHTTPRequest*)request -{ -} - -- (void)client: (OFHTTPClient*)client - didReceiveHeaders: (OFDictionary*)headers - statusCode: (int)statusCode - request: (OFHTTPRequest*)request -{ -} - -- (void)client: (OFHTTPClient*)client - didReceiveData: (const char*)data - length: (size_t)length - request: (OFHTTPRequest*)request -{ -} - -- (BOOL)client: (OFHTTPClient*)client - shouldFollowRedirect: (OFURL*)URL - request: (OFHTTPRequest*)request -{ - return YES; -} @end Index: src/OFHTTPServer.h ================================================================== --- src/OFHTTPServer.h +++ src/OFHTTPServer.h @@ -23,14 +23,11 @@ @class OFException; /*! * @brief A delegate for OFHTTPServer. */ -@protocol OFHTTPServerDelegate -#ifndef OF_HTTP_SERVER_M - -#endif +@protocol OFHTTPServerDelegate /*! * @brief This method is called when the HTTP server received a request from a * client. * * @param server The HTTP server which received the request @@ -137,8 +134,5 @@ - (BOOL)OF_socket: (OFTCPSocket*)socket didAcceptSocket: (OFTCPSocket*)clientSocket exception: (OFException*)exception; @end - -@interface OFObject (OFHTTPServerDelegate) -@end Index: src/OFHTTPServer.m ================================================================== --- src/OFHTTPServer.m +++ src/OFHTTPServer.m @@ -14,12 +14,10 @@ * file. */ #include "config.h" -#define OF_HTTP_SERVER_M - #include #include #import "OFHTTPServer.h" #import "OFDataArray.h" @@ -645,15 +643,6 @@ selector: @selector(socket:didReadLine: exception:)]; return YES; } -@end - -@implementation OFObject (OFHTTPServerDelegate) -- (OFHTTPRequestResult*)server: (OFHTTPServer*)server - didReceiveRequest: (OFHTTPRequest*)request -{ - @throw [OFNotImplementedException exceptionWithClass: [self class] - selector: _cmd]; -} @end Index: src/OFStreamObserver.h ================================================================== --- src/OFStreamObserver.h +++ src/OFStreamObserver.h @@ -32,15 +32,11 @@ /*! * @brief A protocol that needs to be implemented by delegates for * OFStreamObserver. */ -#ifndef OF_STREAM_OBSERVER_M @protocol OFStreamObserverDelegate -#else -@protocol OFStreamObserverDelegate -#endif #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /*! * @brief This callback is called when a stream did get ready for reading. Index: src/OFStreamObserver.m ================================================================== --- src/OFStreamObserver.m +++ src/OFStreamObserver.m @@ -14,11 +14,10 @@ * file. */ #include "config.h" -#define OF_STREAM_OBSERVER_M #define __NO_EXT_QNX #include #include @@ -387,12 +386,17 @@ for (i = 0; i < count; i++) { if ([objects[i] pendingBytes] > 0 && ![objects[i] OF_isWaitingForDelimiter]) { void *pool = objc_autoreleasePoolPush(); - [delegate streamIsReadyForReading: objects[i]]; + + if ([delegate respondsToSelector: + @selector(streamIsReadyForReading:)]) + [delegate streamIsReadyForReading: objects[i]]; + foundInCache = YES; + objc_autoreleasePoolPop(pool); } } /* @@ -401,21 +405,7 @@ */ if (foundInCache) return YES; return NO; -} -@end - -@implementation OFObject (OFStreamObserverDelegate) -- (void)streamIsReadyForReading: (OFStream*)stream -{ -} - -- (void)streamIsReadyForWriting: (OFStream*)stream -{ -} - -- (void)streamDidReceiveException: (OFStream*)stream -{ } @end Index: src/OFStreamObserver_kqueue.m ================================================================== --- src/OFStreamObserver_kqueue.m +++ src/OFStreamObserver_kqueue.m @@ -157,24 +157,31 @@ realEvents++; pool = objc_autoreleasePoolPush(); if (eventList[i].flags & EV_ERROR) { - [delegate streamDidReceiveException: - FDToStream[eventList[i].ident]]; + if ([delegate respondsToSelector: + @selector(streamDidReceiveException:)]) + [delegate streamDidReceiveException: + FDToStream[eventList[i].ident]]; + objc_autoreleasePoolPop(pool); continue; } switch (eventList[i].filter) { case EVFILT_READ: - [delegate streamIsReadyForReading: - FDToStream[eventList[i].ident]]; + if ([delegate respondsToSelector: + @selector(streamIsReadyForReading:)]) + [delegate streamIsReadyForReading: + FDToStream[eventList[i].ident]]; break; case EVFILT_WRITE: - [delegate streamIsReadyForWriting: - FDToStream[eventList[i].ident]]; + if ([delegate respondsToSelector: + @selector(streamIsReadyForWriting:)]) + [delegate streamIsReadyForWriting: + FDToStream[eventList[i].ident]]; break; default: assert(0); } Index: src/OFStreamObserver_poll.m ================================================================== --- src/OFStreamObserver_poll.m +++ src/OFStreamObserver_poll.m @@ -159,25 +159,34 @@ objc_autoreleasePoolPop(pool); continue; } + if ([delegate respondsToSelector: + @selector(streamIsReadyForReading:)]) + [delegate streamIsReadyForReading: + FDToStream[FDs_[i].fd]]; + realEvents++; - [delegate streamIsReadyForReading: - FDToStream[FDs_[i].fd]]; } if (FDs_[i].revents & POLLOUT) { + if ([delegate respondsToSelector: + @selector(streamIsReadyForWriting:)]) + [delegate streamIsReadyForWriting: + FDToStream[FDs_[i].fd]]; + realEvents++; - [delegate streamIsReadyForWriting: - FDToStream[FDs_[i].fd]]; } if (FDs_[i].revents & POLLERR) { + if ([delegate respondsToSelector: + @selector(streamDidReceiveException:)]) + [delegate streamDidReceiveException: + FDToStream[FDs_[i].fd]]; + realEvents++; - [delegate streamDidReceiveException: - FDToStream[FDs_[i].fd]]; } FDs_[i].revents = 0; objc_autoreleasePoolPop(pool); Index: src/OFStreamObserver_select.m ================================================================== --- src/OFStreamObserver_select.m +++ src/OFStreamObserver_select.m @@ -127,23 +127,30 @@ int fd = [objects[i] fileDescriptorForReading]; pool = objc_autoreleasePoolPush(); if (FD_ISSET(fd, &readFDs_)) { + if ([delegate respondsToSelector: + @selector(streamIsReadyForReading:)]) + [delegate streamIsReadyForReading: objects[i]]; + realEvents++; - [delegate streamIsReadyForReading: objects[i]]; } if (FD_ISSET(fd, &exceptFDs_)) { - realEvents++; - [delegate streamDidReceiveException: objects[i]]; + if ([delegate respondsToSelector: + @selector(streamDidReceiveException:)]) + [delegate streamDidReceiveException: + objects[i]]; /* * Prevent calling it twice in case the FD is in both * sets. */ FD_CLR(fd, &exceptFDs_); + + realEvents++; } objc_autoreleasePoolPop(pool); } @@ -154,17 +161,24 @@ int fd = [objects[i] fileDescriptorForWriting]; pool = objc_autoreleasePoolPush(); if (FD_ISSET(fd, &writeFDs_)) { + if ([delegate respondsToSelector: + @selector(streamIsReadyForWriting:)]) + [delegate streamIsReadyForWriting: objects[i]]; + realEvents++; - [delegate streamIsReadyForWriting: objects[i]]; } if (FD_ISSET(fd, &exceptFDs_)) { + if ([delegate respondsToSelector: + @selector(streamDidReceiveException:)]) + [delegate streamDidReceiveException: + objects[i]]; + realEvents++; - [delegate streamDidReceiveException: objects[i]]; } objc_autoreleasePoolPop(pool); } Index: src/OFXMLElementBuilder.h ================================================================== --- src/OFXMLElementBuilder.h +++ src/OFXMLElementBuilder.h @@ -23,15 +23,11 @@ /*! * @brief A protocol that needs to be implemented by delegates for * OFXMLElementBuilder. */ -#ifndef OF_XML_ELEMENT_BUILDER_M @protocol OFXMLElementBuilderDelegate -#else -@protocol OFXMLElementBuilderDelegate -#endif /*! * @brief This callback is called when the OFXMLElementBuilder built an element. * * If the OFXMLElementBuilder was used as a delegate for the OFXMLParser since * parsing started, this will return the complete document as an OFXMLElement @@ -78,11 +74,11 @@ * @param prefix The prefix of the close tag * @param ns The namespace of the close tag */ - (void)elementBuilder: (OFXMLElementBuilder*)builder didNotExpectCloseTag: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns; /*! * @brief This callback is called when the XML parser for the element builder * found an unknown entity. Index: src/OFXMLElementBuilder.m ================================================================== --- src/OFXMLElementBuilder.m +++ src/OFXMLElementBuilder.m @@ -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 Index: src/OFXMLParser.h ================================================================== --- src/OFXMLParser.h +++ src/OFXMLParser.h @@ -25,15 +25,11 @@ @class OFStream; /*! * @brief A protocol that needs to be implemented by delegates for OFXMLParser. */ -#ifndef OF_XML_PARSER_M @protocol OFXMLParserDelegate -#else -@protocol OFXMLParserDelegate -#endif #ifdef OF_HAVE_OPTIONAL_PROTOCOLS @optional #endif /*! * @brief This callback is called when the XML parser found processing @@ -56,11 +52,11 @@ * @param attributes The attributes included in the tag which just started or * nil */ - (void)parser: (OFXMLParser*)parser didStartElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns attributes: (OFArray*)attributes; /*! * @brief This callback is called when the XML parser found the end of a tag. @@ -70,11 +66,11 @@ * @param prefix The prefix of the tag which just ended or nil * @param ns The namespace of the tag which just ended or nil */ - (void)parser: (OFXMLParser*)parser didEndElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns; /*! * @brief This callback is called when the XML parser found characters. * Index: src/OFXMLParser.m ================================================================== --- src/OFXMLParser.m +++ src/OFXMLParser.m @@ -14,12 +14,10 @@ * file. */ #include "config.h" -#define OF_XML_PARSER_M - #include #include #import "OFXMLParser.h" @@ -335,12 +333,14 @@ if ([cache count] > 0) { void *pool = objc_autoreleasePoolPush(); OFString *characters = transform_string(cache, 0, YES, self); - [delegate parser: self - foundCharacters: characters]; + if ([delegate respondsToSelector: + @selector(parser:foundCharacters:)]) + [delegate parser: self + foundCharacters: characters]; objc_autoreleasePoolPop(pool); } [cache removeAllItems]; @@ -503,12 +503,14 @@ if (![self OF_parseXMLProcessingInstructions: pi]) @throw [OFMalformedXMLException exceptionWithClass: [self class] parser: self]; - [delegate parser: self - foundProcessingInstructions: pi]; + if ([delegate respondsToSelector: + @selector(parser:foundProcessingInstructions:)]) + [delegate parser: self + foundProcessingInstructions: pi]; objc_autoreleasePoolPop(pool); [cache removeAllItems]; @@ -562,21 +564,25 @@ if (prefix != nil && ns == nil) @throw [OFUnboundNamespaceException exceptionWithClass: [self class] prefix: prefix]; - [delegate parser: self - didStartElement: name - withPrefix: prefix - namespace: ns - attributes: nil]; + if ([delegate respondsToSelector: @selector(parser: + didStartElement:prefix:namespace:attributes:)]) + [delegate parser: self + didStartElement: name + prefix: prefix + namespace: ns + attributes: nil]; if (buffer[*i] == '/') { - [delegate parser: self - didEndElement: name - withPrefix: prefix - namespace: ns]; + if ([delegate respondsToSelector: + @selector(parser:didEndElement:prefix:namespace:)]) + [delegate parser: self + didEndElement: name + prefix: prefix + namespace: ns]; if ([previous count] == 0) finishedParsing = YES; } else [previous addObject: cacheString]; @@ -649,14 +655,16 @@ if (prefix != nil && ns == nil) @throw [OFUnboundNamespaceException exceptionWithClass: [self class] prefix: prefix]; - [delegate parser: self - didEndElement: name - withPrefix: prefix - namespace: ns]; + if ([delegate respondsToSelector: + @selector(parser:didEndElement:prefix:namespace:)]) + [delegate parser: self + didEndElement: name + prefix: prefix + namespace: ns]; objc_autoreleasePoolPop(pool); [namespaces removeLastObject]; [name release]; @@ -707,21 +715,25 @@ resolve_attribute_namespace(attributesObjects[j], namespaces, self); pool = objc_autoreleasePoolPush(); - [delegate parser: self - didStartElement: name - withPrefix: prefix - namespace: ns - attributes: attributes]; + if ([delegate respondsToSelector: + @selector(parser:didStartElement:prefix:namespace:attributes:)]) + [delegate parser: self + didStartElement: name + prefix: prefix + namespace: ns + attributes: attributes]; if (buffer[*i] == '/') { - [delegate parser: self - didEndElement: name - withPrefix: prefix - namespace: ns]; + if ([delegate respondsToSelector: + @selector(parser:didEndElement:prefix:namespace:)]) + [delegate parser: self + didEndElement: name + prefix: prefix + namespace: ns]; if ([previous count] == 0) finishedParsing = YES; [namespaces removeLastObject]; @@ -950,12 +962,13 @@ pool = objc_autoreleasePoolPush(); cache_append(cache, buffer + *last, encoding, *i - *last); CDATA = transform_string(cache, 2, NO, nil); - [delegate parser: self - foundCDATA: CDATA]; + if ([delegate respondsToSelector: @selector(parser:foundCDATA:)]) + [delegate parser: self + foundCDATA: CDATA]; objc_autoreleasePoolPop(pool); [cache removeAllItems]; @@ -1004,12 +1017,13 @@ pool = objc_autoreleasePoolPush(); cache_append(cache, buffer + *last, encoding, *i - *last); comment = transform_string(cache, 2, NO, nil); - [delegate parser: self - foundComment: comment]; + if ([delegate respondsToSelector: @selector(parser:foundComment:)]) + [delegate parser: self + foundComment: comment]; objc_autoreleasePoolPop(pool); [cache removeAllItems]; @@ -1052,52 +1066,13 @@ } - (OFString*)string: (OFString*)string containsUnknownEntityNamed: (OFString*)entity { - return [delegate parser: self - foundUnknownEntityNamed: entity]; -} -@end - -@implementation OFObject (OFXMLParserDelegate) -- (void)parser: (OFXMLParser*)parser - foundProcessingInstructions: (OFString*)pi -{ -} - -- (void)parser: (OFXMLParser*)parser - didStartElement: (OFString*)name - withPrefix: (OFString*)prefix - namespace: (OFString*)ns - attributes: (OFArray*)attributes -{ -} - -- (void)parser: (OFXMLParser*)parser - didEndElement: (OFString*)name - withPrefix: (OFString*)prefix - namespace: (OFString*)ns -{ -} - -- (void)parser: (OFXMLParser*)parser - foundCharacters: (OFString*)characters -{ -} - -- (void)parser: (OFXMLParser*)parser - foundCDATA: (OFString*)CDATA -{ -} - -- (void)parser: (OFXMLParser*)parser - foundComment: (OFString*)comment -{ -} - -- (OFString*)parser: (OFXMLParser*)parser - foundUnknownEntityNamed: (OFString*)entity -{ + if ([delegate respondsToSelector: + @selector(parser:foundUnknownEntityNamed:)]) + return [delegate parser: self + foundUnknownEntityNamed: entity]; + return nil; } @end Index: tests/OFXMLParserTests.m ================================================================== --- tests/OFXMLParserTests.m +++ tests/OFXMLParserTests.m @@ -251,11 +251,11 @@ string: pi]; } - (void)parser: (OFXMLParser*)parser didStartElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns attributes: (OFArray*)attrs { [self parserCallbackWithEventType: TAG_START name: name @@ -265,11 +265,11 @@ string: nil]; } - (void)parser: (OFXMLParser*)parser didEndElement: (OFString*)name - withPrefix: (OFString*)prefix + prefix: (OFString*)prefix namespace: (OFString*)ns { [self parserCallbackWithEventType: TAG_END name: name prefix: prefix