Implement abort of parsing.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20255 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
CaS 2004-10-24 12:29:31 +00:00
parent 612ef8a1d5
commit 4d59f2e002
4 changed files with 31 additions and 5 deletions

View file

@ -2,6 +2,8 @@
* Source/NSDistributedNotificationCenter.m: Changed to explicitly
use a socket port name server for network wide notifications.
* Source/Additions/GSXML.m: Added ([-abortParser])
* Source/NSXMLParser.m: Use new abort method.
2004-10-21 Fred Kiefer <FredKiefer@gmx.de>

View file

@ -191,6 +191,7 @@
withData: (NSData*)data;
+ (NSString*) xmlEncodingStringForStringEncoding: (NSStringEncoding)encoding;
- (void) abortParsing;
- (int) columnNumber;
- (GSXMLDocument*) document;
- (BOOL) doValidityChecking: (BOOL)yesno;

View file

@ -1808,6 +1808,25 @@ static NSString *endMarker = @"At end of incremental parse";
return xmlEncodingString;
}
/**
* If called by a SAX callback routine, this method will terminate
* the parsiong process.
*/
- (void) abortParsing
{
if (lib != NULL)
{
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)lib;
// Stop SAX callbacks
ctxt->disableSAX = 1;
// Stop incoming data being parsed.
ctxt->instate = XML_PARSER_EOF;
// Pretend we are at end of file (nul byte).
if (ctxt->input != NULL) ctxt->input->cur = "";
}
}
/**
* If executed during a parse operation, returns the current column number.
*/
@ -2274,6 +2293,11 @@ static NSString *endMarker = @"At end of incremental parse";
xmlExternalEntityLoader oldLoader;
int oldWarnings;
if (lib == NULL || ((xmlParserCtxtPtr)lib)->disableSAX != 0)
{
return; // Parsing impossible or disabled.
}
oldLoader = xmlGetExternalEntityLoader();
oldWarnings = xmlGetWarningsDefaultValue;
NS_DURING

View file

@ -309,7 +309,7 @@ NSString* const NSXMLParserErrorDomain = @"NSXMLParserErrorDomain";
#define myHandler ((NSXMLSAXHandler*)_handler)
- (void) abortParsing
{ // FIXME
{
NSDictionary *d;
NSString *e;
NSError *error;
@ -323,14 +323,13 @@ NSString* const NSXMLParserErrorDomain = @"NSXMLParserErrorDomain";
userInfo: d];
ASSIGN(myHandler->_lastError, error);
[myHandler->_delegate parser: myHandler->_owner parseErrorOccurred: error];
[NSException raise: NSGenericException format: @"[%@-%@] not yet implemented",
NSStringFromClass([self class]), NSStringFromSelector(_cmd)];
[myParser abortParsing];
}
- (void) dealloc
{
DESTROY((id)_parser);
DESTROY((id)_handler);
DESTROY(_parser);
DESTROY(_handler);
[super dealloc];
}