QXP4Parser.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 libqxp 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 QXP4PARSER_H_INCLUDED
11 #define QXP4PARSER_H_INCLUDED
12 
13 #include "QXPParser.h"
14 #include <vector>
15 
16 namespace libqxp
17 {
18 
19 class QXP4Deobfuscator;
20 class QXP4Header;
21 
22 class QXP4Parser : public QXPParser
23 {
24 public:
25  QXP4Parser(const std::shared_ptr<librevenge::RVNGInputStream> &input, librevenge::RVNGDrawingInterface *painter, const std::shared_ptr<QXP4Header> &header);
26 
27  enum class ShapeType
28  {
29  UNKNOWN,
30  LINE,
33  RECTANGLE,
37  OVAL,
39  };
40 
41  struct ObjectHeader
42  {
43  boost::optional<Color> fillColor;
45 
46  unsigned contentIndex;
47  unsigned linkId;
48  unsigned oleId;
49  unsigned gradientId;
50 
51  double rotation;
52  double skew;
53 
54  bool hflip;
55  bool vflip;
56 
59 
62 
64  : fillColor(), color(), contentIndex(0), linkId(0), oleId(0), gradientId(0),
65  rotation(0), skew(0), hflip(false), vflip(false),
68  { }
69  };
70 
71 private:
73  {
74  unsigned offset;
75  unsigned padding;
76 
78  : offset(0), padding(0)
79  { }
80  };
81 
82  const std::shared_ptr<QXP4Header> m_header;
83 
84  std::vector<std::vector<TabStop>> m_paragraphTabStops;
85 
86  bool parseDocument(const std::shared_ptr<librevenge::RVNGInputStream> &docStream, QXPCollector &collector) override;
87  bool parsePages(const std::shared_ptr<librevenge::RVNGInputStream> &stream, QXPCollector &collector) override;
88 
89  void parseColors(const std::shared_ptr<librevenge::RVNGInputStream> &docStream);
90  ColorBlockSpec parseColorBlockSpec(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
91  void parseColor(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const std::vector<ColorBlockSpec> &blocks);
92  void skipParagraphStylesheets(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
93  CharFormat parseCharFormat(const std::shared_ptr<librevenge::RVNGInputStream> &stream) override;
94  void parseLineStyles(const std::shared_ptr<librevenge::RVNGInputStream> &docStream);
95  void skipTemplates(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
96  void parseTabStops(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
97  ParagraphFormat parseParagraphFormat(const std::shared_ptr<librevenge::RVNGInputStream> &stream) override;
98  std::shared_ptr<HJ> parseHJ(const std::shared_ptr<librevenge::RVNGInputStream> &stream) override;
99 
100  Page parsePage(const std::shared_ptr<librevenge::RVNGInputStream> &stream, QXP4Deobfuscator &deobfuscate);
101 
102  void parseObject(const std::shared_ptr<librevenge::RVNGInputStream> &stream, QXP4Deobfuscator &deobfuscate, QXPCollector &collector, const Page &page, unsigned index);
103  ObjectHeader parseObjectHeader(const std::shared_ptr<librevenge::RVNGInputStream> &stream, QXP4Deobfuscator &deobfuscate);
104  void parseLine(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
105  void parseBezierLine(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
106  void parseBezierEmptyBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
107  void parseEmptyBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
108  void parseBezierPictureBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
109  void parsePictureBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
110  void parseLineText(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
111  void parseBezierText(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
112  void parseBezierTextBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
113  void parseTextBox(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector);
114  void parseGroup(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, QXPCollector &collector, const Page &page, unsigned index);
115 
116  Frame readFrame(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
117  bool readRunaround(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
118  void readLinkedTextSettings(const std::shared_ptr<librevenge::RVNGInputStream> &stream, LinkedTextSettings &settings);
119  void readTextSettings(const std::shared_ptr<librevenge::RVNGInputStream> &stream, TextSettings &settings);
120  void readTextPathSettings(const std::shared_ptr<librevenge::RVNGInputStream> &stream, TextPathSettings &settings);
121  void readOleObject(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
122  void readPictureSettings(const std::shared_ptr<librevenge::RVNGInputStream> &stream, std::shared_ptr<PictureBox> &picturebox);
123  void readImageData(const std::shared_ptr<librevenge::RVNGInputStream> &stream);
124  void readBezierData(const std::shared_ptr<librevenge::RVNGInputStream> &stream, std::vector<CurveComponent> &curveComponents, Rect &bbox);
125  void skipTextObjectEnd(const std::shared_ptr<librevenge::RVNGInputStream> &stream, const ObjectHeader &header, const LinkedTextSettings &linkedTextSettings);
126 };
127 
128 }
129 
130 #endif // QXP4PARSER_H_INCLUDED
131 
132 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
unsigned oleId
Definition: QXP4Parser.h:48
void parseObject(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXP4Deobfuscator &deobfuscate, QXPCollector &collector, const Page &page, unsigned index)
Definition: QXP4Parser.cpp:466
bool vflip
Definition: QXP4Parser.h:55
Color color
Definition: QXP4Parser.h:44
void parseLineStyles(const std::shared_ptr< librevenge::RVNGInputStream > &docStream)
Definition: QXP4Parser.cpp:253
void readPictureSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, std::shared_ptr< PictureBox > &picturebox)
Definition: QXP4Parser.cpp:1098
ObjectHeader parseObjectHeader(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXP4Deobfuscator &deobfuscate)
Definition: QXP4Parser.cpp:551
ParagraphFormat parseParagraphFormat(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:395
BoxType
Definition: QXPTypes.h:477
QXP4Parser(const std::shared_ptr< librevenge::RVNGInputStream > &input, librevenge::RVNGDrawingInterface *painter, const std::shared_ptr< QXP4Header > &header)
Definition: QXP4Parser.cpp:50
Definition: libqxp_utils.cpp:24
void parseTabStops(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:357
double rotation
Definition: QXP4Parser.h:51
void readTextPathSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, TextPathSettings &settings)
Definition: QXP4Parser.cpp:1051
unsigned gradientId
Definition: QXP4Parser.h:49
bool hflip
Definition: QXP4Parser.h:54
Page parsePage(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXP4Deobfuscator &deobfuscate)
Definition: QXP4Parser.cpp:458
ColorBlockSpec()
Definition: QXP4Parser.h:77
unsigned padding
Definition: QXP4Parser.h:75
Definition: QXPTypes.h:361
void readLinkedTextSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, LinkedTextSettings &settings)
Definition: QXP4Parser.cpp:1030
Definition: QXPParser.h:30
ShapeType
Definition: QXP4Parser.h:27
void parsePictureBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:768
double skew
Definition: QXP4Parser.h:52
void parseColor(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const std::vector< ColorBlockSpec > &blocks)
Definition: QXP4Parser.cpp:173
void parseLineText(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:802
ContentType contentType
Definition: QXP4Parser.h:57
void parseEmptyBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:715
void readImageData(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:1109
unsigned contentIndex
Definition: QXP4Parser.h:46
void skipTemplates(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:332
const std::shared_ptr< QXP4Header > m_header
Definition: QXP4Parser.h:82
unsigned linkId
Definition: QXP4Parser.h:47
void parseBezierPictureBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:738
std::shared_ptr< HJ > parseHJ(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:447
Definition: QXP4Parser.h:72
boost::optional< Color > fillColor
Definition: QXP4Parser.h:43
unsigned offset
Definition: QXP4Parser.h:74
void parseColors(const std::shared_ptr< librevenge::RVNGInputStream > &docStream)
Definition: QXP4Parser.cpp:121
void readTextSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, TextSettings &settings)
Definition: QXP4Parser.cpp:1036
void readOleObject(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:1092
void parseLine(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:666
void readBezierData(const std::shared_ptr< librevenge::RVNGInputStream > &stream, std::vector< CurveComponent > &curveComponents, Rect &bbox)
Definition: QXP4Parser.cpp:1115
void skipParagraphStylesheets(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:197
void parseTextBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:928
Definition: QXP4Parser.h:22
Definition: QXP4Deobfuscator.h:19
void parseBezierText(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:844
ColorBlockSpec parseColorBlockSpec(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:164
Definition: QXPTypes.h:415
void parseBezierLine(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:682
CornerType cornerType
Definition: QXP4Parser.h:61
Definition: QXPTypes.h:144
void parseGroup(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector, const Page &page, unsigned index)
Definition: QXP4Parser.cpp:976
Definition: QXPTypes.h:247
CharFormat parseCharFormat(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:227
BoxType boxType
Definition: QXP4Parser.h:60
Frame readFrame(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:999
std::vector< std::vector< TabStop > > m_paragraphTabStops
Definition: QXP4Parser.h:84
Definition: QXPTypes.h:46
ShapeType shapeType
Definition: QXP4Parser.h:58
bool readRunaround(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:1023
CornerType
Definition: QXPTypes.h:469
void skipTextObjectEnd(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, const LinkedTextSettings &linkedTextSettings)
Definition: QXP4Parser.cpp:1176
ObjectHeader()
Definition: QXP4Parser.h:63
Definition: QXP4Parser.h:41
void parseBezierTextBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:884
bool parsePages(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXPCollector &collector) override
Definition: QXP4Parser.cpp:95
ContentType
Definition: QXPTypes.h:265
bool parseDocument(const std::shared_ptr< librevenge::RVNGInputStream > &docStream, QXPCollector &collector) override
Definition: QXP4Parser.cpp:57
Definition: QXPTypes.h:545
void parseBezierEmptyBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:696
Definition: QXPTypes.h:68
Definition: QXPHeader.h:24
Definition: QXPTypes.h:344
Definition: QXPTypes.h:386
Definition: QXPCollector.h:27

Generated for libqxp by doxygen 1.8.15