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