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 <librevenge/librevenge.h>
19 #include "VSDTypes.h"
20 #include "VSDGeometryList.h"
21 #include "VSDFieldList.h"
22 #include "VSDCharacterList.h"
23 #include "VSDParagraphList.h"
24 #include "VSDShapeList.h"
25 #include "VSDStencils.h"
26 
27 namespace libvisio
28 {
29 
30 class VSDCollector;
31 
32 struct Pointer
33 {
35  : Type(0), Offset(0), Length(0), Format(0), ListSize(0) {}
36  Pointer(const Pointer &ptr)
37  : Type(ptr.Type), Offset(ptr.Offset), Length(ptr.Length), Format(ptr.Format), ListSize(ptr.ListSize) {}
38  unsigned Type;
39  unsigned Offset;
40  unsigned Length;
41  unsigned short Format;
42  unsigned ListSize;
43 };
44 
45 class VSDParser
46 {
47 public:
48  explicit VSDParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter);
49  virtual ~VSDParser();
50  bool parseMain();
51  bool extractStencils();
52 
53 protected:
54  // reader functions
55  void readEllipticalArcTo(librevenge::RVNGInputStream *input);
56  void readForeignData(librevenge::RVNGInputStream *input);
57  void readEllipse(librevenge::RVNGInputStream *input);
58  virtual void readLine(librevenge::RVNGInputStream *input);
59  virtual void readFillAndShadow(librevenge::RVNGInputStream *input);
60  virtual void readGeomList(librevenge::RVNGInputStream *input);
61  void readGeometry(librevenge::RVNGInputStream *input);
62  void readMoveTo(librevenge::RVNGInputStream *input);
63  void readLineTo(librevenge::RVNGInputStream *input);
64  void readArcTo(librevenge::RVNGInputStream *input);
65  void readNURBSTo(librevenge::RVNGInputStream *input);
66  void readPolylineTo(librevenge::RVNGInputStream *input);
67  void readInfiniteLine(librevenge::RVNGInputStream *input);
68  void readShapeData(librevenge::RVNGInputStream *input);
69  void readXFormData(librevenge::RVNGInputStream *input);
70  void readTxtXForm(librevenge::RVNGInputStream *input);
71  void readShapeId(librevenge::RVNGInputStream *input);
72  virtual void readShapeList(librevenge::RVNGInputStream *input);
73  void readForeignDataType(librevenge::RVNGInputStream *input);
74  void readPageProps(librevenge::RVNGInputStream *input);
75  virtual void readShape(librevenge::RVNGInputStream *input);
76  void readColours(librevenge::RVNGInputStream *input);
77  void readFont(librevenge::RVNGInputStream *input);
78  void readFontIX(librevenge::RVNGInputStream *input);
79  virtual void readCharList(librevenge::RVNGInputStream *input);
80  virtual void readParaList(librevenge::RVNGInputStream *input);
81  virtual void readPropList(librevenge::RVNGInputStream *input);
82  virtual void readPage(librevenge::RVNGInputStream *input);
83  virtual void readText(librevenge::RVNGInputStream *input);
84  virtual void readCharIX(librevenge::RVNGInputStream *input);
85  virtual void readParaIX(librevenge::RVNGInputStream *input);
86  virtual void readTextBlock(librevenge::RVNGInputStream *input);
87 
88  void readNameList(librevenge::RVNGInputStream *input);
89  virtual void readName(librevenge::RVNGInputStream *input);
90 
91  virtual void readNameList2(librevenge::RVNGInputStream *input);
92  virtual void readName2(librevenge::RVNGInputStream *input);
93 
94  virtual void readFieldList(librevenge::RVNGInputStream *input);
95  virtual void readTextField(librevenge::RVNGInputStream *input);
96 
97  virtual void readStyleSheet(librevenge::RVNGInputStream *input);
98  void readPageSheet(librevenge::RVNGInputStream *input);
99 
100  void readSplineStart(librevenge::RVNGInputStream *input);
101  void readSplineKnot(librevenge::RVNGInputStream *input);
102 
103  void readStencilShape(librevenge::RVNGInputStream *input);
104 
105  void readOLEList(librevenge::RVNGInputStream *input);
106  void readOLEData(librevenge::RVNGInputStream *input);
107 
108  virtual void readNameIDX(librevenge::RVNGInputStream *input);
109  virtual void readNameIDX123(librevenge::RVNGInputStream *input);
110 
111  void readMisc(librevenge::RVNGInputStream *input);
112 
113  // parser of one pass
114  bool parseDocument(librevenge::RVNGInputStream *input, unsigned shift);
115 
116  // Stream handlers
117  void handleStreams(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned level);
118  void handleStream(const Pointer &ptr, unsigned idx, unsigned level);
119  void handleChunks(librevenge::RVNGInputStream *input, unsigned level);
120  void handleChunk(librevenge::RVNGInputStream *input);
121  void handleBlob(librevenge::RVNGInputStream *input, unsigned shift, unsigned level);
122 
123  virtual void readPointer(librevenge::RVNGInputStream *input, Pointer &ptr);
124  virtual void readPointerInfo(librevenge::RVNGInputStream *input, unsigned ptrType, unsigned shift, unsigned &listSize, int &pointerCount);
125  virtual bool getChunkHeader(librevenge::RVNGInputStream *input);
126  void _handleLevelChange(unsigned level);
127  Colour _colourFromIndex(unsigned idx);
128  void _flushShape();
129  void _nameFromId(VSDName &name, unsigned id, unsigned level);
130 
131  virtual unsigned getUInt(librevenge::RVNGInputStream *input);
132  virtual int getInt(librevenge::RVNGInputStream *input);
133 
134  librevenge::RVNGInputStream *m_input;
135  librevenge::RVNGDrawingInterface *m_painter;
139  unsigned m_currentLevel;
140 
148 
150  std::vector<Colour> m_colours;
151 
154 
157 
160 
161  std::map<unsigned, VSDName> m_fonts;
162  std::map<unsigned, VSDName> m_names;
163  std::map<unsigned, std::map<unsigned, VSDName> > m_namesMapMap;
165 
166 private:
167  VSDParser();
168  VSDParser(const VSDParser &);
169  VSDParser &operator=(const VSDParser &);
170 
171 };
172 
173 } // namespace libvisio
174 
175 #endif // __VSDPARSER_H__
176 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */

Generated for libvisio by doxygen 1.8.4