X-Git-Url: https://git.saurik.com/apple/cf.git/blobdiff_plain/47a9ab1f151d80a00a045f81937ddac81c51a463..bd5b749cf7786ae858ab372fc8f64179736c6515:/CFXMLNode.h diff --git a/CFXMLNode.h b/CFXMLNode.h new file mode 100644 index 0000000..d927a58 --- /dev/null +++ b/CFXMLNode.h @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2008 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ +/* CFXMLNode.h + Copyright (c) 1998-2007, Apple Inc. All rights reserved. +*/ + +#if !defined(__COREFOUNDATION_CFXMLNODE__) +#define __COREFOUNDATION_CFXMLNODE__ 1 + +#include +#include +#include +#include +#include + +CF_EXTERN_C_BEGIN + +enum { + kCFXMLNodeCurrentVersion = 1 +}; + +typedef const struct __CFXMLNode * CFXMLNodeRef; +typedef CFTreeRef CFXMLTreeRef; + +/* An CFXMLNode describes an individual XML construct - like a tag, or a comment, or a string + of character data. Each CFXMLNode contains 3 main pieces of information - the node's type, + the data string, and a pointer to an additional data structure. The node's type ID is an enum + value of type CFXMLNodeTypeID. The data string is always a CFStringRef; the meaning of the + string is dependent on the node's type ID. The format of the additional data is also dependent + on the node's type; in general, there is a custom structure for each type that requires + additional data. See below for the mapping from type ID to meaning of the data string and + structure of the additional data. Note that these structures are versioned, and may change + as the parser changes. The current version can always be identified by kCFXMLNodeCurrentVersion; + earlier versions can be identified and used by passing earlier values for the version number + (although the older structures would have been removed from the header). + + An CFXMLTree is simply a CFTree whose context data is known to be an CFXMLNodeRef. As + such, an CFXMLTree can be used to represent an entire XML document; the CFTree + provides the tree structure of the document, while the CFXMLNodes identify and describe + the nodes of the tree. An XML document can be parsed to a CFXMLTree, and a CFXMLTree + can generate the data for the equivalent XML document - see CFXMLParser.h for more + information on parsing XML. + */ + +/* Type codes for the different possible XML nodes; this list may grow.*/ +enum { + kCFXMLNodeTypeDocument = 1, + kCFXMLNodeTypeElement = 2, + kCFXMLNodeTypeAttribute = 3, + kCFXMLNodeTypeProcessingInstruction = 4, + kCFXMLNodeTypeComment = 5, + kCFXMLNodeTypeText = 6, + kCFXMLNodeTypeCDATASection = 7, + kCFXMLNodeTypeDocumentFragment = 8, + kCFXMLNodeTypeEntity = 9, + kCFXMLNodeTypeEntityReference = 10, + kCFXMLNodeTypeDocumentType = 11, + kCFXMLNodeTypeWhitespace = 12, + kCFXMLNodeTypeNotation = 13, + kCFXMLNodeTypeElementTypeDeclaration = 14, + kCFXMLNodeTypeAttributeListDeclaration = 15 +}; +typedef CFIndex CFXMLNodeTypeCode; + +typedef struct { + CFDictionaryRef attributes; + CFArrayRef attributeOrder; + Boolean isEmpty; + char _reserved[3]; +} CFXMLElementInfo; + +typedef struct { + CFStringRef dataString; +} CFXMLProcessingInstructionInfo; + +typedef struct { + CFURLRef sourceURL; + CFStringEncoding encoding; +} CFXMLDocumentInfo; + +typedef struct { + CFURLRef systemID; + CFStringRef publicID; +} CFXMLExternalID; + +typedef struct { + CFXMLExternalID externalID; +} CFXMLDocumentTypeInfo; + +typedef struct { + CFXMLExternalID externalID; +} CFXMLNotationInfo; + +typedef struct { + /* This is expected to change in future versions */ + CFStringRef contentDescription; +} CFXMLElementTypeDeclarationInfo; + +typedef struct { + /* This is expected to change in future versions */ + CFStringRef attributeName; + CFStringRef typeString; + CFStringRef defaultString; +} CFXMLAttributeDeclarationInfo; + +typedef struct { + CFIndex numberOfAttributes; + CFXMLAttributeDeclarationInfo *attributes; +} CFXMLAttributeListDeclarationInfo; + +enum { + kCFXMLEntityTypeParameter, /* Implies parsed, internal */ + kCFXMLEntityTypeParsedInternal, + kCFXMLEntityTypeParsedExternal, + kCFXMLEntityTypeUnparsed, + kCFXMLEntityTypeCharacter +}; +typedef CFIndex CFXMLEntityTypeCode; + +typedef struct { + CFXMLEntityTypeCode entityType; + CFStringRef replacementText; /* NULL if entityType is external or unparsed */ + CFXMLExternalID entityID; /* entityID.systemID will be NULL if entityType is internal */ + CFStringRef notationName; /* NULL if entityType is parsed */ +} CFXMLEntityInfo; + +typedef struct { + CFXMLEntityTypeCode entityType; +} CFXMLEntityReferenceInfo; + +/* + dataTypeCode meaning of dataString format of infoPtr + =========== ===================== ================= + kCFXMLNodeTypeDocument CFXMLDocumentInfo * + kCFXMLNodeTypeElement tag name CFXMLElementInfo * + kCFXMLNodeTypeAttribute + kCFXMLNodeTypeProcessingInstruction name of the target CFXMLProcessingInstructionInfo * + kCFXMLNodeTypeComment text of the comment NULL + kCFXMLNodeTypeText the text's contents NULL + kCFXMLNodeTypeCDATASection text of the CDATA NULL + kCFXMLNodeTypeDocumentFragment + kCFXMLNodeTypeEntity name of the entity CFXMLEntityInfo * + kCFXMLNodeTypeEntityReference name of the referenced entity CFXMLEntityReferenceInfo * + kCFXMLNodeTypeDocumentType name given as top-level element CFXMLDocumentTypeInfo * + kCFXMLNodeTypeWhitespace text of the whitespace NULL + kCFXMLNodeTypeNotation notation name CFXMLNotationInfo * + kCFXMLNodeTypeElementTypeDeclaration tag name CFXMLElementTypeDeclarationInfo * + kCFXMLNodeTypeAttributeListDeclaration tag name CFXMLAttributeListDeclarationInfo * +*/ + +CF_EXPORT +CFTypeID CFXMLNodeGetTypeID(void); + +/* Creates a new node based on xmlType, dataString, and additionalInfoPtr. version (together with xmlType) determines the expected structure of additionalInfoPtr */ +CF_EXPORT +CFXMLNodeRef CFXMLNodeCreate(CFAllocatorRef alloc, CFXMLNodeTypeCode xmlType, CFStringRef dataString, const void *additionalInfoPtr, CFIndex version); + +/* Creates a copy of origNode (which may not be NULL). */ +CF_EXPORT +CFXMLNodeRef CFXMLNodeCreateCopy(CFAllocatorRef alloc, CFXMLNodeRef origNode); + +CF_EXPORT +CFXMLNodeTypeCode CFXMLNodeGetTypeCode(CFXMLNodeRef node); + +CF_EXPORT +CFStringRef CFXMLNodeGetString(CFXMLNodeRef node); + +CF_EXPORT +const void *CFXMLNodeGetInfoPtr(CFXMLNodeRef node); + +CF_EXPORT +CFIndex CFXMLNodeGetVersion(CFXMLNodeRef node); + +/* CFXMLTreeRef */ + +/* Creates a childless, parentless tree from node */ +CF_EXPORT +CFXMLTreeRef CFXMLTreeCreateWithNode(CFAllocatorRef allocator, CFXMLNodeRef node); + +/* Extracts and returns the node stored in xmlTree */ +CF_EXPORT +CFXMLNodeRef CFXMLTreeGetNode(CFXMLTreeRef xmlTree); + +CF_EXTERN_C_END + +#endif /* ! __COREFOUNDATION_CFXMLNODE__ */ +