mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 01:31:08 +00:00
cleaned up a lot of things and fixed at least one crashing bug
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/branches/nsxml_using_libxml2@34519 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
f6289a65a1
commit
e395d2f42a
2 changed files with 37 additions and 27 deletions
|
@ -29,6 +29,8 @@
|
|||
#import "GSInternal.h"
|
||||
GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||
|
||||
extern void clearPrivatePointers(xmlNodePtr aNode);
|
||||
|
||||
// Private methods to manage libxml pointers...
|
||||
@interface NSXMLNode (Private)
|
||||
- (void *) _node;
|
||||
|
@ -69,6 +71,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
|||
NSString *name = @"";
|
||||
GS_CREATE_INTERNAL(NSXMLElement)
|
||||
internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]);
|
||||
((xmlNodePtr)internal->node)->_private = self;
|
||||
internal->objectValue = @"";
|
||||
}
|
||||
return [super initWithKind: kind options: theOptions];
|
||||
|
@ -83,6 +86,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
|||
if ((self = [super initWithKind: NSXMLElementKind]) != nil)
|
||||
{
|
||||
internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]);
|
||||
((xmlNodePtr)internal->node)->_private = self;
|
||||
ASSIGNCOPY(internal->URI, URI);
|
||||
internal->objectValue = @"";
|
||||
}
|
||||
|
@ -283,7 +287,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
|||
if (index >= [self childCount])
|
||||
{
|
||||
[NSException raise: NSRangeException
|
||||
format: @"index to large"];
|
||||
format: @"index too large"];
|
||||
}
|
||||
|
||||
child = [[self children] objectAtIndex: index];
|
||||
|
|
|
@ -70,12 +70,17 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
xmlElementType type = node->type;
|
||||
xmlChar *name = NULL;
|
||||
// NSXMLNodeKind kind = 0;
|
||||
result = node->_private;
|
||||
|
||||
if(result == NULL)
|
||||
if(result == nil)
|
||||
{
|
||||
NSXMLNode *parent = nil;
|
||||
switch(type)
|
||||
{
|
||||
case(XML_DOCUMENT_NODE):
|
||||
name = (xmlChar *)node->name;
|
||||
result = [[self alloc] initWithKind: NSXMLDocumentKind];
|
||||
break;
|
||||
case(XML_ELEMENT_NODE):
|
||||
name = (xmlChar *)node->name;
|
||||
result = [[self alloc] initWithKind: NSXMLElementKind];
|
||||
|
@ -374,7 +379,9 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
{
|
||||
if (GS_EXISTS_INTERNAL)
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
[self detach];
|
||||
node->_private = NULL;
|
||||
[internal->URI release];
|
||||
[internal->objectValue release];
|
||||
[internal->subNodes release];
|
||||
|
@ -386,7 +393,8 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
- (void) detach
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
NSXMLNode *parent = node->parent->_private; // get our parent object if it exists
|
||||
xmlNodePtr parentNode = node->parent;
|
||||
NSXMLNode *parent = (parentNode ? parentNode->_private : nil); // get our parent object if it exists
|
||||
[parent _removeSubNode:self];
|
||||
xmlUnlinkNode(node);
|
||||
/*
|
||||
|
@ -552,11 +560,7 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
|
||||
- (NSString*) name
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
if (node->name)
|
||||
return StringFromXMLString(node->name,strlen((char *)node->name));
|
||||
else
|
||||
return @"";
|
||||
return StringFromXMLStringPtr(MY_NODE->name);
|
||||
}
|
||||
|
||||
- (NSXMLNode*) _nodeFollowingInNaturalDirection: (BOOL)forward
|
||||
|
@ -626,11 +630,11 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
|
||||
- (NSXMLNode*) nextSibling
|
||||
{
|
||||
xmlNodePtr node = MY_NODE->next;
|
||||
xmlNodePtr next = MY_NODE->next;
|
||||
|
||||
if(node != NULL)
|
||||
if(next != NULL)
|
||||
{
|
||||
return [NSXMLNode _objectForNode:node->next];
|
||||
return [NSXMLNode _objectForNode:next];
|
||||
}
|
||||
|
||||
return nil;
|
||||
|
@ -658,24 +662,26 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
|
||||
- (NSXMLNode*) previousSibling
|
||||
{
|
||||
return internal->previousSibling;
|
||||
xmlNodePtr prev = MY_NODE->prev;
|
||||
|
||||
if(prev != NULL)
|
||||
{
|
||||
return [NSXMLNode _objectForNode:prev];
|
||||
}
|
||||
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (NSXMLDocument*) rootDocument
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
NSXMLDocument *ancestor = [NSXMLNode _objectForNode:(node->doc)];
|
||||
return (NSXMLDocument*)ancestor;
|
||||
xmlNodePtr node = MY_NODE;
|
||||
NSXMLDocument *ancestor = (NSXMLDocument *)[NSXMLNode _objectForNode:(xmlNodePtr)(node->doc)];
|
||||
return ancestor;
|
||||
}
|
||||
|
||||
- (NSString*) stringValue
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
if (node->content)
|
||||
return StringFromXMLString(node->content,strlen((char *)node->content));
|
||||
else
|
||||
return @"";
|
||||
return StringFromXMLStringPtr(MY_NODE->content);
|
||||
}
|
||||
|
||||
- (NSString*) URI
|
||||
|
@ -703,7 +709,6 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
len = buffer->use;
|
||||
string = StringFromXMLString(buf,len);
|
||||
xmlBufferFree(buffer);
|
||||
AUTORELEASE(string);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
@ -717,9 +722,8 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
{
|
||||
if (NSXMLInvalidKind != internal->kind)
|
||||
{
|
||||
xmlNodePtr node = (xmlNodePtr)(internal->node);
|
||||
node->name = XMLStringCopy(name);
|
||||
//ASSIGNCOPY(internal->name, name);
|
||||
xmlNodePtr node = MY_NODE;
|
||||
xmlNodeSetName(node, XMLSTRING(name));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -741,16 +745,18 @@ void clearPrivatePointers(xmlNodePtr aNode)
|
|||
xmlNodePtr node = MY_NODE;
|
||||
if (resolve == NO)
|
||||
{
|
||||
node->content = (xmlChar *)[string UTF8String];
|
||||
xmlNodeSetContent(node, XMLSTRING(string));
|
||||
}
|
||||
else
|
||||
{
|
||||
// need to actually resolve entities...
|
||||
node->content = (xmlChar *)[string UTF8String];
|
||||
xmlChar *newstr = xmlEncodeSpecialChars(node->doc, XMLSTRING(string)); // is this the right functionality??
|
||||
xmlNodeSetContent(node, newstr);
|
||||
xmlMemFree(newstr);
|
||||
}
|
||||
if (nil == string)
|
||||
{
|
||||
node->content = (xmlChar *)[@"" UTF8String]; // string value may not be nil
|
||||
xmlNodeSetContent(node, XMLSTRING(@"")); // string value may not be nil
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue