ZMF4Parser.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 a part of the libzmf 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 ZMF4PARSER_H_INCLUDED
11 #define ZMF4PARSER_H_INCLUDED
12 
13 #include <librevenge/librevenge.h>
14 #include "libzmf_utils.h"
15 #include "ZMF4Header.h"
16 #include "ZMFCollector.h"
17 #include "ZMFTypes.h"
18 #include <functional>
19 #include <vector>
20 #include <map>
21 #include <boost/optional.hpp>
22 
23 namespace libzmf
24 {
25 
27 {
28  // disable copying
29  ZMF4Parser(const ZMF4Parser &other) = delete;
30  ZMF4Parser &operator=(const ZMF4Parser &other) = delete;
31 
32 public:
33  ZMF4Parser(const RVNGInputStreamPtr &input, librevenge::RVNGDrawingInterface *painter);
34  bool parse();
35 
36 private:
37  enum class ObjectType
38  {
39  UNKNOWN,
40  FILL,
42  PEN,
43  SHADOW,
44  ARROW,
45  FONT,
46  PARAGRAPH,
47  TEXT,
48  BITMAP,
49  PAGE_START,
50  GUIDELINES,
51  PAGE_END,
53  LAYER_END,
56  RECTANGLE,
57  ELLIPSE,
58  POLYGON,
59  CURVE,
60  IMAGE,
61  TEXT_FRAME,
62  TABLE,
64  GROUP_END
65  };
66 
67  struct ObjectHeader
68  {
70  uint32_t size;
71  uint32_t nextObjectOffset;
72  boost::optional<uint32_t> id;
73  uint32_t refObjCount;
75 
77  : type()
78  , size(0)
79  , nextObjectOffset(0)
80  , id()
81  , refObjCount(0)
83  { }
84  };
85 
86  struct ObjectRef
87  {
88  uint32_t id;
89  uint32_t tag;
90  };
91 
92  static ObjectType parseObjectType(uint8_t type);
93 
95 
96  std::vector<ObjectRef> readObjectRefs();
97 
98  boost::optional<Fill> getFillByRefId(uint32_t id);
99  boost::optional<Pen> getPenByRefId(uint32_t id);
100  boost::optional<Shadow> getShadowByRefId(uint32_t id);
101  boost::optional<Transparency> getTransparencyByRefId(uint32_t id);
102  boost::optional<Font> getFontByRefId(uint32_t id);
103  boost::optional<ParagraphStyle> getParagraphStyleByRefId(uint32_t id);
104  boost::optional<Text> getTextByRefId(uint32_t id);
105  boost::optional<Image> getImageByRefId(uint32_t id);
106  ArrowPtr getArrowByRefId(uint32_t id);
107 
108  Style readStyle();
109 
110  Point readPoint();
112 
114 
115  void readCurveSectionTypes(std::vector<CurveType> &sectionTypes);
116  std::vector<Curve> readCurveComponents(std::function<Point()> readPointFunc);
117 
118  Color readColor();
119  Gradient readGradient(uint32_t type);
120 
121  void readPreviewBitmap();
122 
123  void readDocumentSettings();
124  void readPage();
125  void readLayer(const ObjectHeader &layerStartObjHeader);
126 
127  void readPen();
128  void readFill();
129  void readTransparency();
130  void readShadow();
131 
132  void readArrow();
133 
134  void readBitmap();
135 
136  void readImage();
137 
138  void readFont();
139  void readParagraphStyle();
140  void readText();
141 
142  void readTextFrame();
143 
144  void readCurve();
145  void readRectangle();
146  void readEllipse();
147  void readPolygon();
148 
149  void readTable();
150 
152  uint32_t m_inputLength;
153 
155 
157 
159 
161 
163 
164  std::map<uint32_t, Pen> m_pens;
165  std::map<uint32_t, Fill> m_fills;
166  std::map<uint32_t, Transparency> m_transparencies;
167  std::map<uint32_t, Shadow> m_shadows;
168  std::map<uint32_t, ArrowPtr> m_arrows;
169 
170  std::map<uint32_t, Image> m_images;
171 
172  std::map<uint32_t, Font> m_fonts;
173  std::map<uint32_t, ParagraphStyle> m_paragraphStyles;
174  std::map<uint32_t, Text> m_texts;
175 };
176 
177 }
178 
179 #endif // ZMF4PARSER_H_INCLUDED
180 
181 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition: ZMF4Parser.h:26
ZMF4Header m_header
Definition: ZMF4Parser.h:156
Definition: ZMFTypes.h:24
void readCurveSectionTypes(std::vector< CurveType > &sectionTypes)
Definition: ZMF4Parser.cpp:356
boost::optional< Transparency > getTransparencyByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:252
std::map< uint32_t, Font > m_fonts
Definition: ZMF4Parser.h:172
const RVNGInputStreamPtr m_input
Definition: ZMF4Parser.h:151
std::map< uint32_t, Transparency > m_transparencies
Definition: ZMF4Parser.h:166
boost::optional< ParagraphStyle > getParagraphStyleByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:262
uint32_t m_inputLength
Definition: ZMF4Parser.h:152
boost::optional< Fill > getFillByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:237
void readPage()
Definition: ZMF4Parser.cpp:533
uint32_t refListStartOffset
Definition: ZMF4Parser.h:74
void readImage()
Definition: ZMF4Parser.cpp:997
ZMFPageSettings m_pageSettings
Definition: ZMF4Parser.h:158
bool parse()
Definition: ZMF4Parser.cpp:72
Point readUnscaledPoint()
Definition: ZMF4Parser.cpp:320
void readPolygon()
Definition: ZMF4Parser.cpp:1280
boost::optional< Shadow > getShadowByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:247
std::map< uint32_t, Pen > m_pens
Definition: ZMF4Parser.h:164
boost::optional< uint32_t > id
Definition: ZMF4Parser.h:72
void readFill()
Definition: ZMF4Parser.cpp:678
uint32_t nextObjectOffset
Definition: ZMF4Parser.h:71
void readTransparency()
Definition: ZMF4Parser.cpp:749
ZMF4Parser(const ZMF4Parser &other)=delete
Point readPoint()
Definition: ZMF4Parser.cpp:313
Definition: ZMFTypes.h:389
Color readColor()
Definition: ZMF4Parser.cpp:423
Style readStyle()
Definition: ZMF4Parser.cpp:283
boost::optional< Pen > getPenByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:242
Definition: ZMFTypes.h:46
uint32_t id
Definition: ZMF4Parser.h:88
std::vector< Curve > readCurveComponents(std::function< Point()> readPointFunc)
Definition: ZMF4Parser.cpp:379
Definition: ZMFTypes.h:97
Definition: ZMFTypes.h:191
std::map< uint32_t, Text > m_texts
Definition: ZMF4Parser.h:174
void readEllipse()
Definition: ZMF4Parser.cpp:1256
void readTable()
Definition: ZMF4Parser.cpp:1323
ObjectHeader m_currentObjectHeader
Definition: ZMF4Parser.h:162
Definition: ZMF4Header.h:18
static ObjectType parseObjectType(uint8_t type)
Definition: ZMF4Parser.cpp:104
std::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
Definition: libzmf_utils.h:80
void readShadow()
Definition: ZMF4Parser.cpp:888
ObjectHeader readObjectHeader()
Definition: ZMF4Parser.cpp:164
std::map< uint32_t, ArrowPtr > m_arrows
Definition: ZMF4Parser.h:168
Gradient readGradient(uint32_t type)
Definition: ZMF4Parser.cpp:432
std::map< uint32_t, Image > m_images
Definition: ZMF4Parser.h:170
int m_pageNumber
Definition: ZMF4Parser.h:160
void readDocumentSettings()
Definition: ZMF4Parser.cpp:507
void readPen()
Definition: ZMF4Parser.cpp:772
std::map< uint32_t, Shadow > m_shadows
Definition: ZMF4Parser.h:167
ZMFCollector m_collector
Definition: ZMF4Parser.h:154
Definition: ZMF4Parser.h:86
void readRectangle()
Definition: ZMF4Parser.cpp:1244
ObjectType type
Definition: ZMF4Parser.h:69
std::vector< ObjectRef > readObjectRefs()
Definition: ZMF4Parser.cpp:201
Definition: BMIHeader.cpp:13
boost::optional< Font > getFontByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:257
void readText()
Definition: ZMF4Parser.cpp:1123
uint32_t refObjCount
Definition: ZMF4Parser.h:73
boost::optional< Text > getTextByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:267
BoundingBox readBoundingBox()
Definition: ZMF4Parser.cpp:327
ArrowPtr getArrowByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:277
void readCurve()
Definition: ZMF4Parser.cpp:1233
Definition: ZMFTypes.h:258
Definition: ZMFCollector.h:21
uint32_t tag
Definition: ZMF4Parser.h:89
void readBitmap()
Definition: ZMF4Parser.cpp:961
std::shared_ptr< Arrow > ArrowPtr
Definition: ZMFTypes.h:139
void readPreviewBitmap()
Definition: ZMF4Parser.cpp:498
void readArrow()
Definition: ZMF4Parser.cpp:940
void readTextFrame()
Definition: ZMF4Parser.cpp:1196
uint32_t size
Definition: ZMF4Parser.h:70
std::map< uint32_t, ParagraphStyle > m_paragraphStyles
Definition: ZMF4Parser.h:173
ObjectHeader()
Definition: ZMF4Parser.h:76
std::map< uint32_t, Fill > m_fills
Definition: ZMF4Parser.h:165
void readLayer(const ObjectHeader &layerStartObjHeader)
Definition: ZMF4Parser.cpp:594
boost::optional< Image > getImageByRefId(uint32_t id)
Definition: ZMF4Parser.cpp:272
ZMF4Parser & operator=(const ZMF4Parser &other)=delete
Definition: ZMF4Parser.h:67
ObjectType
Definition: ZMF4Parser.h:37
void readParagraphStyle()
Definition: ZMF4Parser.cpp:1061
void readFont()
Definition: ZMF4Parser.cpp:1028

Generated for libzmf by doxygen 1.8.14