]> git.saurik.com Git - apple/cf.git/blobdiff - CFXMLNode.h
CF-476.10.tar.gz
[apple/cf.git] / CFXMLNode.h
diff --git a/CFXMLNode.h b/CFXMLNode.h
new file mode 100644 (file)
index 0000000..d927a58
--- /dev/null
@@ -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 <CoreFoundation/CFArray.h>
+#include <CoreFoundation/CFDictionary.h>
+#include <CoreFoundation/CFString.h>
+#include <CoreFoundation/CFTree.h>
+#include <CoreFoundation/CFURL.h>
+
+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             <currently unused>                   CFXMLDocumentInfo *
+ kCFXMLNodeTypeElement              tag name                             CFXMLElementInfo *
+ kCFXMLNodeTypeAttribute            <currently unused>                   <currently unused>
+ 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     <currently unused>                   <currently unused>
+ 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__ */
+