VSDParser.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 __VSDPARSER_H__
11 #define __VSDPARSER_H__
12 
13 #include <stdio.h>
14 #include <iostream>
15 #include <vector>
16 #include <stack>
17 #include <map>
18 #include <set>
19 #include <librevenge/librevenge.h>
20 #include "VSDTypes.h"
21 #include "VSDGeometryList.h"
22 #include "VSDFieldList.h"
23 #include "VSDCharacterList.h"
24 #include "VSDParagraphList.h"
25 #include "VSDShapeList.h"
26 #include "VSDLayerList.h"
27 #include "VSDStencils.h"
28 
29 namespace libvisio
30 {
31 
32 class VSDCollector;
33 
34 struct Pointer
35 {
37  : Type(0), Offset(0), Length(0), Format(0), ListSize(0) {}
38  Pointer(const Pointer &ptr)
39  : Type(ptr.Type), Offset(ptr.Offset), Length(ptr.Length), Format(ptr.Format), ListSize(ptr.ListSize) {}
40  unsigned Type;
41  unsigned Offset;
42  unsigned Length;
43  unsigned short Format;
44  unsigned ListSize;
45 };
46 
47 class VSDParser
48 {
49 public:
50  explicit VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream *container = nullptr);
51  virtual ~VSDParser();
52  bool parseMain();
53  bool extractStencils();
54 
55 protected:
56  // reader functions
57  void readEllipticalArcTo(librevenge::RVNGInputStream *input);
58  void readForeignData(librevenge::RVNGInputStream *input);
59  void readEllipse(librevenge::RVNGInputStream *input);
60  virtual void readLine(librevenge::RVNGInputStream *input);
61  virtual void readFillAndShadow(librevenge::RVNGInputStream *input);
62  virtual void readGeomList(librevenge::RVNGInputStream *input);
63  void readGeometry(librevenge::RVNGInputStream *input);
64  void readMoveTo(librevenge::RVNGInputStream *input);
65  void readLineTo(librevenge::RVNGInputStream *input);
66  void readArcTo(librevenge::RVNGInputStream *input);
67  void readNURBSTo(librevenge::RVNGInputStream *input);
68  void readPolylineTo(librevenge::RVNGInputStream *input);
69  void readInfiniteLine(librevenge::RVNGInputStream *input);
70  void readShapeData(librevenge::RVNGInputStream *input);
71  void readXFormData(librevenge::RVNGInputStream *input);
72  virtual void readXForm1D(librevenge::RVNGInputStream *input);
73  void readTxtXForm(librevenge::RVNGInputStream *input);
74  void readShapeId(librevenge::RVNGInputStream *input);
75  virtual void readShapeList(librevenge::RVNGInputStream *input);
76  void readForeignDataType(librevenge::RVNGInputStream *input);
77  void readPageProps(librevenge::RVNGInputStream *input);
78  virtual void readShape(librevenge::RVNGInputStream *input);
79  void readColours(librevenge::RVNGInputStream *input);
80  void readFont(librevenge::RVNGInputStream *input);
81  void readFontIX(librevenge::RVNGInputStream *input);
82  virtual void readCharList(librevenge::RVNGInputStream *input);
83  virtual void readParaList(librevenge::RVNGInputStream *input);
84  virtual void readPropList(librevenge::RVNGInputStream *input);
85  virtual void readPage(librevenge::RVNGInputStream *input);
86  virtual void readText(librevenge::RVNGInputStream *input);
87  virtual void readCharIX(librevenge::RVNGInputStream *input);
88  virtual void readParaIX(librevenge::RVNGInputStream *input);
89  virtual void readTextBlock(librevenge::RVNGInputStream *input);
90  virtual void readTabsDataList(librevenge::RVNGInputStream *input);
91  virtual void readTabsData(librevenge::RVNGInputStream *input);
92 
93  void readNameList(librevenge::RVNGInputStream *input);
94  virtual void readName(librevenge::RVNGInputStream *input);
95 
96  virtual void readNameList2(librevenge::RVNGInputStream *input);
97  virtual void readName2(librevenge::RVNGInputStream *input);
98 
99  virtual void readFieldList(librevenge::RVNGInputStream *input);
100  virtual void readTextField(librevenge::RVNGInputStream *input);
101 
102  virtual void readStyleSheet(librevenge::RVNGInputStream *input);
103  void readPageSheet(librevenge::RVNGInputStream *input);
104 
105  void readSplineStart(librevenge::RVNGInputStream *input);
106  void readSplineKnot(librevenge::RVNGInputStream *input);
107 
108  void readStencilShape(librevenge::RVNGInputStream *input);
109 
110  void readOLEList(librevenge::RVNGInputStream *input);
111  void readOLEData(librevenge::RVNGInputStream *input);
112 
113  virtual void readNameIDX(librevenge::RVNGInputStream *input);
114  virtual void readNameIDX123(librevenge::RVNGInputStream *input);
115 
116  virtual void readMisc(librevenge::RVNGInputStream *input);
117 
118  virtual void readLayerList(librevenge::RVNGInputStream *input);
119  virtual void readLayer(librevenge::RVNGInputStream *input);
120  virtual void readLayerMem(librevenge::RVNGInputStream *input);
121 
122  // parser of one pass
123  bool parseDocument(librevenge::RVNGInputStream *input, unsigned shift);
124 
125  void parseMetaData();
126 
127  // Stream handlers
128  void handleStreams(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned level, std::set<unsigned> &visited);
129  void handleStream(const Pointer &ptr, unsigned idx, unsigned level, std::set<unsigned> &visited);
130  void handleChunks(librevenge::RVNGInputStream *input, unsigned level);
131  void handleChunk(librevenge::RVNGInputStream *input);
132  void handleBlob(librevenge::RVNGInputStream *input, unsigned shift, unsigned level);
133 
134  virtual void readPointer(librevenge::RVNGInputStream *input, Pointer &ptr);
135  virtual void readPointerInfo(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned &listSize, int &pointerCount);
136  virtual bool getChunkHeader(librevenge::RVNGInputStream *input);
137  void _handleLevelChange(unsigned level);
138  Colour _colourFromIndex(unsigned idx);
139  void _flushShape();
140  void _nameFromId(VSDName &name, unsigned id, unsigned level);
141 
142  virtual unsigned getUInt(librevenge::RVNGInputStream *input);
143  virtual int getInt(librevenge::RVNGInputStream *input);
144 
145  librevenge::RVNGInputStream *m_input;
146  librevenge::RVNGDrawingInterface *m_painter;
147  librevenge::RVNGInputStream *m_container;
151  unsigned m_currentLevel;
152 
160 
162 
164  std::vector<Colour> m_colours;
165 
168 
171 
174 
175  std::map<unsigned, VSDName> m_fonts;
176  std::map<unsigned, VSDName> m_names;
177  std::map<unsigned, std::map<unsigned, VSDName> > m_namesMapMap;
179 
180  std::map<unsigned, VSDTabStop> *m_currentTabSet;
181 
182 private:
183  VSDParser();
184  VSDParser(const VSDParser &);
185  VSDParser &operator=(const VSDParser &);
186 
187 };
188 
189 } // namespace libvisio
190 
191 #endif // __VSDPARSER_H__
192 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
virtual void readParaIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1993
librevenge::RVNGInputStream * m_input
Definition: VSDParser.h:145
void handleStreams(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned level, std::set< unsigned > &visited)
Definition: VSDParser.cpp:219
void readPageSheet(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1897
virtual ~VSDParser()
Definition: VSDParser.cpp:34
Definition: VSDStencils.h:26
virtual void readNameIDX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:811
unsigned m_currentLevel
Definition: VSDParser.h:151
librevenge::RVNGInputStream * m_container
Definition: VSDParser.h:147
void readLineTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1110
void readFont(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1753
void readSplineStart(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1678
virtual void readPointer(librevenge::RVNGInputStream *input, Pointer &ptr)
Definition: VSDParser.cpp:199
virtual void readFillAndShadow(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2078
virtual void readNameIDX123(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:833
bool m_isShapeStarted
Definition: VSDParser.h:167
void readOLEList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:778
void readGeometry(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1088
bool m_isBackgroundPage
Definition: VSDParser.h:166
VSDShapeList m_shapeList
Definition: VSDParser.h:150
virtual void readText(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1903
void readPolylineTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1496
unsigned Offset
Definition: VSDParser.h:41
void handleChunk(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:458
unsigned m_currentLayerListLevel
Definition: VSDParser.h:161
Definition: VSDTypes.h:72
Definition: VSDParser.h:34
void readPageProps(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1249
ChunkHeader m_header
Definition: VSDParser.h:148
void parseMetaData()
Definition: VSDParser.cpp:151
double m_shadowOffsetX
Definition: VSDParser.h:169
std::vector< Colour > m_colours
Definition: VSDParser.h:164
Colour _colourFromIndex(unsigned idx)
Definition: VSDParser.cpp:2285
librevenge::RVNGDrawingInterface * m_painter
Definition: VSDParser.h:146
bool parseDocument(librevenge::RVNGInputStream *input, unsigned shift)
Definition: VSDParser.cpp:177
VSDName m_currentPageName
Definition: VSDParser.h:178
unsigned m_currentShapeLevel
Definition: VSDParser.h:158
virtual void readNameList2(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1710
void handleChunks(librevenge::RVNGInputStream *input, unsigned level)
Definition: VSDParser.cpp:440
void readInfiniteLine(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1595
void readColours(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1734
virtual void readPage(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1081
void readNURBSTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1337
std::map< unsigned, VSDName > m_fonts
Definition: VSDParser.h:175
virtual void readShapeList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1197
Definition: VSDStencils.h:77
void _flushShape()
Definition: VSDParser.cpp:634
Definition: VSDParser.h:47
void readStencilShape(librevenge::RVNGInputStream *input)
Definition: VSDCollector.h:20
std::map< unsigned, VSDTabStop > * m_currentTabSet
Definition: VSDParser.h:180
unsigned Length
Definition: VSDParser.h:42
VSDStencil * m_currentStencil
Definition: VSDParser.h:154
virtual void readCharIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1925
void readSplineKnot(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1693
virtual void readParaList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:975
unsigned m_currentShapeID
Definition: VSDParser.h:159
VSDGeometryList * m_currentGeometryList
Definition: VSDParser.h:172
void readFontIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1770
virtual void readShape(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1277
void handleBlob(librevenge::RVNGInputStream *input, unsigned shift, unsigned level)
Definition: VSDParser.cpp:424
virtual void readLayer(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1041
unsigned ListSize
Definition: VSDParser.h:44
double m_shadowOffsetY
Definition: VSDParser.h:170
void _handleLevelChange(unsigned level)
Definition: VSDParser.cpp:713
void readEllipse(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:849
void readArcTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1121
bool m_isStencilStarted
Definition: VSDParser.h:156
void readTxtXForm(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1168
std::map< unsigned, std::map< unsigned, VSDName > > m_namesMapMap
Definition: VSDParser.h:177
virtual void readLayerList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1021
void readOLEData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:782
virtual void readLine(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:868
void _nameFromId(VSDName &name, unsigned id, unsigned level)
Definition: VSDParser.cpp:38
void readForeignData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:764
virtual void readLayerMem(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1064
Definition: VSDStencils.h:61
virtual void readPointerInfo(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned &listSize, int &pointerCount)
Definition: VSDParser.cpp:208
virtual void readTextBlock(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:892
virtual bool getChunkHeader(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:50
virtual void readXForm1D(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1154
Definition: libvisio_utils.h:48
virtual void readName2(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2157
virtual void readMisc(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2241
void readXFormData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1134
Definition: VSDTypes.h:60
virtual void readTabsDataList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1001
void readNameList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1705
unsigned m_currentGeomListCount
Definition: VSDParser.h:173
virtual void readStyleSheet(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1885
VSDStencils m_stencils
Definition: VSDParser.h:153
unsigned Type
Definition: VSDParser.h:40
virtual unsigned getUInt(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2292
bool extractStencils()
Definition: VSDParser.cpp:193
void readShapeId(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1189
Definition: VSDShapeList.h:19
VSDShape m_shape
Definition: VSDParser.h:155
Pointer(const Pointer &ptr)
Definition: VSDParser.h:38
void readEllipticalArcTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:744
VSDParser & operator=(const VSDParser &)
unsigned short Format
Definition: VSDParser.h:43
virtual void readFieldList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1715
void readForeignDataType(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1221
virtual void readName(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2146
bool m_extractStencils
Definition: VSDParser.h:163
virtual void readTabsData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:797
void handleStream(const Pointer &ptr, unsigned idx, unsigned level, std::set< unsigned > &visited)
Definition: VSDParser.cpp:290
Definition: VSDTypes.h:178
bool parseMain()
Definition: VSDParser.cpp:106
VSDCollector * m_collector
Definition: VSDParser.h:149
virtual void readPropList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:997
Pointer()
Definition: VSDParser.h:36
virtual int getInt(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2297
virtual void readTextField(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2172
virtual void readCharList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:953
virtual void readGeomList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:923
void readMoveTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1099
Definition: VSDGeometryList.h:47
bool m_isInStyles
Definition: VSDParser.h:157
void readShapeData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1609
std::map< unsigned, VSDName > m_names
Definition: VSDParser.h:176

Generated for libvisio by doxygen 1.8.8