VSDXMLParserBase.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libvisio project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef __VSDXMLPARSERBASE_H__
11 #define __VSDXMLPARSERBASE_H__
12 
13 #include <map>
14 #include <memory>
15 #include <stack>
16 #include <string>
17 #include <boost/optional.hpp>
18 #include "VSDXMLHelper.h"
19 #include "VSDCharacterList.h"
20 #include "VSDParagraphList.h"
21 #include "VSDShapeList.h"
22 #include "VSDStencils.h"
23 
24 namespace libvisio
25 {
26 
27 class VSDCollector;
28 class XMLErrorWatcher;
29 
31 {
32 public:
33  explicit VSDXMLParserBase();
34  virtual ~VSDXMLParserBase();
35  virtual bool parseMain() = 0;
36  virtual bool extractStencils() = 0;
37 
38 protected:
39  // Protected data
42  std::unique_ptr<VSDStencil> m_currentStencil;
46 
49  unsigned m_currentLevel;
51  std::map<unsigned, Colour> m_colours;
54  librevenge::RVNGBinaryData m_currentBinaryData;
55  std::stack<VSDShape> m_shapeStack;
56  std::stack<unsigned> m_shapeLevelStack;
61 
62  std::map<unsigned, VSDName> m_fonts;
63 
64  std::map<unsigned, VSDTabStop> *m_currentTabSet;
65 
67 
68  // Helper functions
69 
70  int readByteData(unsigned char &value, xmlTextReaderPtr reader);
71  int readByteData(boost::optional<unsigned char> &value, xmlTextReaderPtr reader);
72  int readUnsignedData(boost::optional<unsigned> &value, xmlTextReaderPtr reader);
73  int readLongData(boost::optional<long> &value, xmlTextReaderPtr reader);
74  int readLongData(long &value, xmlTextReaderPtr reader);
75  int readDoubleData(boost::optional<double> &value, xmlTextReaderPtr reader);
76  int readDoubleData(double &value, xmlTextReaderPtr reader);
77  int readBoolData(boost::optional<bool> &value, xmlTextReaderPtr reader);
78  int readBoolData(bool &value, xmlTextReaderPtr reader);
79  int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader);
80  int readExtendedColourData(Colour &value, xmlTextReaderPtr reader);
81  int readExtendedColourData(boost::optional<Colour> &value, xmlTextReaderPtr reader);
82  int readNURBSData(boost::optional<NURBSData> &data, xmlTextReaderPtr reader);
83  int readPolylineData(boost::optional<PolylineData> &data, xmlTextReaderPtr reader);
84  int readStringData(VSDName &text, xmlTextReaderPtr reader);
85  void readTriggerId(unsigned &id, xmlTextReaderPtr reader);
86 
87  virtual xmlChar *readStringData(xmlTextReaderPtr reader) = 0;
88  unsigned getIX(xmlTextReaderPtr reader);
89  virtual void _handleLevelChange(unsigned level);
90  void _flushShape();
91 
92  virtual int getElementToken(xmlTextReaderPtr reader) = 0;
93  virtual int getElementDepth(xmlTextReaderPtr reader) = 0;
94 
95  // Functions reading the DiagramML document content
96 
97  void readEllipticalArcTo(xmlTextReaderPtr reader);
98  void readEllipse(xmlTextReaderPtr reader);
99  void readGeometry(xmlTextReaderPtr reader);
100  void readMoveTo(xmlTextReaderPtr reader);
101  void readLineTo(xmlTextReaderPtr reader);
102  void readArcTo(xmlTextReaderPtr reader);
103  void readNURBSTo(xmlTextReaderPtr reader);
104  void readPolylineTo(xmlTextReaderPtr reader);
105  void readInfiniteLine(xmlTextReaderPtr reader);
106  void readRelCubBezTo(xmlTextReaderPtr reader);
107  void readRelEllipticalArcTo(xmlTextReaderPtr reader);
108  void readRelLineTo(xmlTextReaderPtr reader);
109  void readRelMoveTo(xmlTextReaderPtr reader);
110  void readRelQuadBezTo(xmlTextReaderPtr reader);
111  void readForeignData(xmlTextReaderPtr reader);
112  virtual void getBinaryData(xmlTextReaderPtr reader) = 0;
113  void readShape(xmlTextReaderPtr reader);
114  void readColours(xmlTextReaderPtr reader);
115  void readPage(xmlTextReaderPtr reader);
116  void readText(xmlTextReaderPtr reader);
117  void readCharIX(xmlTextReaderPtr reader);
118  void readParaIX(xmlTextReaderPtr reader);
119  void readLayerIX(xmlTextReaderPtr reader);
120  void readLayerMember(xmlTextReaderPtr reader);
121 
122  void readStyleSheet(xmlTextReaderPtr reader);
123  void readPageSheet(xmlTextReaderPtr reader);
124 
125  void readSplineStart(xmlTextReaderPtr reader);
126  void readSplineKnot(xmlTextReaderPtr reader);
127 
128  void readStencil(xmlTextReaderPtr reader);
129 
130  void handlePagesStart(xmlTextReaderPtr reader);
131  void handlePagesEnd(xmlTextReaderPtr reader);
132  void handlePageStart(xmlTextReaderPtr reader);
133  void handlePageEnd(xmlTextReaderPtr reader);
134  void handleMastersStart(xmlTextReaderPtr reader);
135  void handleMastersEnd(xmlTextReaderPtr reader);
136  void handleMasterStart(xmlTextReaderPtr reader);
137  void handleMasterEnd(xmlTextReaderPtr reader);
138  void skipPages(xmlTextReaderPtr reader);
139  void skipMasters(xmlTextReaderPtr reader);
140 
141 private:
144 
145  void initColours();
146 };
147 
148 } // namespace libvisio
149 
150 #endif // __VSDXMLPARSERBASE_H__
151 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition: VSDCollector.h:21
Definition: VSDFieldList.h:88
Definition: VSDGeometryList.h:48
Definition: VSDTypes.h:171
Definition: VSDShapeList.h:20
Definition: VSDStencils.h:28
Definition: VSDStencils.h:79
Definition: VSDXMLParserBase.h:31
virtual int getElementDepth(xmlTextReaderPtr reader)=0
virtual void getBinaryData(xmlTextReaderPtr reader)=0
void handleMasterStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1906
int readNURBSData(boost::optional< NURBSData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1964
void readGeometry(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:48
void readRelLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:772
VSDXMLParserBase(const VSDXMLParserBase &)
void readParaIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1406
void handleMastersStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1883
VSDXMLParserBase & operator=(const VSDXMLParserBase &)
int readStringData(VSDName &text, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2074
std::stack< unsigned > m_shapeLevelStack
Definition: VSDXMLParserBase.h:56
void readPageSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1568
bool m_isStencilStarted
Definition: VSDXMLParserBase.h:44
void initColours()
Definition: VSDXMLParserBase.cpp:999
void readText(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1080
unsigned m_currentGeometryListIndex
Definition: VSDXMLParserBase.h:60
void readLayerMember(xmlTextReaderPtr reader)
void readNURBSTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:457
std::unique_ptr< VSDStencil > m_currentStencil
Definition: VSDXMLParserBase.h:42
VSDShapeList m_shapeList
Definition: VSDXMLParserBase.h:53
void handleMasterEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1915
void readStencil(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1694
void readStyleSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1552
void readArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:271
std::map< unsigned, VSDName > m_fonts
Definition: VSDXMLParserBase.h:62
virtual bool parseMain()=0
void readEllipse(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:391
void readTriggerId(unsigned &id, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2239
VSDStencils m_stencils
Definition: VSDXMLParserBase.h:41
void readColours(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1028
void handleMastersEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1897
void readRelCubBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:706
void readPolylineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:528
int readByteData(unsigned char &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2164
int readUnsignedData(boost::optional< unsigned > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2155
virtual ~VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:42
unsigned m_currentLevel
Definition: VSDXMLParserBase.h:49
librevenge::RVNGBinaryData m_currentBinaryData
Definition: VSDXMLParserBase.h:54
bool m_extractStencils
Definition: VSDXMLParserBase.h:47
void readSplineKnot(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1640
virtual int getElementToken(xmlTextReaderPtr reader)=0
virtual bool extractStencils()=0
unsigned m_currentShapeLevel
Definition: VSDXMLParserBase.h:50
virtual void _handleLevelChange(unsigned level)
Definition: VSDXMLParserBase.cpp:1842
int readDoubleData(boost::optional< double > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2090
void handlePagesStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1848
VSDCollector * m_collector
Definition: VSDXMLParserBase.h:40
void readRelMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:822
std::map< unsigned, VSDTabStop > * m_currentTabSet
Definition: VSDXMLParserBase.h:64
void handlePageStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1863
bool m_isShapeStarted
Definition: VSDXMLParserBase.h:57
int readBoolData(boost::optional< bool > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2142
void readForeignData(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1707
bool m_isInStyles
Definition: VSDXMLParserBase.h:48
unsigned m_currentStencilID
Definition: VSDXMLParserBase.h:45
void skipMasters(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1936
void readLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:221
VSDShape m_shape
Definition: VSDXMLParserBase.h:43
void readCharIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1173
void readRelEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:640
int readPolylineData(boost::optional< PolylineData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2017
void handlePagesEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1856
void readShape(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:930
void readMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:171
unsigned getIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2230
bool m_isPageStarted
Definition: VSDXMLParserBase.h:58
void handlePageEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1870
VSDGeometryList * m_currentGeometryList
Definition: VSDXMLParserBase.h:59
void readRelQuadBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:872
void _flushShape()
Definition: VSDXMLParserBase.cpp:1745
void skipPages(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1950
int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2181
void readSplineStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1574
void readEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:325
void readLayerIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1355
VSDFieldList m_fieldList
Definition: VSDXMLParserBase.h:52
void readInfiniteLine(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:582
XMLErrorWatcher * m_watcher
Definition: VSDXMLParserBase.h:66
virtual xmlChar * readStringData(xmlTextReaderPtr reader)=0
std::map< unsigned, Colour > m_colours
Definition: VSDXMLParserBase.h:51
int readLongData(boost::optional< long > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2116
void readPage(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1060
VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:29
std::stack< VSDShape > m_shapeStack
Definition: VSDXMLParserBase.h:55
Definition: libvisio_xml.h:25
Definition: libvisio_utils.h:49
Definition: VSDTypes.h:71

Generated for libvisio by doxygen 1.9.1