From dc7741f36f31e96ed4f04755df0f4cf05a41f255 Mon Sep 17 00:00:00 2001 From: Muccy Date: Fri, 8 Jun 2012 20:33:38 +0200 Subject: [PATCH] CTidy is correctly invoked if requested in CXMLDocument initializers --- Source/CXMLDocument.m | 96 +++++++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/Source/CXMLDocument.m b/Source/CXMLDocument.m index c955817..47e1d2b 100644 --- a/Source/CXMLDocument.m +++ b/Source/CXMLDocument.m @@ -44,52 +44,61 @@ @implementation CXMLDocument - (id)initWithXMLString:(NSString *)inString options:(NSUInteger)inOptions error:(NSError **)outError { +#if !TOUCHXMLUSETIDY #pragma unused (inOptions) +#endif - if ((self = [super init]) != NULL) - { + self = [super init]; + if (self) { + NSError *theError = NULL; + #if TOUCHXMLUSETIDY + const char *tidyEncodingCString = [[CTidy tidyEncodingFromStringEncoding:NSUTF8StringEncoding] UTF8String]; + if (inOptions & CXMLDocumentTidyHTML) { - inString = [[CTidy tidy] tidyString:inString inputFormat:TidyFormat_HTML outputFormat:TidyFormat_XHTML diagnostics:NULL error:&theError]; + CTidy *tidy = [[CTidy alloc] init]; + inString = [tidy tidyString:inString inputFormat:TidyFormat_HTML outputFormat:TidyFormat_XHTML encoding:tidyEncodingCString diagnostics:NULL error:&theError]; } else if (inOptions & CXMLDocumentTidyXML) { - inString = [[CTidy tidy] tidyString:inString inputFormat:TidyFormat_XML outputFormat:TidyFormat_XML diagnostics:NULL error:&theError]; + CTidy *tidy = [[CTidy alloc] init]; + inString = [tidy tidyString:inString inputFormat:TidyFormat_XML outputFormat:TidyFormat_XML encoding:tidyEncodingCString diagnostics:NULL error:&theError]; } #endif - NSError *theError = NULL; - - xmlDocPtr theDoc = xmlParseDoc((xmlChar *)[inString UTF8String]); - if (theDoc != NULL) - { - _node = (xmlNodePtr)theDoc; - NSAssert(_node->_private == NULL, @"TODO"); - _node->_private = (__bridge void *)self; // Note. NOT retained (TODO think more about _private usage) - } - else - { - NSDictionary *theUserInfo = nil; + + if (theError == NULL) { + xmlDocPtr theDoc = xmlParseDoc((xmlChar *)[inString UTF8String]); + if (theDoc != NULL) + { + _node = (xmlNodePtr)theDoc; + NSAssert(_node->_private == NULL, @"TODO"); + _node->_private = (__bridge void *)self; // Note. NOT retained (TODO think more about _private usage) + } + else + { + NSDictionary *theUserInfo = nil; + + xmlErrorPtr theLastErrorPtr = xmlGetLastError(); + if (theLastErrorPtr) { + theUserInfo = [NSDictionary dictionaryWithObjectsAndKeys: + [NSString stringWithUTF8String:theLastErrorPtr->message], NSLocalizedDescriptionKey, + NULL]; + } + theError = [NSError errorWithDomain:@"CXMLErrorDomain" code:1 userInfo:theUserInfo]; + + xmlResetLastError(); + } - xmlErrorPtr theLastErrorPtr = xmlGetLastError(); - if (theLastErrorPtr) { - theUserInfo = [NSDictionary dictionaryWithObjectsAndKeys: - [NSString stringWithUTF8String:theLastErrorPtr->message], NSLocalizedDescriptionKey, - NULL]; + if (outError) + { + *outError = theError; } - theError = [NSError errorWithDomain:@"CXMLErrorDomain" code:1 userInfo:theUserInfo]; - xmlResetLastError(); - } - - if (outError) - { - *outError = theError; - } - - if (theError != NULL) - { - self = NULL; + if (theError != NULL) + { + self = NULL; + } } } @@ -103,22 +112,31 @@ - (id)initWithData:(NSData *)inData options:(NSUInteger)inOptions error:(NSError - (id)initWithData:(NSData *)inData encoding:(NSStringEncoding)encoding options:(NSUInteger)inOptions error:(NSError **)outError { +#if !TOUCHXMLUSETIDY #pragma unused (inOptions) - if ((self = [super init]) != NULL) - { +#endif + + self = [super init]; + if (self) { NSError *theError = NULL; #if TOUCHXMLUSETIDY + NSString *tidyEncoding = [CTidy tidyEncodingFromStringEncoding:encoding]; + tidyEncoding = (tidyEncoding ?: [CTidy tidyEncodingFromStringEncoding:NSUTF8StringEncoding]); + const char *tidyEncodingCString = [tidyEncoding UTF8String]; + if (inOptions & CXMLDocumentTidyHTML) { - inData = [[CTidy tidy] tidyData:inData inputFormat:TidyFormat_HTML outputFormat:TidyFormat_XHTML diagnostics:NULL error:&theError]; + CTidy *tidy = [[CTidy alloc] init]; + inData = [tidy tidyData:inData inputFormat:TidyFormat_HTML outputFormat:TidyFormat_XHTML encoding:tidyEncodingCString diagnostics:NULL error:&theError]; } else if (inOptions & CXMLDocumentTidyXML) { - inData = [[CTidy tidy] tidyData:inData inputFormat:TidyFormat_XML outputFormat:TidyFormat_XML diagnostics:NULL error:&theError]; + CTidy *tidy = [[CTidy alloc] init]; + inData = [tidy tidyData:inData inputFormat:TidyFormat_XML outputFormat:TidyFormat_XML encoding:tidyEncodingCString diagnostics:NULL error:&theError]; } #endif - + if (theError == NULL) { xmlDocPtr theDoc = NULL; @@ -147,7 +165,7 @@ - (id)initWithData:(NSData *)inData encoding:(NSStringEncoding)encoding options: xmlResetLastError(); } } - + if (outError) *outError = theError;