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 
29 {
30 public:
31  explicit VSDXMLParserBase();
32  virtual ~VSDXMLParserBase();
33  virtual bool parseMain() = 0;
34  virtual bool extractStencils() = 0;
35 
36 protected:
37  // Protected data
44 
47  unsigned m_currentLevel;
49  std::map<unsigned, Colour> m_colours;
52  librevenge::RVNGBinaryData m_currentBinaryData;
53  std::stack<VSDShape> m_shapeStack;
54  std::stack<unsigned> m_shapeLevelStack;
59 
60  std::map<unsigned, VSDName> m_fonts;
61 
62  // Helper functions
63 
64  int readByteData(unsigned char &value, xmlTextReaderPtr reader);
65  int readByteData(boost::optional<unsigned char> &value, xmlTextReaderPtr reader);
66  int readUnsignedData(boost::optional<unsigned> &value, xmlTextReaderPtr reader);
67  int readLongData(boost::optional<long> &value, xmlTextReaderPtr reader);
68  int readLongData(long &value, xmlTextReaderPtr reader);
69  int readDoubleData(boost::optional<double> &value, xmlTextReaderPtr reader);
70  int readDoubleData(double &value, xmlTextReaderPtr reader);
71  int readBoolData(boost::optional<bool> &value, xmlTextReaderPtr reader);
72  int readBoolData(bool &value, xmlTextReaderPtr reader);
73  int readExtendedColourData(Colour &value, long &idx, xmlTextReaderPtr reader);
74  int readExtendedColourData(Colour &value, xmlTextReaderPtr reader);
75  int readExtendedColourData(boost::optional<Colour> &value, xmlTextReaderPtr reader);
76  int readNURBSData(boost::optional<NURBSData> &data, xmlTextReaderPtr reader);
77  int readPolylineData(boost::optional<PolylineData> &data, xmlTextReaderPtr reader);
78 
79  virtual xmlChar *readStringData(xmlTextReaderPtr reader) = 0;
80  unsigned getIX(xmlTextReaderPtr reader);
81  virtual void _handleLevelChange(unsigned level);
82  void _flushShape();
83 
84  virtual int getElementToken(xmlTextReaderPtr reader) = 0;
85  virtual int getElementDepth(xmlTextReaderPtr reader) = 0;
86 
87  // Functions reading the DiagramML document content
88 
89  void readEllipticalArcTo(xmlTextReaderPtr reader);
90  void readEllipse(xmlTextReaderPtr reader);
91  void readGeometry(xmlTextReaderPtr reader);
92  void readMoveTo(xmlTextReaderPtr reader);
93  void readLineTo(xmlTextReaderPtr reader);
94  void readArcTo(xmlTextReaderPtr reader);
95  void readNURBSTo(xmlTextReaderPtr reader);
96  void readPolylineTo(xmlTextReaderPtr reader);
97  void readInfiniteLine(xmlTextReaderPtr reader);
98  void readRelCubBezTo(xmlTextReaderPtr reader);
99  void readRelEllipticalArcTo(xmlTextReaderPtr reader);
100  void readRelLineTo(xmlTextReaderPtr reader);
101  void readRelMoveTo(xmlTextReaderPtr reader);
102  void readRelQuadBezTo(xmlTextReaderPtr reader);
103  void readForeignData(xmlTextReaderPtr reader);
104  virtual void getBinaryData(xmlTextReaderPtr reader) = 0;
105  void readShape(xmlTextReaderPtr reader);
106  void readColours(xmlTextReaderPtr reader);
107  void readPage(xmlTextReaderPtr reader);
108  void readText(xmlTextReaderPtr reader);
109  void readCharIX(xmlTextReaderPtr reader);
110  void readParaIX(xmlTextReaderPtr reader);
111 
112  void readStyleSheet(xmlTextReaderPtr reader);
113  void readPageSheet(xmlTextReaderPtr reader);
114 
115  void readSplineStart(xmlTextReaderPtr reader);
116  void readSplineKnot(xmlTextReaderPtr reader);
117 
118  void readStencil(xmlTextReaderPtr reader);
119 
120  void handlePagesStart(xmlTextReaderPtr reader);
121  void handlePagesEnd(xmlTextReaderPtr reader);
122  void handlePageStart(xmlTextReaderPtr reader);
123  void handlePageEnd(xmlTextReaderPtr reader);
124  void handleMastersStart(xmlTextReaderPtr reader);
125  void handleMastersEnd(xmlTextReaderPtr reader);
126  void handleMasterStart(xmlTextReaderPtr reader);
127  void handleMasterEnd(xmlTextReaderPtr reader);
128  void skipPages(xmlTextReaderPtr reader);
129  void skipMasters(xmlTextReaderPtr reader);
130 
131 private:
134 
135  void initColours();
136 };
137 
138 } // namespace libvisio
139 
140 #endif // __VSDXMLPARSERBASE_H__
141 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */

Generated for libvisio by doxygen 1.8.4