Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __VSDXMLPARSERBASE_H__
00011 #define __VSDXMLPARSERBASE_H__
00012
00013 #include <map>
00014 #include <stack>
00015 #include <string>
00016 #include <boost/optional.hpp>
00017 #include "VSDXMLHelper.h"
00018 #include "VSDCharacterList.h"
00019 #include "VSDParagraphList.h"
00020 #include "VSDShapeList.h"
00021 #include "VSDStencils.h"
00022
00023 namespace libvisio
00024 {
00025
00026 class VSDCollector;
00027 class XMLErrorWatcher;
00028
00029 class VSDXMLParserBase
00030 {
00031 public:
00032 explicit VSDXMLParserBase();
00033 virtual ~VSDXMLParserBase();
00034 virtual bool parseMain() = 0;
00035 virtual bool extractStencils() = 0;
00036
00037 protected:
00038
00039 VSDCollector *m_collector;
00040 VSDStencils m_stencils;
00041 VSDStencil *m_currentStencil;
00042 VSDShape m_shape;
00043 bool m_isStencilStarted;
00044 unsigned m_currentStencilID;
00045
00046 bool m_extractStencils;
00047 bool m_isInStyles;
00048 unsigned m_currentLevel;
00049 unsigned m_currentShapeLevel;
00050 std::map<unsigned, Colour> m_colours;
00051 VSDFieldList m_fieldList;
00052 VSDShapeList m_shapeList;
00053 librevenge::RVNGBinaryData m_currentBinaryData;
00054 std::stack<VSDShape> m_shapeStack;
00055 std::stack<unsigned> m_shapeLevelStack;
00056 bool m_isShapeStarted;
00057 bool m_isPageStarted;
00058 VSDGeometryList *m_currentGeometryList;
00059 unsigned m_currentGeometryListIndex;
00060
00061 std::map<unsigned, VSDName> m_fonts;
00062
00063 XMLErrorWatcher *m_watcher;
00064
00065
00066
00067 int readByteData(unsigned char &value, xmlTextReaderPtr reader);
00068 int readByteData(boost::optional<unsigned char> &value, xmlTextReaderPtr reader);
00069 int readUnsignedData(boost::optional<unsigned> &value, xmlTextReaderPtr reader);
00070 int readLongData(boost::optional<long> &value, xmlTextReaderPtr reader);
00071 int readLongData(long &value, xmlTextReaderPtr reader);
00072 int readDoubleData(boost::optional<double> &value, xmlTextReaderPtr reader);
00073 int readDoubleData(double &value, xmlTextReaderPtr reader);
00074 int readBoolData(boost::optional<bool> &value, xmlTextReaderPtr reader);
00075 int readBoolData(bool &value, xmlTextReaderPtr reader);
00076 int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader);
00077 int readExtendedColourData(Colour &value, xmlTextReaderPtr reader);
00078 int readExtendedColourData(boost::optional<Colour> &value, xmlTextReaderPtr reader);
00079 int readNURBSData(boost::optional<NURBSData> &data, xmlTextReaderPtr reader);
00080 int readPolylineData(boost::optional<PolylineData> &data, xmlTextReaderPtr reader);
00081
00082 virtual xmlChar *readStringData(xmlTextReaderPtr reader) = 0;
00083 unsigned getIX(xmlTextReaderPtr reader);
00084 virtual void _handleLevelChange(unsigned level);
00085 void _flushShape();
00086
00087 virtual int getElementToken(xmlTextReaderPtr reader) = 0;
00088 virtual int getElementDepth(xmlTextReaderPtr reader) = 0;
00089
00090
00091
00092 void readEllipticalArcTo(xmlTextReaderPtr reader);
00093 void readEllipse(xmlTextReaderPtr reader);
00094 void readGeometry(xmlTextReaderPtr reader);
00095 void readMoveTo(xmlTextReaderPtr reader);
00096 void readLineTo(xmlTextReaderPtr reader);
00097 void readArcTo(xmlTextReaderPtr reader);
00098 void readNURBSTo(xmlTextReaderPtr reader);
00099 void readPolylineTo(xmlTextReaderPtr reader);
00100 void readInfiniteLine(xmlTextReaderPtr reader);
00101 void readRelCubBezTo(xmlTextReaderPtr reader);
00102 void readRelEllipticalArcTo(xmlTextReaderPtr reader);
00103 void readRelLineTo(xmlTextReaderPtr reader);
00104 void readRelMoveTo(xmlTextReaderPtr reader);
00105 void readRelQuadBezTo(xmlTextReaderPtr reader);
00106 void readForeignData(xmlTextReaderPtr reader);
00107 virtual void getBinaryData(xmlTextReaderPtr reader) = 0;
00108 void readShape(xmlTextReaderPtr reader);
00109 void readColours(xmlTextReaderPtr reader);
00110 void readPage(xmlTextReaderPtr reader);
00111 void readText(xmlTextReaderPtr reader);
00112 void readCharIX(xmlTextReaderPtr reader);
00113 void readParaIX(xmlTextReaderPtr reader);
00114
00115 void readStyleSheet(xmlTextReaderPtr reader);
00116 void readPageSheet(xmlTextReaderPtr reader);
00117
00118 void readSplineStart(xmlTextReaderPtr reader);
00119 void readSplineKnot(xmlTextReaderPtr reader);
00120
00121 void readStencil(xmlTextReaderPtr reader);
00122
00123 void handlePagesStart(xmlTextReaderPtr reader);
00124 void handlePagesEnd(xmlTextReaderPtr reader);
00125 void handlePageStart(xmlTextReaderPtr reader);
00126 void handlePageEnd(xmlTextReaderPtr reader);
00127 void handleMastersStart(xmlTextReaderPtr reader);
00128 void handleMastersEnd(xmlTextReaderPtr reader);
00129 void handleMasterStart(xmlTextReaderPtr reader);
00130 void handleMasterEnd(xmlTextReaderPtr reader);
00131 void skipPages(xmlTextReaderPtr reader);
00132 void skipMasters(xmlTextReaderPtr reader);
00133
00134 private:
00135 VSDXMLParserBase(const VSDXMLParserBase &);
00136 VSDXMLParserBase &operator=(const VSDXMLParserBase &);
00137
00138 void initColours();
00139 };
00140
00141 }
00142
00143 #endif // __VSDXMLPARSERBASE_H__
00144