GizmoBase

gzXML.h

Go to the documentation of this file.
00001 // *****************************************************************************
00002 // File         : gzXmlSax.h
00003 // Module       : gzBase
00004 // Description  : Class definition of XML parser and utils
00005 // Author       : Anders Modén
00006 // Product      : GizmoBase 2.1.1
00007 //
00008 // Copyright © 2003- Saab Training Systems AB, Sweden
00009 //
00010 // NOTE:    GizmoBase is a platform abstraction utility layer for C++. It contains 
00011 //          design patterns and C++ solutions for the advanced programmer.
00012 //
00013 //
00014 // Revision History...
00015 //
00016 // Who  Date    Description
00017 //
00018 // AMO  050527  Created file
00019 //
00020 // ******************************************************************************
00021 
00022 #ifndef __GZ_XML_H__
00023 #define __GZ_XML_H__
00024 
00025 #include "gzLex.h"
00026 #include "gzObject.h"
00027 
00028 
00029 
00030 #define XML_READ_RULE(n)    GZ_BASE_EXPORT gzParseResult XML_read_##n()
00031 #define XML_READ_RULE_10    XML_READ_RULE(01);XML_READ_RULE(02);XML_READ_RULE(03);XML_READ_RULE(04);XML_READ_RULE(05);XML_READ_RULE(06);XML_READ_RULE(07);XML_READ_RULE(08);XML_READ_RULE(09);XML_READ_RULE(10);
00032 #define XML_READ_RULE_20    XML_READ_RULE(11);XML_READ_RULE(12);XML_READ_RULE(13);XML_READ_RULE(14);XML_READ_RULE(15);XML_READ_RULE(16);XML_READ_RULE(17);XML_READ_RULE(18);XML_READ_RULE(19);XML_READ_RULE(20);
00033 #define XML_READ_RULE_30    XML_READ_RULE(21);XML_READ_RULE(22);XML_READ_RULE(23);XML_READ_RULE(24);XML_READ_RULE(25);XML_READ_RULE(26);XML_READ_RULE(27);XML_READ_RULE(28);XML_READ_RULE(29);XML_READ_RULE(30);
00034 #define XML_READ_RULE_40    XML_READ_RULE(31);XML_READ_RULE(32);XML_READ_RULE(33);XML_READ_RULE(34);XML_READ_RULE(35);XML_READ_RULE(36);XML_READ_RULE(37);XML_READ_RULE(38);XML_READ_RULE(39);XML_READ_RULE(40);
00035 #define XML_READ_RULE_50    XML_READ_RULE(41);XML_READ_RULE(42);XML_READ_RULE(43);XML_READ_RULE(45);XML_READ_RULE(46);XML_READ_RULE(47);XML_READ_RULE(48);XML_READ_RULE(49);XML_READ_RULE(50);
00036 #define XML_READ_RULE_60    XML_READ_RULE(51);XML_READ_RULE(52);XML_READ_RULE(53);XML_READ_RULE(54);XML_READ_RULE(55);XML_READ_RULE(56);XML_READ_RULE(57);XML_READ_RULE(58);XML_READ_RULE(59);XML_READ_RULE(60);
00037 #define XML_READ_RULE_70    XML_READ_RULE(61);XML_READ_RULE(62);XML_READ_RULE(63);XML_READ_RULE(64);XML_READ_RULE(65);XML_READ_RULE(66);XML_READ_RULE(67);XML_READ_RULE(68);XML_READ_RULE(69);XML_READ_RULE(70);
00038 #define XML_READ_RULE_80    XML_READ_RULE(71);XML_READ_RULE(72);XML_READ_RULE(73);XML_READ_RULE(74);XML_READ_RULE(75);XML_READ_RULE(76);XML_READ_RULE(77);XML_READ_RULE(78);XML_READ_RULE(79);XML_READ_RULE(80);
00039 #define XML_READ_RULE_90    XML_READ_RULE(81);XML_READ_RULE(82);XML_READ_RULE(83);XML_READ_RULE(84);XML_READ_RULE(85);XML_READ_RULE(86);XML_READ_RULE(87);XML_READ_RULE(88);XML_READ_RULE(89);XML_READ_RULE(90);
00040 #define XML_READ_RULE_100   XML_READ_RULE(91);XML_READ_RULE(92);XML_READ_RULE(93);
00041 #define XML_READ_RULES      XML_READ_RULE_10 XML_READ_RULE_20 XML_READ_RULE_30 XML_READ_RULE_40 XML_READ_RULE_50 XML_READ_RULE_60 XML_READ_RULE_70 XML_READ_RULE_80 XML_READ_RULE_90 XML_READ_RULE_100
00042 
00043 
00044 enum gzXmlItemType
00045 {
00046     XML_ITEM_ELEMENT                =   1<<0,
00047     XML_ITEM_ELEMENT_CONTENTS       =   1<<1,
00048     XML_ITEM_ATTRIBUTE              =   1<<2,
00049     XML_ITEM_ELEMENT_ATTRIBUTE_END  =   1<<3,
00050     XML_ITEM_HEADER                 =   1<<4,
00051     XML_ITEM_CHAR_DATA              =   1<<5,
00052     XML_ITEM_CDATA                  =   1<<6,
00053     XML_ITEM_COMMENT                =   1<<7,
00054     XML_ITEM_PI                     =   1<<8,
00055     XML_ITEM_DEFAULT                =   XML_ITEM_ELEMENT|XML_ITEM_ATTRIBUTE|XML_ITEM_HEADER|XML_ITEM_CHAR_DATA|XML_ITEM_CDATA|XML_ITEM_COMMENT|XML_ITEM_PI
00056 };
00057 
00058 enum gzXmlWriteState
00059 {
00060     XML_WRITE_STATE_IDLE,
00061     XML_WRITE_STATE_DTD,
00062     XML_WRITE_STATE_ELEMENT,
00063     XML_WRITE_STATE_ELEMENT_CONTENTS,
00064     XML_WRITE_STATE_ELEMENT_START,
00065     XML_WRITE_STATE_ELEMENT_END,
00066     XML_WRITE_STATE_ATTRIBUTE,
00067 };
00068 
00069 GZ_USE_BIT_LOGIC(gzXmlItemType);    // So you can combine types
00070 
00071 class gzXmlDynamicTypeInterface;    // Forward decl
00072 class gzXmlObjectInterface;         // Forward decl
00073 class gzXmlCustomDataInterface;     // Forward decl
00074 
00075 // Some defined PIs
00076 const gzString XML_PI_INCLUDE   = "include";
00077 
00078 //******************************************************************************
00079 // Class    : gzXmlSax
00080 //                                  
00081 // Purpose  : Basic SAX callback interface for XML parser 
00082 //                                  
00083 // Notes    : - 
00084 //                                  
00085 // Revision History...                          
00086 //                                  
00087 // Who  Date    Description                     
00088 //                                  
00089 // AMO  050108  Created 
00090 //                                  
00091 //******************************************************************************
00092 class gzXmlSax : public gzBasicParser , public gzSerializeData
00093 {
00094 public:
00095 
00096     GZ_BASE_EXPORT gzXmlSax();
00097     GZ_BASE_EXPORT virtual ~gzXmlSax();
00098 
00099     GZ_BASE_EXPORT virtual gzVoid   write(gzSerializeAdapter *adapter);
00100     GZ_BASE_EXPORT virtual gzVoid   read(gzSerializeAdapter *adapter);
00101     GZ_BASE_EXPORT virtual gzVoid   pushBack(gzSerializeAdapter *adapter);
00102     GZ_BASE_EXPORT virtual gzULong  getDataSize(gzSerializeAdapter *adapter=NULL) const;
00103 
00104     // Dynamic Type custom parsers
00105     GZ_BASE_EXPORT static gzVoid    registerDynamicTypeInterface(const gzString &typeName , gzXmlDynamicTypeInterface *iface);
00106     GZ_BASE_EXPORT static gzVoid    unregisterDynamicTypeInterface(gzXmlDynamicTypeInterface *iface);
00107     GZ_BASE_EXPORT static gzXmlDynamicTypeInterface *getDynamicTypeInterface(const gzString &type);
00108 
00109     // Object custom parsers
00110     GZ_BASE_EXPORT static gzVoid    registerObjectInterface(const gzString &typeName , gzXmlObjectInterface *iface);
00111     GZ_BASE_EXPORT static gzVoid    unregisterObjectInterface(gzXmlObjectInterface *iface);
00112     GZ_BASE_EXPORT static gzXmlObjectInterface *getObjectInterface(const gzString &typeName);
00113 
00114     // Custom data parsers
00115     GZ_BASE_EXPORT static gzVoid    registerCustomDataInterface(const gzString &typeName , gzXmlCustomDataInterface *iface);
00116     GZ_BASE_EXPORT static gzVoid    unregisterCustomDataInterface(gzXmlCustomDataInterface *iface);
00117     GZ_BASE_EXPORT static gzXmlCustomDataInterface *getCustomDataInterface(const gzString &typeName);
00118 
00119 
00120     // Control notifications
00121     GZ_BASE_EXPORT gzVoid   enableNotifyItemType(gzXmlItemType types=XML_ITEM_DEFAULT);
00122     GZ_BASE_EXPORT gzVoid   disableNotifyItemType(gzXmlItemType types);
00123 
00124     GZ_BASE_EXPORT gzBool   isNotifyingItemType(gzXmlItemType type);
00125 
00126     // Get some properties
00127     GZ_BASE_EXPORT const gzString & getVersion();
00128     GZ_BASE_EXPORT const gzString & getEncoding();
00129     GZ_BASE_EXPORT gzBool           isStandalone();
00130     GZ_BASE_EXPORT gzBool           isPlainOutput();
00131 
00132     // Set some properties
00133     GZ_BASE_EXPORT gzVoid   setVersion(const gzString &version);
00134     GZ_BASE_EXPORT gzVoid   setEncoding(const gzString &encoding);
00135     GZ_BASE_EXPORT gzVoid   setStandalone(gzBool standalone);
00136     GZ_BASE_EXPORT gzVoid   setPlainOutput(gzBool plain);
00137 
00138 
00139     // Virtual callbacks for SAX alike parsing
00140 
00141     // Header part
00142     GZ_BASE_EXPORT virtual  gzBool onVersion(const gzString &version){return TRUE;}
00143     GZ_BASE_EXPORT virtual  gzBool onEncoding(const gzString &encoding){return TRUE;}
00144     GZ_BASE_EXPORT virtual  gzBool onStandalone(gzBool standalone){return TRUE;}
00145 
00146     // Element part
00147     GZ_BASE_EXPORT virtual  gzBool onElementStart(const gzString &elementName,gzULong level){return TRUE;}
00148     GZ_BASE_EXPORT virtual  gzBool onElementAttributeEnd(const gzString &elementName,gzULong level){return TRUE;}
00149     GZ_BASE_EXPORT virtual  gzBool onElementContents(const gzString &contents,gzULong level){return TRUE;}
00150     GZ_BASE_EXPORT virtual  gzBool onElementEnd(const gzString &elementName,gzULong level){return TRUE;}
00151     GZ_BASE_EXPORT virtual  gzBool onAttribute(const gzString &attributeName,const gzString &attributeValue,gzULong level){return TRUE;}
00152     GZ_BASE_EXPORT virtual  gzBool onCharData(const gzString &charData,gzULong level){return TRUE;}
00153     GZ_BASE_EXPORT virtual  gzBool onProcessingInstruction(const gzString &target,const gzString &data,gzULong level){return TRUE;}
00154     GZ_BASE_EXPORT virtual  gzBool onCDATA(const gzString &CDATA,gzULong level){return TRUE;}
00155     GZ_BASE_EXPORT virtual  gzBool onComment(const gzString &comment,gzULong level){return TRUE;}
00156     GZ_BASE_EXPORT virtual  gzBool onDynamicType(const gzDynamicType &data,const gzString &name,gzULong level){return TRUE;}
00157     GZ_BASE_EXPORT virtual  gzBool onObject(gzObject *object,const gzString &name,gzULong level){return TRUE;}
00158     GZ_BASE_EXPORT virtual  gzBool onCustomData(gzReference *data,const gzString &elementName,gzULong level){return TRUE;}
00159     
00160     // Virtual callbacks for Writing
00161 
00162     GZ_BASE_EXPORT virtual  gzVoid  onWrite(){};
00163 
00164     // Write Control
00165 
00166     GZ_BASE_EXPORT  gzVoid  writeXmlHeader();
00167     GZ_BASE_EXPORT  gzVoid  writeElementStart(const gzString &elementName);
00168     GZ_BASE_EXPORT  gzVoid  writeAttribute(const gzString &attributeName,const gzString &attributeValue);
00169     GZ_BASE_EXPORT  gzVoid  writeElementEnd();
00170     GZ_BASE_EXPORT  gzVoid  writeCharData(const gzString &charData);
00171     GZ_BASE_EXPORT  gzVoid  writePI(const gzString &target,const gzString &data);
00172     GZ_BASE_EXPORT  gzVoid  writeCDATA(const gzString &CDATA);
00173     GZ_BASE_EXPORT  gzVoid  writeDynamicType(const gzDynamicType &data,const gzString &attribName=GZ_EMPTY_STRING);
00174     GZ_BASE_EXPORT  gzVoid  writeObject(const gzObject *object,const gzString &objectName=GZ_EMPTY_STRING);
00175     GZ_BASE_EXPORT  gzVoid  writeComment(const gzString &comment);
00176     GZ_BASE_EXPORT  gzVoid  writeCustomData(const gzString &elementName,const gzReference *data);
00177     GZ_BASE_EXPORT  gzVoid  writeCharDataElement(const gzString &elementName,const gzString &elementData);
00178 
00179     // Utilities for parsing
00180     
00181     GZ_BASE_EXPORT gzString getCurrentAttribute(const gzString &attributeName);
00182 
00183     XML_READ_RULES;
00184 
00185     GZ_BASE_EXPORT  gzVoid  beginElementContents();
00186 
00187     GZ_BASE_EXPORT  gzBool  useBase64();
00188     GZ_BASE_EXPORT  gzVoid  useBase64(gzBool on);
00189 
00190     GZ_BASE_EXPORT gzString                                 getCurrentElementName();
00191     GZ_BASE_EXPORT gzRefDict<gzString,gzRefData<gzString> > getCurrentAttributeSet();
00192 
00193 private:
00194 
00195     gzString    getItemStartString(gzULong level);
00196 
00197     // Current values
00198     gzDynamicArray<gzString>    m_currentElement;
00199     gzString                    m_currentVersion;
00200     gzString                    m_currentEncoding;
00201     
00202     gzXmlItemType               m_notifyTypes;
00203 
00204     gzULong                     m_elementLevel;
00205 
00206     gzBool                      m_isStandalone:1;
00207     gzBool                      m_writeUnicode:1;
00208     gzBool                      m_gotBase64Attribute:1;
00209     gzBool                      m_gotHexAttribute:1;
00210     gzBool                      m_useBase64:1;
00211     gzBool                      m_plainOutput:1;
00212 
00213     gzXmlWriteState             m_state;
00214     
00215     gzDynamicArray<gzRefDict<gzString,gzRefData<gzString> > >   m_currentAttributes;
00216 
00217 };
00218 
00219 const gzDebugFlags GZ_DEBUG_XML_HIERARCHY   =(gzDebugFlags)(1<<0);
00220 const gzDebugFlags GZ_DEBUG_XML_ATTRIBUTES  =(gzDebugFlags)(1<<1);
00221 const gzDebugFlags GZ_DEBUG_XML_CHAR_DATA   =(gzDebugFlags)(1<<2);
00222 const gzDebugFlags GZ_DEBUG_XML_CDATA       =(gzDebugFlags)(1<<3);
00223 const gzDebugFlags GZ_DEBUG_XML_PI_DATA     =(gzDebugFlags)(1<<4);
00224 
00225 
00226 //******************************************************************************
00227 // Class    : gzXmlItem
00228 //                                  
00229 // Purpose  : Base item class 
00230 //                                  
00231 // Notes    : - 
00232 //                                  
00233 // Revision History...                          
00234 //                                  
00235 // Who  Date    Description                     
00236 //                                  
00237 // AMO  050108  Created 
00238 //                                  
00239 //******************************************************************************
00240 class gzXmlItem : public gzReference , public gzNameInterface , public gzDebugInterface
00241 {
00242 public:
00243     GZ_BASE_EXPORT gzXmlItem(const gzString &name);
00244     GZ_BASE_EXPORT gzXmlItem(const gzXmlItem &copy);
00245     GZ_BASE_EXPORT virtual ~gzXmlItem();
00246 
00247     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00248     
00249     GZ_BASE_EXPORT gzVoid addChild(gzXmlItem *child);
00250     GZ_BASE_EXPORT gzVoid removeChild(gzXmlItem *child);
00251     GZ_BASE_EXPORT gzVoid removeChildren();
00252     
00253     GZ_BASE_EXPORT gzXmlItem *  getParent();
00254     GZ_BASE_EXPORT gzXmlItem *  getNextChild();
00255     GZ_BASE_EXPORT gzVoid       resetChildIterator();
00256 
00257     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00258     
00260     GZ_BASE_EXPORT virtual gzXmlItem *findItem(const gzString &path);
00261 
00262     // Add a item at path location
00263     GZ_BASE_EXPORT virtual gzVoid addItem(const gzString &path,gzXmlItem *item);
00264 
00265     GZ_BASE_EXPORT virtual gzULong indexEvalExpression(const gzString &item,const gzString &expression);
00266 
00267     // -------------- gzDebugInterface ----------------------------------
00268     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00269     GZ_BASE_EXPORT virtual  gzVoid  debugOutputTraverse(gzString base , gzString anchor , gzDebugFlags features);
00270 
00271 
00272 
00273 private:
00274     
00275     gzXmlItem *                 m_parent;
00276     gzRefList<gzXmlItem>        m_childList;
00277     gzListIterator<gzXmlItem>   m_iterator;
00278 };
00279 
00280 //******************************************************************************
00281 // Class    : gzXmlElement
00282 //                                  
00283 // Purpose  : Element item class 
00284 //                                  
00285 // Notes    : - 
00286 //                                  
00287 // Revision History...                          
00288 //                                  
00289 // Who  Date    Description                     
00290 //                                  
00291 // AMO  050108  Created 
00292 //                                  
00293 //******************************************************************************
00294 class gzXmlElement : public gzXmlItem
00295 {
00296 public:
00297     GZ_BASE_EXPORT gzXmlElement(const gzString &name);
00298     GZ_BASE_EXPORT virtual ~gzXmlElement();
00299 
00300     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00301 
00302     GZ_BASE_EXPORT  gzVoid      setAttribute(const gzString &name,const gzString &value);
00303     GZ_BASE_EXPORT  gzString    getAttribute(const gzString &name,const gzString &defaultValue=GZ_EMPTY_STRING);
00304     GZ_BASE_EXPORT  gzBool      hasAttribute(const gzString &name);
00305 
00306     GZ_BASE_EXPORT  gzBool  getNextAttribute(gzString &data);
00307     GZ_BASE_EXPORT  gzVoid  resetAttributeIterator();
00308     
00309     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00310 
00311     // -------------- gzDebugInterface ----------------------------------
00312     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00313 
00314 private:
00315 
00316     gzRefDict<gzString,gzRefData<gzString> >        m_attributes;
00317     gzDictIterator<gzString,gzRefData<gzString> >   m_iterator;
00318 
00319 };
00320 
00321 //******************************************************************************
00322 // Class    : gzXmlCharData
00323 //                                  
00324 // Purpose  : Char Data item class 
00325 //                                  
00326 // Notes    : - 
00327 //                                  
00328 // Revision History...                          
00329 //                                  
00330 // Who  Date    Description                     
00331 //                                  
00332 // AMO  050108  Created 
00333 //                                  
00334 //******************************************************************************
00335 class gzXmlCharData : public gzXmlItem
00336 {
00337 public:
00338     GZ_BASE_EXPORT gzXmlCharData();
00339     GZ_BASE_EXPORT virtual ~gzXmlCharData();
00340 
00341     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00342 
00343     GZ_BASE_EXPORT  gzVoid              setCharData(const gzString &data);
00344     GZ_BASE_EXPORT  const gzString &    getCharData();
00345 
00346     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00347 
00348     // -------------- gzDebugInterface ----------------------------------
00349     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00350 
00351 private:
00352 
00353     gzString    m_charData;
00354 };
00355 
00356 
00357 //******************************************************************************
00358 // Class    : gzXmlPI
00359 //                                  
00360 // Purpose  : Processing Instruction (PI) item class 
00361 //                                  
00362 // Notes    : - 
00363 //                                  
00364 // Revision History...                          
00365 //                                  
00366 // Who  Date    Description                     
00367 //                                  
00368 // AMO  071120  Created 
00369 //                                  
00370 //******************************************************************************
00371 class gzXmlPI : public gzXmlItem
00372 {
00373 public:
00374     GZ_BASE_EXPORT gzXmlPI();
00375     GZ_BASE_EXPORT virtual ~gzXmlPI();
00376 
00377     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00378 
00379     GZ_BASE_EXPORT  gzVoid              setTarget(const gzString &target);
00380     GZ_BASE_EXPORT  const gzString &    getTarget();
00381 
00382     GZ_BASE_EXPORT  gzVoid              setData(const gzString &data);
00383     GZ_BASE_EXPORT  const gzString &    getData();
00384 
00385     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00386 
00387     // -------------- gzDebugInterface ----------------------------------
00388     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00389 
00390 private:
00391 
00392     gzString    m_target;
00393     gzString    m_data;
00394 };
00395 
00396 //******************************************************************************
00397 // Class    : gzXmlCDATA
00398 //                                  
00399 // Purpose  : CDATA item class 
00400 //                                  
00401 // Notes    : - 
00402 //                                  
00403 // Revision History...                          
00404 //                                  
00405 // Who  Date    Description                     
00406 //                                  
00407 // AMO  050108  Created 
00408 //                                  
00409 //******************************************************************************
00410 class gzXmlCDATA : public gzXmlItem
00411 {
00412 public:
00413     GZ_BASE_EXPORT gzXmlCDATA();
00414     GZ_BASE_EXPORT virtual ~gzXmlCDATA();
00415 
00416     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00417 
00418     GZ_BASE_EXPORT  gzVoid              setCDATA(const gzString &data);
00419     GZ_BASE_EXPORT  const gzString &    getCDATA();
00420 
00421     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00422 
00423     // -------------- gzDebugInterface ----------------------------------
00424     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00425 
00426 private:
00427 
00428     gzString    m_CDATA;
00429 };
00430 
00431 //******************************************************************************
00432 // Class    : gzXmlComment
00433 //                                  
00434 // Purpose  : Comment item class 
00435 //                                  
00436 // Notes    : - 
00437 //                                  
00438 // Revision History...                          
00439 //                                  
00440 // Who  Date    Description                     
00441 //                                  
00442 // AMO  050108  Created 
00443 //                                  
00444 //******************************************************************************
00445 class gzXmlComment : public gzXmlItem
00446 {
00447 public:
00448     GZ_BASE_EXPORT gzXmlComment();
00449     GZ_BASE_EXPORT virtual ~gzXmlComment();
00450 
00451     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00452 
00453     GZ_BASE_EXPORT  gzVoid              setComment(const gzString &data);
00454     GZ_BASE_EXPORT  const gzString &    getComment();
00455 
00456     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00457 
00458     // -------------- gzDebugInterface ----------------------------------
00459     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00460 
00461 private:
00462 
00463     gzString    m_comment;
00464 };
00465 
00466 //******************************************************************************
00467 // Class    : gzXmlDynamicType
00468 //                                  
00469 // Purpose  : gzDynamicType item class 
00470 //                                  
00471 // Notes    : - 
00472 //                                  
00473 // Revision History...                          
00474 //                                  
00475 // Who  Date    Description                     
00476 //                                  
00477 // AMO  050108  Created 
00478 //                                  
00479 //******************************************************************************
00480 class gzXmlDynamicType : public gzXmlItem
00481 {
00482 public:
00483     GZ_BASE_EXPORT gzXmlDynamicType(const gzString &name);
00484     GZ_BASE_EXPORT virtual ~gzXmlDynamicType();
00485 
00486     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00487 
00488     GZ_BASE_EXPORT  gzVoid                  setDynamicType(const gzDynamicType &data);
00489     GZ_BASE_EXPORT  const gzDynamicType &   getDynamicType();
00490 
00491     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00492 
00493     // -------------- gzDebugInterface ----------------------------------
00494     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00495 
00496 private:
00497 
00498     gzDynamicType   m_data;
00499 };
00500 
00501 //******************************************************************************
00502 // Class    : gzXmlObject
00503 //                                  
00504 // Purpose  : gzObject item class 
00505 //                                  
00506 // Notes    : - 
00507 //                                  
00508 // Revision History...                          
00509 //                                  
00510 // Who  Date    Description                     
00511 //                                  
00512 // AMO  050108  Created 
00513 //                                  
00514 //******************************************************************************
00515 class gzXmlObject : public gzXmlItem
00516 {
00517 public:
00518     GZ_BASE_EXPORT gzXmlObject(const gzString &name);
00519     GZ_BASE_EXPORT virtual ~gzXmlObject();
00520 
00521     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00522 
00523     GZ_BASE_EXPORT  gzVoid      setObject(gzObject *object);
00524     GZ_BASE_EXPORT  gzObject *  getObject();
00525 
00526     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00527 
00528     // -------------- gzDebugInterface ----------------------------------
00529     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00530 
00531 private:
00532 
00533     gzRefPointer<gzObject>  m_object;
00534 };
00535 
00536 //******************************************************************************
00537 // Class    : gzXmlCustomData
00538 //                                  
00539 // Purpose  : gzReference custom item class 
00540 //                                  
00541 // Notes    : - 
00542 //                                  
00543 // Revision History...                          
00544 //                                  
00545 // Who  Date    Description                     
00546 //                                  
00547 // AMO  070108  Created 
00548 //                                  
00549 //******************************************************************************
00550 class gzXmlCustomData : public gzXmlElement
00551 {
00552 public:
00553     GZ_BASE_EXPORT gzXmlCustomData(const gzString &name);
00554     GZ_BASE_EXPORT gzXmlCustomData(const gzXmlElement &copy);
00555     GZ_BASE_EXPORT virtual ~gzXmlCustomData();
00556 
00557     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00558 
00559     GZ_PROPERTY_EXPORT(gzRefPointer<gzReference>,   Data,           GZ_BASE_EXPORT);
00560 
00561     GZ_BASE_EXPORT virtual gzVoid write(gzXmlSax *writer);
00562 
00563     // -------------- gzDebugInterface ----------------------------------
00564     GZ_BASE_EXPORT virtual  gzVoid  debugOutput(gzString base , gzString anchor , gzDebugFlags features);
00565 };
00566 
00567 
00568 //******************************************************************************
00569 // Class    : gzXmlDom
00570 //                                  
00571 // Purpose  : Basic object model for Gizmo XML parser 
00572 //                                  
00573 // Notes    : - 
00574 //                                  
00575 // Revision History...                          
00576 //                                  
00577 // Who  Date    Description                     
00578 //                                  
00579 // AMO  050108  Created 
00580 //                                  
00581 //******************************************************************************
00582 class gzXmlDom : public gzXmlSax , public gzXmlItem
00583 {
00584 public:
00585 
00586     GZ_BASE_EXPORT  gzXmlDom();
00587     GZ_BASE_EXPORT  virtual ~gzXmlDom();
00588 
00589     GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_BASE_EXPORT);   // RTTI
00590     
00591     GZ_BASE_EXPORT virtual gzVoid   write(gzSerializeAdapter *adapter);
00592     GZ_BASE_EXPORT virtual gzVoid   read(gzSerializeAdapter *adapter);
00593     GZ_BASE_EXPORT virtual gzVoid   pushBack(gzSerializeAdapter *adapter);
00594     GZ_BASE_EXPORT virtual gzULong  getDataSize(gzSerializeAdapter *adapter=NULL) const;
00595     
00596     // Header part
00597     GZ_BASE_EXPORT virtual  gzBool onVersion(const gzString &version);
00598     GZ_BASE_EXPORT virtual  gzBool onEncoding(const gzString &encoding);
00599     GZ_BASE_EXPORT virtual  gzBool onStandalone(gzBool standalone);
00600 
00601     // Element part
00602     GZ_BASE_EXPORT virtual  gzBool onElementStart(const gzString &elementName,gzULong level);
00603     GZ_BASE_EXPORT virtual  gzBool onElementContents(const gzString &contents,gzULong level);
00604     GZ_BASE_EXPORT virtual  gzBool onElementEnd(const gzString &elementName,gzULong level);
00605     GZ_BASE_EXPORT virtual  gzBool onAttribute(const gzString &attributeName,const gzString &attributeValue,gzULong level);
00606     GZ_BASE_EXPORT virtual  gzBool onCharData(const gzString &charData,gzULong level);
00607     GZ_BASE_EXPORT virtual  gzBool onCDATA(const gzString &CDATA,gzULong level);
00608     GZ_BASE_EXPORT virtual  gzBool onProcessingInstruction(const gzString &target,const gzString &data,gzULong level);
00609     GZ_BASE_EXPORT virtual  gzBool onComment(const gzString &comment,gzULong level);
00610     GZ_BASE_EXPORT virtual  gzBool onDynamicType(const gzDynamicType &data,const gzString &name,gzULong level);
00611     GZ_BASE_EXPORT virtual  gzBool onObject(gzObject *object,const gzString &name,gzULong level);
00612     GZ_BASE_EXPORT virtual  gzBool onCustomData(gzReference *data,const gzString &elementName,gzULong level);
00613 
00614     GZ_PROPERTY_EXPORT(gzBool,      SkipWhiteSpaceCharData,     GZ_BASE_EXPORT);    
00615     GZ_PROPERTY_EXPORT(gzBool,      WriteIncludedXml,           GZ_BASE_EXPORT);    
00616     GZ_PROPERTY_EXPORT(gzBool,      ReadIncludedXml,            GZ_BASE_EXPORT);    
00617     
00618     // Virtual callbacks for Writing
00619 
00620     GZ_BASE_EXPORT virtual  gzVoid  onWrite();
00621     GZ_BASE_EXPORT virtual  gzVoid write(gzXmlSax *writer);
00622 
00623 private:
00624 
00625     gzDynamicArray<gzRefPointer<gzXmlItem> >    m_itemStack;
00626 
00627 };
00628 
00629 
00630 //******************************************************************************
00631 // Class    : gzXmlDynamicTypeInterface
00632 //                                  
00633 // Purpose  : Base class for dynamic type parsers 
00634 //                                  
00635 // Notes    : - 
00636 //                                  
00637 // Revision History...                          
00638 //                                  
00639 // Who  Date    Description                     
00640 //                                  
00641 // AMO  050108  Created 
00642 //                                  
00643 //******************************************************************************
00644 class GZ_BASE_EXPORT gzXmlDynamicTypeInterface : public gzReference
00645 {
00646 public:
00647     gzXmlDynamicTypeInterface(){};
00648     virtual ~gzXmlDynamicTypeInterface(){};
00649 
00650     virtual gzParseResult   read(gzXmlSax *sax,const gzString &type,gzDynamicType &value)=0;
00651 
00652     virtual gzVoid          write(gzXmlSax *sax,const gzDynamicType &data)=0;
00653 
00654     virtual gzULong         getDataSize(gzXmlSax *sax,const gzDynamicType &data) const=0;
00655 };
00656 
00657 //******************************************************************************
00658 // Class    : gzXmlObjectInterface
00659 //                                  
00660 // Purpose  : Base class for object parsers 
00661 //                                  
00662 // Notes    : - 
00663 //                                  
00664 // Revision History...                          
00665 //                                  
00666 // Who  Date    Description                     
00667 //                                  
00668 // AMO  050108  Created 
00669 //                                  
00670 //******************************************************************************
00671 class GZ_BASE_EXPORT gzXmlObjectInterface : public gzReference
00672 {
00673 public:
00674     gzXmlObjectInterface(){};
00675     virtual ~gzXmlObjectInterface(){};
00676 
00677     virtual gzParseResult   read(gzXmlSax *sax,const gzString &type,gzRefPointer<gzObject> &value)=0;
00678 
00679     virtual gzVoid          write(gzXmlSax *sax,const gzObject *object)=0;
00680 
00681     virtual gzULong         getDataSize(gzXmlSax *sax,const gzObject *object) const=0;
00682 };
00683 
00684 //******************************************************************************
00685 // Class    : gzXmlCustomDataInterface
00686 //                                  
00687 // Purpose  : Base class for element parsers 
00688 //                                  
00689 // Notes    : - 
00690 //                                  
00691 // Revision History...                          
00692 //                                  
00693 // Who  Date    Description                     
00694 //                                  
00695 // AMO  050108  Created 
00696 //                                  
00697 //******************************************************************************
00698 class GZ_BASE_EXPORT gzXmlCustomDataInterface : public gzReference
00699 {
00700 public:
00701     gzXmlCustomDataInterface(){};
00702     virtual ~gzXmlCustomDataInterface(){};
00703 
00704     virtual gzParseResult   read(gzXmlSax *sax,gzRefPointer<gzReference> &value)=0;
00705 
00706     virtual gzVoid          write(gzXmlSax *sax,const gzReference *data)=0;
00707 
00708     virtual gzULong         getDataSize(gzXmlSax *sax,const gzReference *data) const=0;
00709 };
00710 
00711 
00712 
00713 const gzString GZ_XML_NAME_CHAR_DATA    =   "<char_data>";
00714 const gzString GZ_XML_NAME_CDATA        =   "<cdata>";
00715 const gzString GZ_XML_NAME_COMMENT      =   "<comment>";
<