1 | #if defined(ZIP_SUPPORT) |
2 | #include "filamzip.h" |
3 | #endif // ZIP_SUPPORT |
4 | |
5 | /******************************************************************/ |
6 | /* Dual XML implementation base classes defines. */ |
7 | /******************************************************************/ |
8 | #if !defined(BASE_BUFFER_SIZE) |
9 | enum ElementType { // libxml2 |
10 | XML_ELEMENT_NODE = 1, |
11 | XML_ATTRIBUTE_NODE = 2, |
12 | XML_TEXT_NODE = 3, |
13 | XML_CDATA_SECTION_NODE = 4, |
14 | XML_ENTITY_REF_NODE = 5, |
15 | XML_ENTITY_NODE = 6, |
16 | XML_PI_NODE = 7, |
17 | XML_COMMENT_NODE = 8, |
18 | XML_DOCUMENT_NODE = 9, |
19 | XML_DOCUMENT_TYPE_NODE = 10, |
20 | XML_DOCUMENT_FRAG_NODE = 11, |
21 | XML_NOTATION_NODE = 12, |
22 | XML_HTML_DOCUMENT_NODE = 13, |
23 | XML_DTD_NODE = 14, |
24 | XML_ELEMENT_DECL = 15, |
25 | XML_ATTRIBUTE_DECL = 16, |
26 | XML_ENTITY_DECL = 17, |
27 | XML_NAMESPACE_DECL = 18, |
28 | XML_XINCLUDE_START = 19, |
29 | XML_XINCLUDE_END = 20, |
30 | XML_DOCB_DOCUMENT_NODE = 21}; |
31 | #endif // !BASE_BUFFER_SIZE |
32 | |
33 | //#if !defined(NODE_TYPE_LIST) |
34 | #ifdef NOT_USED |
35 | enum NodeType { // MS DOM |
36 | NODE_ELEMENT = 1, |
37 | NODE_ATTRIBUTE = 2, |
38 | NODE_TEXT = 3, |
39 | NODE_CDATA_SECTION = 4, |
40 | NODE_ENTITY_REFERENCE = 5, |
41 | NODE_ENTITY = 6, |
42 | NODE_PROCESSING_INSTRUCTION = 7, |
43 | NODE_COMMENT = 8, |
44 | NODE_DOCUMENT = 9, |
45 | NODE_DOCUMENT_TYPE = 10, |
46 | NODE_DOCUMENT_FRAGMENT = 11, |
47 | NODE_NOTATION = 12}; |
48 | #endif // !NODE_TYPE_LIST |
49 | |
50 | typedef class XMLDOCUMENT *PXDOC; // Document |
51 | typedef class XMLNODE *PXNODE; // Node (Element) |
52 | typedef class XMLNODELIST *PXLIST; // Node list |
53 | typedef class XMLATTRIBUTE *PXATTR; // Attribute |
54 | |
55 | typedef struct _ns { |
56 | struct _ns *Next; |
57 | char *Prefix; |
58 | char *Uri; |
59 | } NS, *PNS; |
60 | |
61 | PXDOC GetLibxmlDoc(PGLOBAL g, char *nsl, char *nsdf, |
62 | char *enc, PFBLOCK fp = NULL); |
63 | PXDOC GetDomDoc(PGLOBAL g, char *nsl, char *nsdf, |
64 | char *enc, PFBLOCK fp = NULL); |
65 | |
66 | /******************************************************************/ |
67 | /* Declaration of XML document. */ |
68 | /******************************************************************/ |
69 | class XMLDOCUMENT : public BLOCK { |
70 | friend class XML2NODE; |
71 | friend class DOMNODE; |
72 | public: |
73 | // Properties |
74 | virtual short GetDocType(void) = 0; |
75 | virtual void *GetDocPtr(void) = 0; |
76 | virtual void SetNofree(bool b) = 0; |
77 | |
78 | // Methods |
79 | virtual bool Initialize(PGLOBAL, PCSZ, bool) = 0; |
80 | virtual bool ParseFile(PGLOBAL, char *) = 0; |
81 | virtual bool NewDoc(PGLOBAL, PCSZ) = 0; |
82 | virtual void (PGLOBAL, char *) = 0; |
83 | virtual PXNODE GetRoot(PGLOBAL) = 0; |
84 | virtual PXNODE NewRoot(PGLOBAL, char *) = 0; |
85 | virtual PXNODE NewPnode(PGLOBAL, char * = NULL) = 0; |
86 | virtual PXATTR NewPattr(PGLOBAL) = 0; |
87 | virtual PXLIST NewPlist(PGLOBAL) = 0; |
88 | virtual int DumpDoc(PGLOBAL, char *) = 0; |
89 | virtual void CloseDoc(PGLOBAL, PFBLOCK) = 0; |
90 | virtual PFBLOCK LinkXblock(PGLOBAL, MODE, int, char *) = 0; |
91 | |
92 | protected: |
93 | // Constructor |
94 | XMLDOCUMENT(char *nsl, char *nsdf, char *enc); |
95 | |
96 | // Utility |
97 | bool MakeNSlist(PGLOBAL g); |
98 | bool InitZip(PGLOBAL g, PCSZ entry); |
99 | char *GetMemDoc(PGLOBAL g, char *fn); |
100 | void CloseZip(void); |
101 | |
102 | // Members |
103 | #if defined(ZIP_SUPPORT) |
104 | UNZIPUTL *zip; /* Used for zipped file */ |
105 | #else // !ZIP_SUPPORT |
106 | bool zip; /* Always false */ |
107 | #endif // !ZIP_SUPPORT |
108 | PNS Namespaces; /* To the namespaces */ |
109 | char *Encoding; /* The document encoding */ |
110 | char *Nslist; /* Namespace list */ |
111 | char *DefNs; /* Default namespace */ |
112 | }; // end of class XMLDOCUMENT |
113 | |
114 | /******************************************************************/ |
115 | /* Declaration of XML node. */ |
116 | /******************************************************************/ |
117 | class XMLNODE : public BLOCK { |
118 | public: |
119 | // Properties |
120 | virtual char *GetName(PGLOBAL) = 0; |
121 | virtual int GetType(void) = 0; |
122 | virtual PXNODE GetNext(PGLOBAL) = 0; |
123 | virtual PXNODE GetChild(PGLOBAL) = 0; |
124 | virtual int GetLen(void) {return Len;} |
125 | |
126 | // Methods |
127 | virtual RCODE GetContent(PGLOBAL, char *, int) = 0; |
128 | virtual bool SetContent(PGLOBAL, char *, int) = 0; |
129 | virtual PXNODE Clone(PGLOBAL, PXNODE) = 0; |
130 | virtual PXLIST GetChildElements(PGLOBAL, char * = NULL, PXLIST = NULL) = 0; |
131 | virtual PXLIST SelectNodes(PGLOBAL, char *, PXLIST = NULL) = 0; |
132 | virtual PXNODE SelectSingleNode(PGLOBAL, char *, PXNODE = NULL) = 0; |
133 | virtual PXATTR GetAttribute(PGLOBAL, char *, PXATTR = NULL) = 0; |
134 | virtual PXNODE AddChildNode(PGLOBAL, PCSZ, PXNODE = NULL) = 0; |
135 | virtual PXATTR AddProperty(PGLOBAL, char *, PXATTR = NULL) = 0; |
136 | virtual void AddText(PGLOBAL, PCSZ) = 0; |
137 | virtual void DeleteChild(PGLOBAL, PXNODE) = 0; |
138 | |
139 | protected: |
140 | PXNODE NewChild(PXNODE ncp); |
141 | void Delete(PXNODE dnp); |
142 | char *BufAlloc(PGLOBAL g, const char *p, int n); |
143 | |
144 | // Constructor |
145 | XMLNODE(PXDOC dp); |
146 | |
147 | // Members |
148 | PXDOC Doc; |
149 | PXNODE Next; |
150 | PXNODE Children; |
151 | char *Buf; |
152 | int Len; |
153 | }; // end of class XMLNODE |
154 | |
155 | /******************************************************************/ |
156 | /* Declaration of XML node list. */ |
157 | /******************************************************************/ |
158 | class XMLNODELIST : public BLOCK { |
159 | public: |
160 | // Properties |
161 | virtual int GetLength(void) = 0; |
162 | virtual PXNODE GetItem(PGLOBAL, int, PXNODE = NULL) = 0; |
163 | virtual bool DropItem(PGLOBAL, int) = 0; |
164 | |
165 | protected: |
166 | // Constructor |
167 | XMLNODELIST(PXDOC dp) {Doc = dp;} |
168 | |
169 | // Members |
170 | PXDOC Doc; |
171 | }; // end of class XMLNODELIST |
172 | |
173 | /******************************************************************/ |
174 | /* Declaration of XML attribute. */ |
175 | /******************************************************************/ |
176 | class XMLATTRIBUTE : public BLOCK { |
177 | public: |
178 | // Properties |
179 | virtual char *GetName(PGLOBAL) = 0; |
180 | virtual PXATTR GetNext(PGLOBAL) = 0; |
181 | |
182 | // Methods |
183 | virtual RCODE GetText(PGLOBAL, char *, int) = 0; |
184 | virtual bool SetText(PGLOBAL, char *, int) = 0; |
185 | |
186 | protected: |
187 | // Constructor |
188 | XMLATTRIBUTE(PXDOC dp) {Doc = dp;} |
189 | |
190 | // Members |
191 | PXDOC Doc; |
192 | }; // end of class XMLATTRIBUTE |
193 | |
194 | |
195 | |