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),
66  contentType(ContentType::UNKNOWN), shapeType(ShapeType::UNKNOWN),
67  boxType(BoxType::UNKNOWN), cornerType(CornerType::DEFAULT)
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);
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);
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
bool vflip
Definition: QXP4Parser.h:55
Color color
Definition: QXP4Parser.h:44
void parseLineStyles(const std::shared_ptr< librevenge::RVNGInputStream > &docStream)
Definition: QXP4Parser.cpp:243
void readPictureSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, std::shared_ptr< PictureBox > &picturebox)
Definition: QXP4Parser.cpp:1086
ObjectHeader parseObjectHeader(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXP4Deobfuscator &deobfuscate)
Definition: QXP4Parser.cpp:530
ParagraphFormat parseParagraphFormat(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:374
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:336
double rotation
Definition: QXP4Parser.h:51
void readTextPathSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, TextPathSettings &settings)
Definition: QXP4Parser.cpp:1039
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:437
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:1018
Definition: QXPParser.h:29
ShapeType
Definition: QXP4Parser.h:27
void parsePictureBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:747
double skew
Definition: QXP4Parser.h:52
void parseColor(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const std::vector< ColorBlockSpec > &blocks)
Definition: QXP4Parser.cpp:169
void parseLineText(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:781
ContentType contentType
Definition: QXP4Parser.h:57
void parseEmptyBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:694
void readImageData(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:1097
unsigned contentIndex
Definition: QXP4Parser.h:46
void skipTemplates(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:322
const std::shared_ptr< QXP4Header > m_header
Definition: QXP4Parser.h:82
unsigned linkId
Definition: QXP4Parser.h:47
void parseObject(const std::shared_ptr< librevenge::RVNGInputStream > &stream, QXP4Deobfuscator &deobfuscate, QXPCollector &collector, const Page &page)
Definition: QXP4Parser.cpp:445
void parseBezierPictureBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:717
void parseGroup(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector, const Page &page)
Definition: QXP4Parser.cpp:955
std::shared_ptr< HJ > parseHJ(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:426
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:123
void readTextSettings(const std::shared_ptr< librevenge::RVNGInputStream > &stream, TextSettings &settings)
Definition: QXP4Parser.cpp:1024
void readOleObject(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:1080
void parseLine(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:645
void readBezierData(const std::shared_ptr< librevenge::RVNGInputStream > &stream, std::vector< CurveComponent > &curveComponents, Rect &bbox)
Definition: QXP4Parser.cpp:1103
void skipParagraphStylesheets(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:193
void parseTextBox(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:907
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:823
ColorBlockSpec parseColorBlockSpec(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:160
Definition: QXPTypes.h:415
void parseBezierLine(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, QXPCollector &collector)
Definition: QXP4Parser.cpp:661
CornerType cornerType
Definition: QXP4Parser.h:61
Definition: QXPTypes.h:144
Definition: QXPTypes.h:247
CharFormat parseCharFormat(const std::shared_ptr< librevenge::RVNGInputStream > &stream) override
Definition: QXP4Parser.cpp:217
BoxType boxType
Definition: QXP4Parser.h:60
Frame readFrame(const std::shared_ptr< librevenge::RVNGInputStream > &stream)
Definition: QXP4Parser.cpp:987
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:1011
CornerType
Definition: QXPTypes.h:469
void skipTextObjectEnd(const std::shared_ptr< librevenge::RVNGInputStream > &stream, const ObjectHeader &header, const LinkedTextSettings &linkedTextSettings)
Definition: QXP4Parser.cpp:1164
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:863
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:675
Definition: QXPTypes.h:68
Definition: QXPTypes.h:344
Definition: QXPTypes.h:386
Definition: QXPCollector.h:27

Generated for libqxp by doxygen 1.8.13