00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _CEGUIXMLSerializer_h_
00029 #define _CEGUIXMLSerializer_h_
00030 #include "CEGUIBase.h"
00031 #include "CEGUIString.h"
00032 #include <vector>
00033
00034 #if defined(_MSC_VER)
00035 # pragma warning(push)
00036 # pragma warning(disable : 4251)
00037 #endif
00038
00039
00040 namespace CEGUI
00041 {
00086 class CEGUIEXPORT XMLSerializer
00087 {
00088 public:
00097 XMLSerializer(OutStream& out, size_t indentSpace = 4);
00098
00102 virtual ~XMLSerializer(void);
00103
00112 XMLSerializer& openTag(const String& name);
00119 XMLSerializer& closeTag(void);
00130 XMLSerializer& attribute(const String& name, const String& value);
00139 XMLSerializer& text(const String& text);
00140
00148 unsigned int getTagCount() const;
00155 operator bool () const
00156 {
00157 return false == d_error;
00158 }
00165 bool operator!() const
00166 {
00167 return false != d_error;
00168 }
00169
00170 protected:
00171 private:
00172 bool d_error;
00173 unsigned int d_tagCount;
00174 size_t d_depth;
00175 size_t d_indentSpace;
00176 bool d_needClose;
00177 bool d_lastIsText;
00178 OutStream& d_stream;
00179 std::vector<String> d_tagStack;
00180
00184 void indentLine();
00188 static String convertEntityInText(const String& text);
00192 static String convertEntityInAttribute(const String& attributeValue);
00193
00194
00195
00196 XMLSerializer(const XMLSerializer& obj);
00197
00198 XMLSerializer& operator=(const XMLSerializer& obj);
00199 };
00200 }
00201
00202 #if defined(_MSC_VER)
00203 # pragma warning(pop)
00204 #endif
00205
00206 #endif