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 <optional>
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(std::optional<unsigned char> &value, xmlTextReaderPtr reader);
72  int readUnsignedData(std::optional<unsigned> &value, xmlTextReaderPtr reader);
73  int readLongData(std::optional<long> &value, xmlTextReaderPtr reader);
74  int readLongData(long &value, xmlTextReaderPtr reader);
75  int readDoubleData(std::optional<double> &value, xmlTextReaderPtr reader);
76  int readDoubleData(double &value, xmlTextReaderPtr reader);
77  int readBoolData(std::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(std::optional<Colour> &value, xmlTextReaderPtr reader);
82  bool readColourOrColourIndex(Colour &value, long &idx, xmlTextReaderPtr reader);
83  int readNURBSData(std::optional<NURBSData> &data, xmlTextReaderPtr reader);
84  int readPolylineData(std::optional<PolylineData> &data, xmlTextReaderPtr reader);
85  int readStringData(VSDName &text, xmlTextReaderPtr reader);
86  void readTriggerId(unsigned &id, xmlTextReaderPtr reader);
87 
88  virtual xmlChar *readStringData(xmlTextReaderPtr reader) = 0;
89  unsigned getIX(xmlTextReaderPtr reader);
90  virtual void _handleLevelChange(unsigned level);
91  void _flushShape();
92 
93  virtual int getElementToken(xmlTextReaderPtr reader) = 0;
94  virtual int getElementDepth(xmlTextReaderPtr reader) = 0;
95 
96  // Functions reading the DiagramML document content
97 
98  void readEllipticalArcTo(xmlTextReaderPtr reader);
99  void readEllipse(xmlTextReaderPtr reader);
100  void readGeometry(xmlTextReaderPtr reader);
101  void readMoveTo(xmlTextReaderPtr reader);
102  void readLineTo(xmlTextReaderPtr reader);
103  void readArcTo(xmlTextReaderPtr reader);
104  void readNURBSTo(xmlTextReaderPtr reader);
105  void readPolylineTo(xmlTextReaderPtr reader);
106  void readInfiniteLine(xmlTextReaderPtr reader);
107  void readRelCubBezTo(xmlTextReaderPtr reader);
108  void readRelEllipticalArcTo(xmlTextReaderPtr reader);
109  void readRelLineTo(xmlTextReaderPtr reader);
110  void readRelMoveTo(xmlTextReaderPtr reader);
111  void readRelQuadBezTo(xmlTextReaderPtr reader);
112  void readForeignData(xmlTextReaderPtr reader);
113  virtual void getBinaryData(xmlTextReaderPtr reader) = 0;
114  void readShape(xmlTextReaderPtr reader);
115  void readColours(xmlTextReaderPtr reader);
116  void readPage(xmlTextReaderPtr reader);
117  void readText(xmlTextReaderPtr reader);
118  void readCharIX(xmlTextReaderPtr reader);
119  void readParaIX(xmlTextReaderPtr reader);
120  void readLayerIX(xmlTextReaderPtr reader);
121  void readLayerMember(xmlTextReaderPtr reader);
122 
123  void readStyleSheet(xmlTextReaderPtr reader);
124  void readPageSheet(xmlTextReaderPtr reader);
125 
126  void readSplineStart(xmlTextReaderPtr reader);
127  void readSplineKnot(xmlTextReaderPtr reader);
128 
129  void readStencil(xmlTextReaderPtr reader);
130 
131  void handlePagesStart(xmlTextReaderPtr reader);
132  void handlePagesEnd(xmlTextReaderPtr reader);
133  void handlePageStart(xmlTextReaderPtr reader);
134  void handlePageEnd(xmlTextReaderPtr reader);
135  void handleMastersStart(xmlTextReaderPtr reader);
136  void handleMastersEnd(xmlTextReaderPtr reader);
137  void handleMasterStart(xmlTextReaderPtr reader);
138  void handleMasterEnd(xmlTextReaderPtr reader);
139  void skipPages(xmlTextReaderPtr reader);
140  void skipMasters(xmlTextReaderPtr reader);
141 
142 private:
145 
146  void initColours();
147 };
148 
149 } // namespace libvisio
150 
151 #endif // __VSDXMLPARSERBASE_H__
152 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
XMLErrorWatcher * m_watcher
Definition: VSDXMLParserBase.h:66
void readMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:171
Definition: VSDStencils.h:27
VSDXMLParserBase & operator=(const VSDXMLParserBase &)
void handleMastersEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1912
bool m_isShapeStarted
Definition: VSDXMLParserBase.h:57
void readRelLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:772
VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:29
void readLayerMember(xmlTextReaderPtr reader)
void readRelQuadBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:872
void readSplineStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1587
void handleMasterStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1921
Definition: libvisio_xml.h:24
void handlePageEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1885
Definition: VSDTypes.h:70
std::map< unsigned, VSDTabStop > * m_currentTabSet
Definition: VSDXMLParserBase.h:64
VSDShape m_shape
Definition: VSDXMLParserBase.h:43
VSDShapeList m_shapeList
Definition: VSDXMLParserBase.h:53
VSDStencils m_stencils
Definition: VSDXMLParserBase.h:41
int readStringData(VSDName &text, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2089
void handleMastersStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1898
int readLongData(std::optional< long > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2131
VSDGeometryList * m_currentGeometryList
Definition: VSDXMLParserBase.h:59
int readBoolData(std::optional< bool > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2157
bool readColourOrColourIndex(Colour &value, long &idx, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2242
std::map< unsigned, Colour > m_colours
Definition: VSDXMLParserBase.h:51
int readUnsignedData(std::optional< unsigned > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2170
void readStyleSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1565
VSDCollector * m_collector
Definition: VSDXMLParserBase.h:40
unsigned m_currentLevel
Definition: VSDXMLParserBase.h:49
void readNURBSTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:457
int readNURBSData(std::optional< NURBSData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1979
void readLayerIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1368
void readStencil(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1707
virtual void getBinaryData(xmlTextReaderPtr reader)=0
std::stack< VSDShape > m_shapeStack
Definition: VSDXMLParserBase.h:55
Definition: VSDStencils.h:79
Definition: VSDCollector.h:20
Definition: VSDFieldList.h:87
void _flushShape()
Definition: VSDXMLParserBase.cpp:1758
void readRelCubBezTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:706
void readColours(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1041
int readByteData(unsigned char &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2179
unsigned m_currentGeometryListIndex
Definition: VSDXMLParserBase.h:60
void readArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:271
void handlePageStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1878
virtual int getElementDepth(xmlTextReaderPtr reader)=0
librevenge::RVNGBinaryData m_currentBinaryData
Definition: VSDXMLParserBase.h:54
std::unique_ptr< VSDStencil > m_currentStencil
Definition: VSDXMLParserBase.h:42
virtual bool parseMain()=0
bool m_isInStyles
Definition: VSDXMLParserBase.h:48
bool m_isPageStarted
Definition: VSDXMLParserBase.h:58
void readRelEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:640
void readLineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:221
void readPageSheet(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1581
virtual ~VSDXMLParserBase()
Definition: VSDXMLParserBase.cpp:42
unsigned m_currentShapeLevel
Definition: VSDXMLParserBase.h:50
std::stack< unsigned > m_shapeLevelStack
Definition: VSDXMLParserBase.h:56
virtual bool extractStencils()=0
void readCharIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1186
unsigned getIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2270
void readTriggerId(unsigned &id, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2279
int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2196
void readPolylineTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:528
int readPolylineData(std::optional< PolylineData > &data, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2032
unsigned m_currentStencilID
Definition: VSDXMLParserBase.h:45
void skipPages(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1965
Definition: libvisio_utils.h:46
Definition: VSDXMLParserBase.h:30
void readInfiniteLine(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:582
void handlePagesEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1871
void readForeignData(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1720
void handleMasterEnd(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1930
void readShape(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:930
void readEllipticalArcTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:325
virtual int getElementToken(xmlTextReaderPtr reader)=0
VSDFieldList m_fieldList
Definition: VSDXMLParserBase.h:52
virtual void _handleLevelChange(unsigned level)
Definition: VSDXMLParserBase.cpp:1857
Definition: VSDShapeList.h:19
bool m_extractStencils
Definition: VSDXMLParserBase.h:47
void readRelMoveTo(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:822
bool m_isStencilStarted
Definition: VSDXMLParserBase.h:44
void readEllipse(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:391
void readGeometry(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:48
Definition: VSDTypes.h:170
void readSplineKnot(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1653
void initColours()
Definition: VSDXMLParserBase.cpp:1012
void skipMasters(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1951
void readParaIX(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1419
void readText(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1093
int readDoubleData(std::optional< double > &value, xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:2105
std::map< unsigned, VSDName > m_fonts
Definition: VSDXMLParserBase.h:62
Definition: VSDGeometryList.h:47
void handlePagesStart(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1863
void readPage(xmlTextReaderPtr reader)
Definition: VSDXMLParserBase.cpp:1073

Generated for libvisio by doxygen 1.8.14