summaryrefslogtreecommitdiffstats
path: root/storage/connect/plgxml.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/connect/plgxml.h')
-rw-r--r--storage/connect/plgxml.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/storage/connect/plgxml.h b/storage/connect/plgxml.h
new file mode 100644
index 00000000..82629e4c
--- /dev/null
+++ b/storage/connect/plgxml.h
@@ -0,0 +1,194 @@
+#if defined(ZIP_SUPPORT)
+#include "filamzip.h"
+#endif // ZIP_SUPPORT
+
+/******************************************************************/
+/* Dual XML implementation base classes defines. */
+/******************************************************************/
+#if !defined(BASE_BUFFER_SIZE)
+enum ElementType { // libxml2
+ XML_ELEMENT_NODE = 1,
+ XML_ATTRIBUTE_NODE = 2,
+ XML_TEXT_NODE = 3,
+ XML_CDATA_SECTION_NODE = 4,
+ XML_ENTITY_REF_NODE = 5,
+ XML_ENTITY_NODE = 6,
+ XML_PI_NODE = 7,
+ XML_COMMENT_NODE = 8,
+ XML_DOCUMENT_NODE = 9,
+ XML_DOCUMENT_TYPE_NODE = 10,
+ XML_DOCUMENT_FRAG_NODE = 11,
+ XML_NOTATION_NODE = 12,
+ XML_HTML_DOCUMENT_NODE = 13,
+ XML_DTD_NODE = 14,
+ XML_ELEMENT_DECL = 15,
+ XML_ATTRIBUTE_DECL = 16,
+ XML_ENTITY_DECL = 17,
+ XML_NAMESPACE_DECL = 18,
+ XML_XINCLUDE_START = 19,
+ XML_XINCLUDE_END = 20,
+ XML_DOCB_DOCUMENT_NODE = 21};
+#endif // !BASE_BUFFER_SIZE
+
+//#if !defined(NODE_TYPE_LIST)
+#ifdef NOT_USED
+enum NodeType { // MS DOM
+ NODE_ELEMENT = 1,
+ NODE_ATTRIBUTE = 2,
+ NODE_TEXT = 3,
+ NODE_CDATA_SECTION = 4,
+ NODE_ENTITY_REFERENCE = 5,
+ NODE_ENTITY = 6,
+ NODE_PROCESSING_INSTRUCTION = 7,
+ NODE_COMMENT = 8,
+ NODE_DOCUMENT = 9,
+ NODE_DOCUMENT_TYPE = 10,
+ NODE_DOCUMENT_FRAGMENT = 11,
+ NODE_NOTATION = 12};
+#endif // !NODE_TYPE_LIST
+
+typedef class XMLDOCUMENT *PXDOC; // Document
+typedef class XMLNODE *PXNODE; // Node (Element)
+typedef class XMLNODELIST *PXLIST; // Node list
+typedef class XMLATTRIBUTE *PXATTR; // Attribute
+
+typedef struct _ns {
+ struct _ns *Next;
+ char *Prefix;
+ char *Uri;
+ } NS, *PNS;
+
+PXDOC GetLibxmlDoc(PGLOBAL g, char *nsl, char *nsdf,
+ char *enc, PFBLOCK fp = NULL);
+PXDOC GetDomDoc(PGLOBAL g, char *nsl, char *nsdf,
+ char *enc, PFBLOCK fp = NULL);
+
+/******************************************************************/
+/* Declaration of XML document. */
+/******************************************************************/
+class XMLDOCUMENT : public BLOCK {
+ friend class XML2NODE;
+ friend class DOMNODE;
+ public:
+ // Properties
+ virtual short GetDocType(void) = 0;
+ virtual void *GetDocPtr(void) = 0;
+ virtual void SetNofree(bool b) = 0;
+
+ // Methods
+ virtual bool Initialize(PGLOBAL, PCSZ, bool) = 0;
+ virtual bool ParseFile(PGLOBAL, char *) = 0;
+ virtual bool NewDoc(PGLOBAL, PCSZ) = 0;
+ virtual void AddComment(PGLOBAL, char *) = 0;
+ virtual PXNODE GetRoot(PGLOBAL) = 0;
+ virtual PXNODE NewRoot(PGLOBAL, char *) = 0;
+ virtual PXNODE NewPnode(PGLOBAL, char * = NULL) = 0;
+ virtual PXATTR NewPattr(PGLOBAL) = 0;
+ virtual PXLIST NewPlist(PGLOBAL) = 0;
+ virtual int DumpDoc(PGLOBAL, char *) = 0;
+ virtual void CloseDoc(PGLOBAL, PFBLOCK) = 0;
+ virtual PFBLOCK LinkXblock(PGLOBAL, MODE, int, char *) = 0;
+
+ protected:
+ // Constructor
+ XMLDOCUMENT(char *nsl, char *nsdf, char *enc);
+
+ // Utility
+ bool MakeNSlist(PGLOBAL g);
+ bool InitZip(PGLOBAL g, PCSZ entry);
+ char *GetMemDoc(PGLOBAL g, char *fn);
+ void CloseZip(void);
+
+ // Members
+#if defined(ZIP_SUPPORT)
+ UNZIPUTL *zip; /* Used for zipped file */
+#else // !ZIP_SUPPORT
+ bool zip; /* Always false */
+#endif // !ZIP_SUPPORT
+ PNS Namespaces; /* To the namespaces */
+ char *Encoding; /* The document encoding */
+ char *Nslist; /* Namespace list */
+ char *DefNs; /* Default namespace */
+}; // end of class XMLDOCUMENT
+
+/******************************************************************/
+/* Declaration of XML node. */
+/******************************************************************/
+class XMLNODE : public BLOCK {
+ public:
+ // Properties
+ virtual char *GetName(PGLOBAL) = 0;
+ virtual int GetType(void) = 0;
+ virtual PXNODE GetNext(PGLOBAL) = 0;
+ virtual PXNODE GetChild(PGLOBAL) = 0;
+ virtual int GetLen(void) {return Len;}
+
+ // Methods
+ virtual RCODE GetContent(PGLOBAL, char *, int) = 0;
+ virtual bool SetContent(PGLOBAL, char *, int) = 0;
+ virtual PXNODE Clone(PGLOBAL, PXNODE) = 0;
+ virtual PXLIST GetChildElements(PGLOBAL, char * = NULL, PXLIST = NULL) = 0;
+ virtual PXLIST SelectNodes(PGLOBAL, char *, PXLIST = NULL) = 0;
+ virtual PXNODE SelectSingleNode(PGLOBAL, char *, PXNODE = NULL) = 0;
+ virtual PXATTR GetAttribute(PGLOBAL, char *, PXATTR = NULL) = 0;
+ virtual PXNODE AddChildNode(PGLOBAL, PCSZ, PXNODE = NULL) = 0;
+ virtual PXATTR AddProperty(PGLOBAL, char *, PXATTR = NULL) = 0;
+ virtual void AddText(PGLOBAL, PCSZ) = 0;
+ virtual void DeleteChild(PGLOBAL, PXNODE) = 0;
+
+ protected:
+ PXNODE NewChild(PXNODE ncp);
+ void Delete(PXNODE dnp);
+ char *BufAlloc(PGLOBAL g, const char *p, int n);
+
+ // Constructor
+ XMLNODE(PXDOC dp);
+
+ // Members
+ PXDOC Doc;
+ PXNODE Next;
+ PXNODE Children;
+ char *Buf;
+ int Len;
+}; // end of class XMLNODE
+
+/******************************************************************/
+/* Declaration of XML node list. */
+/******************************************************************/
+class XMLNODELIST : public BLOCK {
+ public:
+ // Properties
+ virtual int GetLength(void) = 0;
+ virtual PXNODE GetItem(PGLOBAL, int, PXNODE = NULL) = 0;
+ virtual bool DropItem(PGLOBAL, int) = 0;
+
+ protected:
+ // Constructor
+ XMLNODELIST(PXDOC dp) {Doc = dp;}
+
+ // Members
+ PXDOC Doc;
+}; // end of class XMLNODELIST
+
+/******************************************************************/
+/* Declaration of XML attribute. */
+/******************************************************************/
+class XMLATTRIBUTE : public BLOCK {
+ public:
+ // Properties
+ virtual char *GetName(PGLOBAL) = 0;
+ virtual PXATTR GetNext(PGLOBAL) = 0;
+
+ // Methods
+ virtual RCODE GetText(PGLOBAL, char *, int) = 0;
+ virtual bool SetText(PGLOBAL, char *, int) = 0;
+
+ protected:
+ // Constructor
+ XMLATTRIBUTE(PXDOC dp) {Doc = dp;}
+
+ // Members
+ PXDOC Doc;
+}; // end of class XMLATTRIBUTE
+
+