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 <stack>
15 #include <string>
16 #include <boost/optional.hpp>
17 #include "VSDXMLHelper.h"
18 #include "VSDCharacterList.h"
19 #include "VSDParagraphList.h"
20 #include "VSDShapeList.h"
21 #include "VSDStencils.h"
22 
23 namespace libvisio
24 {
25 
26 class VSDCollector;
27 class XMLErrorWatcher;
28 
30 {
31 public:
32  explicit VSDXMLParserBase();
33  virtual ~VSDXMLParserBase();
34  virtual bool parseMain() = 0;
35  virtual bool extractStencils() = 0;
36 
37 protected:
38  // Protected data
45 
48  unsigned m_currentLevel;
50  std::map<unsigned, Colour> m_colours;
53  librevenge::RVNGBinaryData m_currentBinaryData;
54  std::stack<VSDShape> m_shapeStack;
55  std::stack<unsigned> m_shapeLevelStack;
60 
61  std::map<unsigned, VSDName> m_fonts;
62 
64 
65  // Helper functions
66 
67  int readByteData(unsigned char &value, xmlTextReaderPtr reader);
68  int readByteData(boost::optional<unsigned char> &value, xmlTextReaderPtr reader);
69  int readUnsignedData(boost::optional<unsigned> &value, xmlTextReaderPtr reader);
70  int readLongData(boost::optional<long> &value, xmlTextReaderPtr reader);
71  int readLongData(long &value, xmlTextReaderPtr reader);
72  int readDoubleData(boost::optional<double> &value, xmlTextReaderPtr reader);
73  int readDoubleData(double &value, xmlTextReaderPtr reader);
74  int readBoolData(boost::optional<bool> &value, xmlTextReaderPtr reader);
75  int readBoolData(bool &value, xmlTextReaderPtr reader);
76  int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader);
77  int readExtendedColourData(Colour &value, xmlTextReaderPtr reader);
78  int readExtendedColourData(boost::optional<Colour> &value, xmlTextReaderPtr reader);
79  int readNURBSData(boost::optional<NURBSData> &data, xmlTextReaderPtr reader);
80  int readPolylineData(boost::optional<PolylineData> &data, xmlTextReaderPtr reader);
81 
82  virtual xmlChar *readStringData(xmlTextReaderPtr reader) = 0;
83  unsigned getIX(xmlTextReaderPtr reader);
84  virtual void _handleLevelChange(unsigned level);
85  void _flushShape();
86 
87  virtual int getElementToken(xmlTextReaderPtr reader) = 0;
88  virtual int getElementDepth(xmlTextReaderPtr reader) = 0;
89 
90  // Functions reading the DiagramML document content
91 
92  void readEllipticalArcTo(xmlTextReaderPtr reader);
93  void readEllipse(xmlTextReaderPtr reader);
94  void readGeometry(xmlTextReaderPtr reader);
95  void readMoveTo(xmlTextReaderPtr reader);
96  void readLineTo(xmlTextReaderPtr reader);
97  void readArcTo(xmlTextReaderPtr reader);
98  void readNURBSTo(xmlTextReaderPtr reader);
99  void readPolylineTo(xmlTextReaderPtr reader);
100  void readInfiniteLine(xmlTextReaderPtr reader);
101  void readRelCubBezTo(xmlTextReaderPtr reader);
102  void readRelEllipticalArcTo(xmlTextReaderPtr reader);
103  void readRelLineTo(xmlTextReaderPtr reader);
104  void readRelMoveTo(xmlTextReaderPtr reader);
105  void readRelQuadBezTo(xmlTextReaderPtr reader);
106  void readForeignData(xmlTextReaderPtr reader);
107  virtual void getBinaryData(xmlTextReaderPtr reader) = 0;
108  void readShape(xmlTextReaderPtr reader);
109  void readColours(xmlTextReaderPtr reader);
110  void readPage(xmlTextReaderPtr reader);
111  void readText(xmlTextReaderPtr reader);
112  void readCharIX(xmlTextReaderPtr reader);
113  void readParaIX(xmlTextReaderPtr reader);
114 
115  void readStyleSheet(xmlTextReaderPtr reader);
116  void readPageSheet(xmlTextReaderPtr reader);
117 
118  void readSplineStart(xmlTextReaderPtr reader);
119  void readSplineKnot(xmlTextReaderPtr reader);
120 
121  void readStencil(xmlTextReaderPtr reader);
122 
123  void handlePagesStart(xmlTextReaderPtr reader);
124  void handlePagesEnd(xmlTextReaderPtr reader);
125  void handlePageStart(xmlTextReaderPtr reader);
126  void handlePageEnd(xmlTextReaderPtr reader);
127  void handleMastersStart(xmlTextReaderPtr reader);
128  void handleMastersEnd(xmlTextReaderPtr reader);
129  void handleMasterStart(xmlTextReaderPtr reader);
130  void handleMasterEnd(xmlTextReaderPtr reader);
131  void skipPages(xmlTextReaderPtr reader);
132  void skipMasters(xmlTextReaderPtr reader);
133 
134 private:
137 
138  void initColours();
139 };
140 
141 } // namespace libvisio
142 
143 #endif // __VSDXMLPARSERBASE_H__
144 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
XMLErrorWatcher * m_watcher
Definition: VSDXMLParserBase.h:63
void readMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:170
Definition: VSDStencils.h:26
VSDXMLParserBase & operator=(const VSDXMLParserBase &)
void handleMastersEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1763
bool m_isShapeStarted
Definition: VSDXMLParserBase.h:56
void readRelLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:771
VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:27
void readRelQuadBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:871
void readSplineStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1446
void handleMasterStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1772
Definition: libvisio_xml.h:24
void handlePageEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1736
Definition: VSDTypes.h:72
VSDShape m_shape
Definition: VSDXMLParserBase.h:42
int readPolylineData(boost::optional< PolylineData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1874
VSDShapeList m_shapeList
Definition: VSDXMLParserBase.h:52
VSDStencils m_stencils
Definition: VSDXMLParserBase.h:40
void handleMastersStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1749
virtual xmlChar * readStringData(xmlTextReaderPtr reader)=0
int readBoolData(boost::optional< bool > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1976
VSDGeometryList * m_currentGeometryList
Definition: VSDXMLParserBase.h:58
std::map< unsigned, Colour > m_colours
Definition: VSDXMLParserBase.h:50
void readStyleSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1424
VSDCollector * m_collector
Definition: VSDXMLParserBase.h:39
unsigned m_currentLevel
Definition: VSDXMLParserBase.h:48
void readNURBSTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:456
void readStencil(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1566
virtual void getBinaryData(xmlTextReaderPtr reader)=0
std::stack< VSDShape > m_shapeStack
Definition: VSDXMLParserBase.h:54
Definition: VSDStencils.h:76
Definition: VSDCollector.h:20
int readDoubleData(boost::optional< double > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1924
Definition: VSDFieldList.h:81
VSDStencil * m_currentStencil
Definition: VSDXMLParserBase.h:41
void _flushShape()
Definition: VSDXMLParserBase.cpp:1619
void readRelCubBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:705
void readColours(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1025
int readByteData(unsigned char &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1998
unsigned m_currentGeometryListIndex
Definition: VSDXMLParserBase.h:59
void readArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:270
void handlePageStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1729
virtual int getElementDepth(xmlTextReaderPtr reader)=0
librevenge::RVNGBinaryData m_currentBinaryData
Definition: VSDXMLParserBase.h:53
virtual bool parseMain()=0
bool m_isInStyles
Definition: VSDXMLParserBase.h:47
bool m_isPageStarted
Definition: VSDXMLParserBase.h:57
void readRelEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:639
void readLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:220
void readPageSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1440
virtual ~VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:39
unsigned m_currentShapeLevel
Definition: VSDXMLParserBase.h:49
std::stack< unsigned > m_shapeLevelStack
Definition: VSDXMLParserBase.h:55
virtual bool extractStencils()=0
void readCharIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1159
unsigned getIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2059
int readLongData(boost::optional< long > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1950
int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2015
void readPolylineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:527
Definition: VSDStencils.h:60
unsigned m_currentStencilID
Definition: VSDXMLParserBase.h:44
void skipPages(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1819
Definition: libvisio_utils.h:70
Definition: VSDXMLParserBase.h:29
void readInfiniteLine(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:581
int readNURBSData(boost::optional< NURBSData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1833
void handlePagesEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1722
void readForeignData(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1581
void handleMasterEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1781
void readShape(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:929
void readEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:324
virtual int getElementToken(xmlTextReaderPtr reader)=0
VSDFieldList m_fieldList
Definition: VSDXMLParserBase.h:51
virtual void _handleLevelChange(unsigned level)
Definition: VSDXMLParserBase.cpp:1708
Definition: VSDShapeList.h:19
bool m_extractStencils
Definition: VSDXMLParserBase.h:46
void readRelMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:821
bool m_isStencilStarted
Definition: VSDXMLParserBase.h:43
void readEllipse(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:390
void readGeometry(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:47
void readSplineKnot(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1512
void initColours()
Definition: VSDXMLParserBase.cpp:996
int readUnsignedData(boost::optional< unsigned > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1989
void skipMasters(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1805
void readParaIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1338
void readText(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1075
std::map< unsigned, VSDName > m_fonts
Definition: VSDXMLParserBase.h:61
Definition: VSDGeometryList.h:47
void handlePagesStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1714
void readPage(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1057

Generated for libvisio by doxygen 1.8.8