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
29namespace libvisio
30{
31
32class VSDCollector;
33
34struct 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
48{
49public:
50 explicit VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter, librevenge::RVNGInputStream *container = nullptr);
51 virtual ~VSDParser();
52 bool parseMain();
53 bool extractStencils();
54
55protected:
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;
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
182private:
186
187};
188
189} // namespace libvisio
190
191#endif // __VSDPARSER_H__
192/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition: VSDCollector.h:21
Definition: VSDGeometryList.h:48
Definition: VSDTypes.h:179
Definition: VSDParser.h:48
virtual bool getChunkHeader(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:50
void readOLEList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:778
virtual void readShape(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1277
virtual void readCharList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:953
void _handleLevelChange(unsigned level)
Definition: VSDParser.cpp:713
virtual int getInt(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2297
bool parseMain()
Definition: VSDParser.cpp:106
virtual void readPointerInfo(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned &listSize, int &pointerCount)
Definition: VSDParser.cpp:208
virtual void readPage(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1081
void readStencilShape(librevenge::RVNGInputStream *input)
void readSplineKnot(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1693
bool m_isBackgroundPage
Definition: VSDParser.h:166
void handleChunk(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:458
void readForeignDataType(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1221
void readFontIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1770
void readXFormData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1134
librevenge::RVNGInputStream * m_container
Definition: VSDParser.h:147
virtual void readTextField(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2172
VSDGeometryList * m_currentGeometryList
Definition: VSDParser.h:172
double m_shadowOffsetX
Definition: VSDParser.h:169
void handleChunks(librevenge::RVNGInputStream *input, unsigned level)
Definition: VSDParser.cpp:440
unsigned m_currentGeomListCount
Definition: VSDParser.h:173
void readNameList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1705
virtual void readPointer(librevenge::RVNGInputStream *input, Pointer &ptr)
Definition: VSDParser.cpp:199
void readArcTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1121
virtual void readNameIDX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:811
virtual void readParaIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1993
void parseMetaData()
Definition: VSDParser.cpp:151
void readEllipticalArcTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:744
void readTxtXForm(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1168
virtual void readText(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1903
std::map< unsigned, std::map< unsigned, VSDName > > m_namesMapMap
Definition: VSDParser.h:177
void handleBlob(librevenge::RVNGInputStream *input, unsigned shift, unsigned level)
Definition: VSDParser.cpp:424
void handleStreams(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned level, std::set< unsigned > &visited)
Definition: VSDParser.cpp:219
librevenge::RVNGInputStream * m_input
Definition: VSDParser.h:145
void readNURBSTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1337
bool m_extractStencils
Definition: VSDParser.h:163
void readShapeId(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1189
bool m_isStencilStarted
Definition: VSDParser.h:156
void readPageProps(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1249
virtual void readGeomList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:923
VSDParser & operator=(const VSDParser &)
bool parseDocument(librevenge::RVNGInputStream *input, unsigned shift)
Definition: VSDParser.cpp:177
virtual void readParaList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:975
void readLineTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1110
Colour _colourFromIndex(unsigned idx)
Definition: VSDParser.cpp:2285
virtual void readTabsData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:797
bool m_isShapeStarted
Definition: VSDParser.h:167
void readColours(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1734
unsigned m_currentShapeLevel
Definition: VSDParser.h:158
void handleStream(const Pointer &ptr, unsigned idx, unsigned level, std::set< unsigned > &visited)
Definition: VSDParser.cpp:290
unsigned m_currentShapeID
Definition: VSDParser.h:159
virtual void readTextBlock(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:892
virtual void readLayerList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1021
ChunkHeader m_header
Definition: VSDParser.h:148
VSDShapeList m_shapeList
Definition: VSDParser.h:150
unsigned m_currentLevel
Definition: VSDParser.h:151
virtual void readLine(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:868
virtual void readShapeList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1197
VSDStencil * m_currentStencil
Definition: VSDParser.h:154
VSDParser(const VSDParser &)
virtual ~VSDParser()
Definition: VSDParser.cpp:34
void _flushShape()
Definition: VSDParser.cpp:634
std::map< unsigned, VSDName > m_fonts
Definition: VSDParser.h:175
bool extractStencils()
Definition: VSDParser.cpp:193
VSDName m_currentPageName
Definition: VSDParser.h:178
void readOLEData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:782
unsigned m_currentLayerListLevel
Definition: VSDParser.h:161
VSDCollector * m_collector
Definition: VSDParser.h:149
void _nameFromId(VSDName &name, unsigned id, unsigned level)
Definition: VSDParser.cpp:38
virtual void readStyleSheet(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1885
double m_shadowOffsetY
Definition: VSDParser.h:170
virtual void readMisc(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2241
virtual void readCharIX(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1925
VSDShape m_shape
Definition: VSDParser.h:155
void readForeignData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:764
VSDStencils m_stencils
Definition: VSDParser.h:153
void readGeometry(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1088
bool m_isInStyles
Definition: VSDParser.h:157
virtual unsigned getUInt(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2292
virtual void readName2(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2157
virtual void readNameList2(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1710
void readPolylineTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1496
void readEllipse(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:849
void readMoveTo(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1099
void readSplineStart(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1678
virtual void readXForm1D(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1154
virtual void readPropList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:997
void readPageSheet(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1897
virtual void readLayer(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1041
void readInfiniteLine(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1595
virtual void readLayerMem(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1064
virtual void readNameIDX123(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:833
std::map< unsigned, VSDName > m_names
Definition: VSDParser.h:176
std::map< unsigned, VSDTabStop > * m_currentTabSet
Definition: VSDParser.h:180
librevenge::RVNGDrawingInterface * m_painter
Definition: VSDParser.h:146
virtual void readName(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2146
std::vector< Colour > m_colours
Definition: VSDParser.h:164
void readShapeData(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1609
void readFont(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1753
virtual void readFillAndShadow(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:2078
virtual void readFieldList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1715
virtual void readTabsDataList(librevenge::RVNGInputStream *input)
Definition: VSDParser.cpp:1001
Definition: VSDShapeList.h:20
Definition: VSDStencils.h:27
Definition: VSDStencils.h:62
Definition: VSDStencils.h:78
Definition: VisioDocument.h:30
Definition: VSDTypes.h:61
Definition: VSDTypes.h:73
Definition: VSDParser.h:35
unsigned Type
Definition: VSDParser.h:40
Pointer(const Pointer &ptr)
Definition: VSDParser.h:38
unsigned Offset
Definition: VSDParser.h:41
unsigned short Format
Definition: VSDParser.h:43
unsigned Length
Definition: VSDParser.h:42
Pointer()
Definition: VSDParser.h:36
unsigned ListSize
Definition: VSDParser.h:44

Generated for libvisio by doxygen 1.9.2