Skip to content

Commit

Permalink
Add skeletal NSXML work as requested.
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@27824 72102866-910b-0410-8b05-ffd578937521
  • Loading branch information
rfm committed Feb 9, 2009
1 parent 2f24254 commit 910deff
Show file tree
Hide file tree
Showing 21 changed files with 2,553 additions and 4 deletions.
32 changes: 32 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
2009-02-09 Richard Frith-Macdonald <rfm@gnu.org>

* Source/NSArray.m: Implement new methods for inserting and replacing
objects at indexes in an NSIndexSet.
* Headers/Foundation/NSObject.h: Minor whitespace fix
* Source/NSNetServices.m: Mark unimplemented method.
* Headers/Foundation/NSXMLDocument.h: new class
* Headers/Foundation/NSXMLNode.h: new class
* Headers/Foundation/NSXMLNodeOptions.h: new class
* Headers/Foundation/NSXMLDTD.h: new class
* Headers/Foundation/NSXMLDTDNode.h: new class
* Headers/Foundation/NSXMLElement.h: new class
* Headers/Foundation/Foundation.h: Add new class headers
* Source/NSXMLDocument.m: skeleton of class
* Source/NSXMLDTD.m: skeleton of class
* Source/NSXMLNode.m: skeleton of class
* Source/NSXMLDTDNode.m: skeleton of class
* Source/NSXMLElement.m: skeleton of class
* Source/NSXMLPrivate.h: Private header for all NSXMLNode based stuff.
* Source/GNUmakefile: Add new NSXML classes
* Source/DocMakefile: ditto
Mostly, add the (unimplemented) XML classes introduced in the latest
version of MacOS-X. Currently the classes are unimplemented method
stubs, but the idea is to wrap libxml2 in a similar way to that in
which GSXML does it.
NB. The current ivar layout is reverse engineered from MacOS-X on the
assumption that we will try to be extremely compatible and use the
same (inferred) mechanism of having the libxml2 tree be the master
data and only using the objc ivars to cache information when we
retrieve it in the form of NSStrings etc. Maybe we will chose to
do something different later.

2009-02-09 Richard Frith-Macdonald <rfm@gnu.org>

* Source/Additions/GSObjCRuntime.m: Correct error comparing method
Expand Down
6 changes: 6 additions & 0 deletions Headers/Foundation/Foundation.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@
#import <Foundation/NSUserDefaults.h>
#import <Foundation/NSValue.h>
#import <Foundation/NSValueTransformer.h>
#import <Foundation/NSXMLDocument.h>
#import <Foundation/NSXMLDTD.h>
#import <Foundation/NSXMLDTDNode.h>
#import <Foundation/NSXMLElement.h>
#import <Foundation/NSXMLNode.h>
#import <Foundation/NSXMLNodeOptions.h>
#import <Foundation/NSXMLParser.h>
#import <Foundation/NSZone.h>

Expand Down
2 changes: 1 addition & 1 deletion Headers/Foundation/NSObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ GS_EXPORT NSRecursiveLock *gnustep_global_lock;
* (but cannot due to compiler constraint), and wants to make sure it is not
* called by mistake. Default implementation raises an exception at runtime.
*/
- notImplemented:(SEL)aSel;
- (id) notImplemented: (SEL)aSel;

/**
* Message sent when an implementation wants to explicitly require a subclass
Expand Down
156 changes: 156 additions & 0 deletions Headers/Foundation/NSXMLDTD.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
/* Interface for NSXMLDTD for GNUStep
Copyright (C) 2008 Free Software Foundation, Inc.
Written by: Richard Frith-Macdonald <rfm@gnu.org>
Created: September 2008
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 __NSXMLDTD_h_GNUSTEP_BASE_INCLUDE
#define __NSXMLDTD_h_GNUSTEP_BASE_INCLUDE
#import <GNUstepBase/GSVersionMacros.h>

#import <Foundation/NSXMLNode.h>

#if defined(__cplusplus)
extern "C" {
#endif


@class NSData, NSMutableDictionary;
@class NSXMLDTDNode;

/**
* Encapsulates document type definition data.
*/
@interface NSXMLDTD : NSXMLNode
{
@private
NSString *_name;
NSString *_publicID;
NSString *_systemID;
NSArray *_children;
BOOL _childrenHaveMutated;
BOOL _modified;
uint8_t _unused[sizeof(void*)-2];
NSMutableDictionary *_entities;
NSMutableDictionary *_elements;
NSMutableDictionary *_notations;
NSMutableDictionary *_attributes;
NSString *_original;
}

/**
* Adds a child after the existing children.
*/
- (void) addChild: (NSXMLNode*)child;

/**
* Returns the attribute declaration named.
*/
- (NSXMLDTDNode*) attributeDeclarationForName: (NSString*)name
elementName: (NSString*)elementName;

/**
* Returns the element declaration named.
*/
- (NSXMLDTDNode*) elementDeclarationForName: (NSString*)name;

/**
* Returns the entity declaration named.
*/
- (NSXMLDTDNode*) entityDeclarationForName: (NSString*)name;

/** Load data from URL and initialise the receiver with the contents.
*/
- (id) initWithContentsOfURL: (NSURL*)url
options: (NSUInteger)mask
error: (NSError**)error;

/** <init />
*/
- (id) initWithData: (NSData*)data
options: (NSUInteger)mask
error: (NSError**)error;

/**
* Inserts a child node at the specified index in the document.
*/
- (void) insertChild: (NSXMLNode*)child atIndex: (NSUInteger)index;

/**
* Inserts a number of child nodes at the specified index.
*/
- (void) insertChildren: (NSArray*)children atIndex: (NSUInteger)index;

/**
* Returns the notation declaration named.
*/
- (NSXMLDTDNode*) notationDeclarationForName: (NSString*)name;

/**
* Returns the predefined entity declaration matching named.
*/
+ (NSXMLDTDNode*) predefinedEntityDeclarationForName: (NSString*)name;

/**
* Returns the public ID set for the document.
*/
- (NSString*) publicID;

/**
* Remove the indexed child node.
*/
- (void) removeChildAtIndex: (NSUInteger)index;

/**
* Replaces the child at index with another child.
*/
- (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)node;

/**
* Replaces all existing children with the child nodes in the array.
*/
- (void) setChildren: (NSArray*)children;

/**
* Sets the public id of this document.<br />
* This identifier should be in the default catalog or in a location
* given by the XML_CATALOG_FILES environment variable.<br />
* You should also set the systemID when you set this.
*/
- (void) setPublicID: (NSString*)publicID;

/**
* Sets the system ID ... a URL referring to the DTD document.
*/
- (void) setSystemID: (NSString*)systemID;

/**
* Returns the system ID
*/
- (NSString*) systemID;

@end

#if defined(__cplusplus)
}
#endif

#endif /*__NSXMLDTD_GNUSTEP_BASE_INCLUDE */
148 changes: 148 additions & 0 deletions Headers/Foundation/NSXMLDTDNode.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/* Interface for NSXMLDTDNode for GNUStep
Copyright (C) 2008 Free Software Foundation, Inc.
Written by: Richard Frith-Macdonald <rfm@gnu.org>
Created: September 2008
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 __NSXMLDTDNode_h_GNUSTEP_BASE_INCLUDE
#define __NSXMLDTDNode_h_GNUSTEP_BASE_INCLUDE
#import <GNUstepBase/GSVersionMacros.h>

#import <Foundation/NSXMLNode.h>

#if defined(__cplusplus)
extern "C" {
#endif

/**
* The kind of DTD node.
*/
enum {
NSXMLEntityGeneralKind = 1,
NSXMLEntityParsedKind,
NSXMLEntityUnparsedKind,
NSXMLEntityParameterKind,
NSXMLEntityPredefined,
NSXMLAttributeCDATAKind,
NSXMLAttributeIDKind,
NSXMLAttributeIDRefKind,
NSXMLAttributeIDRefsKind,
NSXMLAttributeEntityKind,
NSXMLAttributeEntitiesKind,
NSXMLAttributeNMTokenKind,
NSXMLAttributeNMTokensKind,
NSXMLAttributeEnumerationKind,
NSXMLAttributeNotationKind,
NSXMLElementDeclarationUndefinedKind,
NSXMLElementDeclarationEmptyKind,
NSXMLElementDeclarationAnyKind,
NSXMLElementDeclarationMixedKind,
NSXMLElementDeclarationElementKind
};
typedef NSUInteger NSXMLDTDNodeKind;

/**
* Represents the nodes whose types are present only in DTDs.<br />
* Object values for the different nodes are:
* <deflist>
* <term>Entity declaration</term>
* <desc>The string that that entity resolves to eg "&lt;"</desc>
* <term>Attribute declaration</term>
* <desc>The default value, if any</desc>
* <term>Element declaration</term>
* <desc>The validation string</desc>
* <term>Notation declaration</term>
* <desc>nil</desc>
* </deflist>
*/
@interface NSXMLDTDNode : NSXMLNode
{
@protected
NSXMLDTDNodeKind _DTDKind;
NSString *_name;
NSString *_notationName;
NSString *_publicID;
NSString *_systemID;
}

/**
* Returns what kind of DTD node this is.
*/
- (NSXMLDTDNodeKind) DTDKind;

/** <init />
* Initialises the receiver based on the contents of the supplied XML.
*/
- (id) initWithXMLString: (NSString*)string;

/**
* Returns YES if the system id is set, NO otherwise.<br />
* Is valid only for entities and notations.
*/
- (BOOL) isExternal;

/**
* Returns the notation name.
*/
- (NSString*) notationName;

/**
* Returns the public id.
*/
- (NSString*) publicID;

/**
* Sets what kind of DTD node this is.
*/
- (void) setDTDKind: (NSXMLDTDNodeKind)kind;

/**
* Sets the notation name if the receiver is an entity.
*/
- (void) setNotationName: (NSString*)notationName;

/**
* Sets the public id of this node.<br />
* This identifier should be in the default catalog or in a location
* given by the XML_CATALOG_FILES environment variable.<br />
* When the public id is set the system id must also be set.<br />
* This is valid only for entities and notations.
*/
- (void) setPublicID: (NSString*)publicID;

/**
* Sets the system ID ... a URL referring to the DTD document.
*/
- (void) setSystemID: (NSString*)systemID;

/**
* Returns the system ID.
*/
- (NSString*) systemID;

@end


#if defined(__cplusplus)
}
#endif

#endif /*__NSXMLDTDNode_h_GNUSTEP_BASE_INCLUDE */
Loading

0 comments on commit 910deff

Please sign in to comment.