00001 #ifndef SDXXMLSTREAMREADER_H
00002 #define SDXXMLSTREAMREADER_H
00003
00004
00005 #include <string>
00006 #include <istream>
00007 #include <stack>
00008
00009 #include "SDXStreamReader.h"
00010
00011 namespace SDX {
00012 namespace Formats {
00046 class XmlStreamReader : public SDX::Helpers::StreamReader {
00047 public:
00051 enum TrimMode {
00052 Lines,
00053 LinesAndNewlines
00054 };
00055 public:
00059 XmlStreamReader(std::istream* iStream = 0, SDX::ContentHandler* contentHandler = 0);
00060
00065 void setInsertTextNodeOnText(bool);
00066
00070 void setTrimMode(TrimMode);
00071
00075 void setParseMetaTag(bool);
00076 private:
00077 void startProcessing();
00078 bool processLine(std::string& line);
00079
00080 bool stripWhitespace(std::string& line);
00081 size_t findNextQuote(std::string& line);
00082
00083 bool m_insertTextNodeOnText;
00084 bool m_inTag;
00085 bool m_inMetaTag;
00086 bool m_hasMetaTag;
00087 bool m_sendMetaTag;
00088 bool m_inComment;
00089 bool m_inCDATA;
00090 std::string m_curText;
00091
00092 TrimMode m_trimMode;
00093
00094 std::stack<std::string> m_nodeStack;
00095 };
00096 }
00097 }
00098
00099 #endif
00100
00101