00001 00002 00003 #ifndef __XML_H 00004 #define __XML_H 00005 00006 #include "GFile.h" 00007 #include "GContainers.h" 00008 00010 class Xml; 00011 00013 class XmlValue 00014 { 00015 public: 00016 char *Name; 00017 char *Value; 00018 int OwnName:1; 00019 int OwnValue:1; 00020 00021 XmlValue(Xml *x); 00022 XmlValue(Xml *x, char *&s); 00023 ~XmlValue(); 00024 }; 00025 00027 class XmlTag 00028 { 00029 Xml *X; 00030 00031 public: 00033 char *Name; 00034 00036 List<XmlValue> Values; 00037 00038 XmlTag(); 00039 XmlTag(Xml *x, char *&s); 00040 ~XmlTag(); 00041 00043 bool Get(char *Name, char *&Value); 00045 bool Set(char *Name, char *Value); 00046 }; 00047 00049 class Xml 00050 { 00051 friend class XmlTag; 00052 friend class XmlValue; 00053 00054 protected: 00055 int Length; 00056 char *Data; 00057 char *End; 00058 char *GetStr(char *Start, int Len); 00059 00060 bool FileToData(GFile &f); 00061 virtual bool ProcessTag(GStringPipe &p, XmlTag *Tag) { return false; } 00062 00063 public: 00065 List<XmlTag> Values; 00066 int CursorX, CursorY; 00067 00068 Xml(); 00069 virtual ~Xml(); 00070 00071 void Empty(); 00072 00074 int ParseXmlFile(char *FileName, int Flags = 0); 00076 int ParseXmlFile(GFile &File, int Flags = 0); 00078 int ParseXml(char *Data, int Flags = 0); 00079 char *NewStrFromXmlFile(GFile &File); 00080 char *NewStrFromXmlFile(char *FileName); 00081 virtual bool ExpandXml(GStringPipe &p, char *s); 00082 }; 00083 00084 #endif 00085