2009-02-09 16:16:11 +00:00
|
|
|
/* Private header for libxml2 wrapping components
|
|
|
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
Written by: Richard Frith-Macdonald <rfm@gnu.org>
|
|
|
|
Created: Februrary 2009
|
|
|
|
|
|
|
|
This file is part of the GNUstep Base Library.
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 3 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; if not, write to the Free
|
|
|
|
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02111 USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _INCLUDED_NSXMLPRIVATE_H
|
|
|
|
#define _INCLUDED_NSXMLPRIVATE_H
|
|
|
|
|
2010-02-14 10:48:10 +00:00
|
|
|
#import "config.h"
|
2012-01-04 12:41:45 +00:00
|
|
|
#import "GNUstepBase/GSConfig.h"
|
|
|
|
|
2010-02-14 10:48:10 +00:00
|
|
|
#define EXPOSE_NSXMLDTD_IVARS 1
|
|
|
|
#define EXPOSE_NSXMLDTDNode_IVARS 1
|
|
|
|
#define EXPOSE_NSXMLDocument_IVARS 1
|
|
|
|
#define EXPOSE_NSXMLElement_IVARS 1
|
|
|
|
#define EXPOSE_NSXMLNode_IVARS 1
|
2012-01-04 12:41:45 +00:00
|
|
|
|
2012-01-10 22:25:22 +00:00
|
|
|
/*
|
|
|
|
* Macro to cast string to correct type for libxml2
|
|
|
|
*/
|
|
|
|
#define XMLSTRING(X) ((const unsigned char*)[X UTF8String])
|
|
|
|
|
2012-01-11 01:12:35 +00:00
|
|
|
inline static NSString*
|
|
|
|
StringFromXMLString(const unsigned char *bytes, unsigned length)
|
|
|
|
{
|
|
|
|
NSString *str;
|
|
|
|
|
|
|
|
str = [[NSString alloc] initWithBytes: bytes
|
|
|
|
length: length
|
|
|
|
encoding: NSUTF8StringEncoding];
|
|
|
|
return AUTORELEASE(str);
|
|
|
|
}
|
2012-01-10 22:25:22 +00:00
|
|
|
|
|
|
|
#define MY_DOC ((xmlDoc *)internal->node)
|
|
|
|
|
2012-01-11 01:12:35 +00:00
|
|
|
|
2012-01-04 13:00:04 +00:00
|
|
|
/* Instance variables for NSXMLNode. This macro needs to be defined before
|
|
|
|
* the NSXMLNode.h header is imported and before GSInternal.h is imported.
|
|
|
|
*
|
2012-01-04 12:41:45 +00:00
|
|
|
* Description of internal ivars:
|
|
|
|
* - `children': The primary storage for the descendant nodes. We use an NSArray
|
|
|
|
* here until somebody finds out it's not fast enough.
|
|
|
|
* - `childCount': For efficiency, we cache the count. This means we need to
|
|
|
|
* update it whenever the children change.
|
|
|
|
* - `previousSibling', `nextSibling': Tree walking is a common operation for
|
|
|
|
* XML. [parent->children objectAtIndex: index + 1] would be a
|
|
|
|
* straightforward way to obtain the next sibling of the node, but it hurts
|
|
|
|
* performance quite a bit. So we cache the siblings and update them when the
|
|
|
|
* nodes are changed.
|
|
|
|
*/
|
|
|
|
#define GS_NSXMLNode_IVARS \
|
2012-01-10 20:42:32 +00:00
|
|
|
void *handle; \
|
|
|
|
NSUInteger kind; \
|
|
|
|
NSXMLNode *parent; \
|
|
|
|
NSUInteger index; \
|
|
|
|
id objectValue; \
|
|
|
|
NSString *stringValue; \
|
|
|
|
NSString *name; \
|
|
|
|
NSString *URI; \
|
2012-01-04 12:41:45 +00:00
|
|
|
NSMutableArray *children; \
|
2012-01-10 20:42:32 +00:00
|
|
|
NSUInteger childCount; \
|
|
|
|
NSXMLNode *previousSibling; \
|
|
|
|
NSXMLNode *nextSibling;\
|
|
|
|
NSUInteger options; \
|
|
|
|
void *node; \
|
2012-01-04 12:41:45 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* When using the non-fragile ABI, the instance variables are exposed to the
|
|
|
|
* compiler within the class declaration, so we don't need to incorporate
|
|
|
|
* superclass variables into the subclass declaration.
|
|
|
|
* But with the fragile ABI we need to allocate a single internal structure
|
|
|
|
* containing the private variables for both the subclass and the superclass.
|
|
|
|
*/
|
|
|
|
#if GS_NONFRAGILE
|
|
|
|
#define SUPERIVARS(X)
|
|
|
|
#else
|
|
|
|
#define SUPERIVARS(X) X
|
|
|
|
#endif
|
|
|
|
|
2012-01-04 13:00:04 +00:00
|
|
|
/* Instance variables for NSXMLDocument with/without the instance
|
|
|
|
* variable 'inherited' from NSXMLNode.
|
|
|
|
* This macro needs to be defined before the NSXMLDocument.h header
|
|
|
|
* is imported and before GSInternal.h is imported.
|
|
|
|
*/
|
|
|
|
#define GS_NSXMLDocument_IVARS SUPERIVARS(GS_NSXMLNode_IVARS) \
|
|
|
|
NSXMLDTD *docType; \
|
|
|
|
BOOL childrenHaveMutated; \
|
|
|
|
NSXMLElement *rootElement; \
|
|
|
|
NSString *MIMEType; \
|
|
|
|
NSUInteger fidelityMask; \
|
|
|
|
NSInteger contentKind; \
|
|
|
|
NSMutableArray *elementStack; \
|
|
|
|
NSData *xmlData; \
|
|
|
|
|
|
|
|
|
|
|
|
/* Instance variables for NSXMLDTD with/without the instance
|
|
|
|
* variable 'inherited' from NSXMLNode.
|
|
|
|
* This macro needs to be defined before the NSXMLDTD.h header
|
|
|
|
* is imported and before GSInternal.h is imported.
|
|
|
|
*/
|
2012-01-04 12:41:45 +00:00
|
|
|
#define GS_NSXMLDTD_IVARS SUPERIVARS(GS_NSXMLNode_IVARS) \
|
|
|
|
NSString *publicID; \
|
|
|
|
NSString *systemID; \
|
|
|
|
BOOL childrenHaveMutated; \
|
|
|
|
BOOL modified; \
|
|
|
|
NSMutableDictionary *entities; \
|
|
|
|
NSMutableDictionary *elements; \
|
|
|
|
NSMutableDictionary *notations; \
|
|
|
|
NSMutableDictionary *attributes; \
|
|
|
|
NSString *original; \
|
|
|
|
|
|
|
|
|
2012-01-04 13:00:04 +00:00
|
|
|
/* Instance variables for NSXMLDTDNode with/without the instance
|
|
|
|
* variable 'inherited' from NSXMLNode.
|
|
|
|
* This macro needs to be defined before the NSXMLDTDNode.h header
|
|
|
|
* is imported and before GSInternal.h is imported.
|
|
|
|
*/
|
2012-01-04 12:41:45 +00:00
|
|
|
#define GS_NSXMLDTDNode_IVARS SUPERIVARS(GS_NSXMLNode_IVARS) \
|
|
|
|
NSUInteger DTDKind; \
|
|
|
|
NSString *notationName; \
|
|
|
|
NSString *publicID; \
|
|
|
|
NSString *systemID; \
|
|
|
|
|
|
|
|
|
2012-01-04 13:00:04 +00:00
|
|
|
/* Instance variables for NSXMLElement with/without the instance
|
|
|
|
* variable 'inherited' from NSXMLNode.
|
|
|
|
* This macro needs to be defined before the NSXMLElement.h header
|
|
|
|
* is imported and before GSInternal.h is imported.
|
|
|
|
*/
|
2012-01-04 12:41:45 +00:00
|
|
|
#define GS_NSXMLElement_IVARS SUPERIVARS(GS_NSXMLNode_IVARS) \
|
|
|
|
NSMutableDictionary *attributes; \
|
|
|
|
NSMutableArray *namespaces; \
|
|
|
|
BOOL childrenHaveMutated; \
|
|
|
|
NSInteger prefixIndex; \
|
|
|
|
|
|
|
|
|
2009-02-09 16:16:11 +00:00
|
|
|
#import "Foundation/NSArray.h"
|
|
|
|
#import "Foundation/NSData.h"
|
|
|
|
#import "Foundation/NSDebug.h"
|
|
|
|
#import "Foundation/NSDictionary.h"
|
|
|
|
#import "Foundation/NSEnumerator.h"
|
|
|
|
#import "Foundation/NSException.h"
|
|
|
|
#import "Foundation/NSString.h"
|
|
|
|
#import "Foundation/NSURL.h"
|
|
|
|
#import "Foundation/NSXMLNode.h"
|
|
|
|
#import "Foundation/NSXMLDocument.h"
|
|
|
|
#import "Foundation/NSXMLDTDNode.h"
|
|
|
|
#import "Foundation/NSXMLDTD.h"
|
|
|
|
#import "Foundation/NSXMLElement.h"
|
2010-02-14 10:48:10 +00:00
|
|
|
#import "GNUstepBase/NSObject+GNUstepBase.h"
|
2009-02-09 16:16:11 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_LIBXML
|
|
|
|
|
|
|
|
/* Avoid problems on systems where the xml headers use 'id'
|
|
|
|
*/
|
|
|
|
#define id GSXMLID
|
|
|
|
|
|
|
|
/* libxml headers */
|
|
|
|
#include <libxml/tree.h>
|
|
|
|
#include <libxml/entities.h>
|
|
|
|
#include <libxml/parser.h>
|
|
|
|
#include <libxml/parserInternals.h>
|
|
|
|
#include <libxml/HTMLparser.h>
|
|
|
|
#include <libxml/xmlmemory.h>
|
|
|
|
#include <libxml/xpath.h>
|
|
|
|
#include <libxml/xpathInternals.h>
|
|
|
|
|
|
|
|
#ifdef HAVE_LIBXSLT
|
|
|
|
#include <libxslt/xslt.h>
|
|
|
|
#include <libxslt/xsltInternals.h>
|
|
|
|
#include <libxslt/transform.h>
|
|
|
|
#include <libxslt/xsltutils.h>
|
|
|
|
#endif /* HAVE_LIBXSLT */
|
|
|
|
|
|
|
|
#undef id
|
|
|
|
|
|
|
|
#endif /* HAVE_LIBXML */
|
|
|
|
|
|
|
|
#endif
|
2011-12-30 21:40:12 +00:00
|
|
|
|