diff options
Diffstat (limited to 'storage/connect/plgxml.h')
-rw-r--r-- | storage/connect/plgxml.h | 194 |
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 + + |