MSPUBCollector.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 libmspub 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 INCLUDED_MSPUBCOLLECTOR_H
11#define INCLUDED_MSPUBCOLLECTOR_H
12
13#include <list>
14#include <map>
15#include <set>
16#include <utility>
17#include <vector>
18
19#include <librevenge/librevenge.h>
20
21#include "BorderArtInfo.h"
22#include "ColorReference.h"
23#include "EmbeddedFontInfo.h"
24#include "MSPUBTypes.h"
25#include "PolygonUtils.h"
26#include "ShapeInfo.h"
27#include "ShapeType.h"
28#include "VerticalAlign.h"
29
30namespace libmspub
31{
32
33class Fill;
36
37struct Arrow;
38struct Coordinate;
39struct Dash;
40struct Line;
41struct Shadow;
42struct TableInfo;
43
45{
46 friend class Fill;
47 friend class ImgFill;
48 friend class SolidFill;
49 friend class GradientFill;
50 friend class PatternFill;
51public:
52 typedef std::list<ContentChunkReference>::const_iterator ccr_iterator_t;
53
54 MSPUBCollector(librevenge::RVNGDrawingInterface *painter);
55 virtual ~MSPUBCollector();
56
57 // collector functions
58 void collectMetaData(const librevenge::RVNGPropertyList &metaData);
59
60 bool addPage(unsigned seqNum);
61 bool addTextString(const std::vector<TextParagraph> &str, unsigned id);
62 void addTextShape(unsigned stringId, unsigned seqNum);
63 bool addImage(unsigned index, ImgType type, librevenge::RVNGBinaryData img);
64 void setBorderImageOffset(unsigned index, unsigned offset);
65 librevenge::RVNGBinaryData *addBorderImage(ImgType type, unsigned borderArtIndex);
66 void setShapePage(unsigned seqNum, unsigned pageSeqNum);
67
68 void setNextPage(unsigned seqNum);
69
70 void setShapeType(unsigned seqNum, ShapeType type);
71 void setShapeCropType(unsigned seqNum, ShapeType cropType);
72 void setShapePictureRecolor(unsigned seqNum, const ColorReference &recolor);
73 void setShapePictureBrightness(unsigned seqNum, int brightness);
74 void setShapePictureContrast(unsigned seqNum, int contrast);
75 void setShapeTableInfo(unsigned seqNum, const TableInfo &ti);
76 void setShapeBorderImageId(unsigned seqNum, unsigned borderImageId);
77 void setShapeCoordinatesInEmu(unsigned seqNum, int xs, int ys, int xe, int ye);
78 void setShapeImgIndex(unsigned seqNum, unsigned index);
79 void setShapeFill(unsigned seqNum, std::shared_ptr<Fill> fill, bool skipIfNotBg);
80 void setShapeDash(unsigned seqNum, const Dash &dash);
81 void setAdjustValue(unsigned seqNum, unsigned index, int adjust);
82 void setShapeRotation(unsigned seqNum, double rotation);
83 void setShapeFlip(unsigned, bool, bool);
84 void setShapeMargins(unsigned seqNum, unsigned left, unsigned top, unsigned right, unsigned bottom);
85 void setShapeBorderPosition(unsigned seqNum, BorderPosition pos);
86 void setShapeCoordinatesRotated90(unsigned seqNum);
87 void setShapeCustomPath(unsigned seqNum,
88 const DynamicCustomShape &shape);
89 void setShapeClipPath(unsigned seqNum, const std::vector<libmspub::Vertex> &clip);
90 void setShapeVerticalTextAlign(unsigned seqNum, VerticalAlign va);
91 void designateMasterPage(unsigned seqNum);
92 void setMasterPage(unsigned pageSeqNum, unsigned masterSeqNum);
93 void setShapeStretchBorderArt(unsigned seqNum);
94 void setShapeShadow(unsigned seqNum, const Shadow &shadow);
95
96 // Microsoft "Embedded OpenType" ... need to figure out how to convert
97 // this to a sane format and how to get LibreOffice to understand embedded fonts.
98 void addEOTFont(const librevenge::RVNGString &name, const librevenge::RVNGBinaryData &data);
99
100 void beginGroup();
101 bool endGroup();
102
103 void setShapeLineBackColor(unsigned seqNum, ColorReference backColor);
104 void addShapeLine(unsigned seqNum, Line line);
105 void setShapeOrder(unsigned seqNum);
106 void setPageBgShape(unsigned pageSeqNum, unsigned seqNum);
107 void setWidthInEmu(unsigned long);
108 void setHeightInEmu(unsigned long);
109 void setShapeNumColumns(unsigned seqNum, unsigned numColumns);
110 void setShapeColumnSpacing(unsigned seqNum, unsigned spacing);
111 void setShapeBeginArrow(unsigned seqNum, const Arrow &arrow);
112 void setShapeEndArrow(unsigned seqNum, const Arrow &arrow);
113
115 void addFont(std::vector<unsigned char> name);
116
117 void addDefaultCharacterStyle(const CharacterStyle &style);
118 void addDefaultParagraphStyle(const ParagraphStyle &style);
120 bool setCurrentGroupSeqNum(unsigned seqNum);
121
123
124 void setTableCellTextEnds(unsigned textId, const std::vector<unsigned> &ends);
125 void setTextStringOffset(unsigned textId, unsigned offset);
126
127 bool go();
128
129 bool hasPage(unsigned seqNum) const;
130private:
131
132 struct PageInfo
133 {
134 std::vector<std::shared_ptr<ShapeGroupElement>> m_shapeGroupsOrdered;
136 };
137
140
141 librevenge::RVNGDrawingInterface *m_painter;
142 std::list<ContentChunkReference> m_contentChunkReferences;
145 unsigned short m_numPages;
146 std::map<unsigned, std::vector<TextParagraph> > m_textStringsById;
147 std::map<unsigned, PageInfo> m_pagesBySeqNum;
148 std::vector<std::pair<ImgType, librevenge::RVNGBinaryData> > m_images;
149 std::vector<BorderArtInfo> m_borderImages;
150 std::vector<ColorReference> m_textColors;
151 std::vector<std::vector<unsigned char> > m_fonts;
152 std::vector<CharacterStyle> m_defaultCharStyles;
153 std::vector<ParagraphStyle> m_defaultParaStyles;
154 std::map<unsigned, ShapeType> m_shapeTypesBySeqNum;
155 std::vector<Color> m_paletteColors;
156 std::vector<unsigned> m_shapeSeqNumsOrdered;
157 std::map<unsigned, unsigned> m_pageSeqNumsByShapeSeqNum;
158 std::map<unsigned, unsigned> m_bgShapeSeqNumsByPageSeqNum;
159 std::set<unsigned> m_skipIfNotBgSeqNums;
160 std::shared_ptr<ShapeGroupElement> m_currentShapeGroup;
161 std::vector<std::shared_ptr<ShapeGroupElement>> m_topLevelShapes;
162 std::map<unsigned, std::shared_ptr<ShapeGroupElement>> m_groupsBySeqNum;
163 std::list<EmbeddedFontInfo> m_embeddedFonts;
164 std::map<unsigned, ShapeInfo> m_shapeInfosBySeqNum;
165 std::set<unsigned> m_masterPages;
167 std::map<unsigned, unsigned> m_masterPagesByPageSeqNum;
168 std::map<unsigned, std::vector<unsigned> > m_tableCellTextEndsByTextId;
169 std::map<unsigned, unsigned> m_stringOffsetsByTextId;
170 mutable std::vector<bool> m_calculationValuesSeen;
171 std::vector<unsigned> m_pageSeqNumsOrdered;
173 std::vector<unsigned char> m_allText;
174 mutable boost::optional<const char *> m_calculatedEncoding;
175 librevenge::RVNGPropertyList m_metaData;
176
177 // helper functions
178 std::vector<int> getShapeAdjustValues(const ShapeInfo &info) const;
179 boost::optional<unsigned> getMasterPageSeqNum(unsigned pageSeqNum) const;
180 void setRectCoordProps(Coordinate, librevenge::RVNGPropertyList *) const;
181 boost::optional<std::vector<libmspub::TextParagraph> > getShapeText(const ShapeInfo &info) const;
184 void assignShapesToPages();
185 void writePage(unsigned pageSeqNum) const;
186 void writePageShapes(unsigned pageSeqNum) const;
187 void writePageBackground(unsigned pageSeqNum) const;
188 void writeImage(double x, double y, double height, double width,
189 ImgType type, const librevenge::RVNGBinaryData &blob,
190 boost::optional<Color> oneBitColor) const;
191 bool pageIsMaster(unsigned pageSeqNum) const;
192
193 std::function<void(void)> paintShape(const ShapeInfo &info, const Coordinate &relativeTo, const VectorTransformation2D &foldedTransform, bool isGroup, const VectorTransformation2D &thisTransform) const;
194 double getCalculationValue(const ShapeInfo &info, unsigned index, bool recursiveEntry, const std::vector<int> &adjustValues) const;
195
196 librevenge::RVNGPropertyList getCharStyleProps(const CharacterStyle &, boost::optional<unsigned> defaultCharStyleIndex) const;
197 librevenge::RVNGPropertyList getParaStyleProps(const ParagraphStyle &, boost::optional<unsigned> defaultParaStyleIndex) const;
198 double getSpecialValue(const ShapeInfo &info, const CustomShape &shape, int arg, const std::vector<int> &adjustValues) const;
199 void ponderStringEncoding(const std::vector<TextParagraph> &str);
200 const char *getCalculatedEncoding() const;
201public:
202 static librevenge::RVNGString getColorString(const Color &);
203};
204
205} // namespace libmspub
206
207#endif /* INCLUDED_MSPUBCOLLECTOR_H */
208/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition ColorReference.h:20
Definition Fill.h:23
std::map< unsigned, std::vector< TextParagraph > > m_textStringsById
Definition MSPUBCollector.h:146
void setHeightInEmu(unsigned long)
Definition MSPUBCollector.cpp:1907
void writePage(unsigned pageSeqNum) const
Definition MSPUBCollector.cpp:1764
std::map< unsigned, ShapeInfo > m_shapeInfosBySeqNum
Definition MSPUBCollector.h:164
librevenge::RVNGPropertyList getParaStyleProps(const ParagraphStyle &, boost::optional< unsigned > defaultParaStyleIndex) const
Definition MSPUBCollector.cpp:1538
std::set< unsigned > m_masterPages
Definition MSPUBCollector.h:165
std::map< unsigned, PageInfo > m_pagesBySeqNum
Definition MSPUBCollector.h:147
void addShapeLine(unsigned seqNum, Line line)
Definition MSPUBCollector.cpp:565
bool addTextString(const std::vector< TextParagraph > &str, unsigned id)
Definition MSPUBCollector.cpp:1876
std::set< unsigned > m_skipIfNotBgSeqNums
Definition MSPUBCollector.h:159
std::vector< std::shared_ptr< ShapeGroupElement > > m_topLevelShapes
Definition MSPUBCollector.h:161
void setMasterPage(unsigned pageSeqNum, unsigned masterSeqNum)
Definition MSPUBCollector.cpp:1984
void setShapeStretchBorderArt(unsigned seqNum)
Definition MSPUBCollector.cpp:415
void setShapeOrder(unsigned seqNum)
Definition MSPUBCollector.cpp:601
void setNextPage(unsigned seqNum)
Definition MSPUBCollector.cpp:470
void setTableCellTextEnds(unsigned textId, const std::vector< unsigned > &ends)
Definition MSPUBCollector.cpp:504
std::vector< std::vector< unsigned char > > m_fonts
Definition MSPUBCollector.h:151
bool addPage(unsigned seqNum)
Definition MSPUBCollector.cpp:1492
friend class SolidFill
Definition MSPUBCollector.h:48
void setShapeColumnSpacing(unsigned seqNum, unsigned spacing)
Definition MSPUBCollector.cpp:409
boost::optional< unsigned > getMasterPageSeqNum(unsigned pageSeqNum) const
Definition MSPUBCollector.cpp:1753
void setShapeFlip(unsigned, bool, bool)
Definition MSPUBCollector.cpp:1467
void setShapeVerticalTextAlign(unsigned seqNum, VerticalAlign va)
Definition MSPUBCollector.cpp:385
std::map< unsigned, unsigned > m_masterPagesByPageSeqNum
Definition MSPUBCollector.h:167
bool go()
Definition MSPUBCollector.cpp:1832
std::vector< BorderArtInfo > m_borderImages
Definition MSPUBCollector.h:149
void setShapeCoordinatesRotated90(unsigned seqNum)
Definition MSPUBCollector.cpp:524
void addDefaultParagraphStyle(const ParagraphStyle &style)
Definition MSPUBCollector.cpp:1487
std::list< ContentChunkReference > m_contentChunkReferences
Definition MSPUBCollector.h:142
void setWidthInEmu(unsigned long)
Definition MSPUBCollector.cpp:1900
std::map< unsigned, unsigned > m_pageSeqNumsByShapeSeqNum
Definition MSPUBCollector.h:157
std::map< unsigned, std::shared_ptr< ShapeGroupElement > > m_groupsBySeqNum
Definition MSPUBCollector.h:162
void setShapeBeginArrow(unsigned seqNum, const Arrow &arrow)
Definition MSPUBCollector.cpp:379
std::vector< unsigned > m_pageSeqNumsOrdered
Definition MSPUBCollector.h:171
std::vector< unsigned char > m_allText
Definition MSPUBCollector.h:173
void setShapeFill(unsigned seqNum, std::shared_ptr< Fill > fill, bool skipIfNotBg)
Definition MSPUBCollector.cpp:1519
void setupShapeStructures(ShapeGroupElement &elt)
Definition MSPUBCollector.cpp:662
void setShapePictureContrast(unsigned seqNum, int contrast)
Definition MSPUBCollector.cpp:373
friend class ImgFill
Definition MSPUBCollector.h:47
void setShapeCoordinatesInEmu(unsigned seqNum, int xs, int ys, int xe, int ye)
Definition MSPUBCollector.cpp:1528
friend class GradientFill
Definition MSPUBCollector.h:49
std::list< ContentChunkReference >::const_iterator ccr_iterator_t
Definition MSPUBCollector.h:52
void setShapeLineBackColor(unsigned seqNum, ColorReference backColor)
Definition MSPUBCollector.cpp:1309
bool setCurrentGroupSeqNum(unsigned seqNum)
Definition MSPUBCollector.cpp:590
std::vector< unsigned > m_shapeSeqNumsOrdered
Definition MSPUBCollector.h:156
void setShapePictureRecolor(unsigned seqNum, const ColorReference &recolor)
Definition MSPUBCollector.cpp:361
std::list< EmbeddedFontInfo > m_embeddedFonts
Definition MSPUBCollector.h:163
bool m_widthSet
Definition MSPUBCollector.h:144
MSPUBCollector(librevenge::RVNGDrawingInterface *painter)
Definition MSPUBCollector.cpp:475
MSPUBCollector(const MSPUBCollector &)
void designateMasterPage(unsigned seqNum)
Definition MSPUBCollector.cpp:1979
void setShapeShadow(unsigned seqNum, const Shadow &shadow)
Definition MSPUBCollector.cpp:515
void addEOTFont(const librevenge::RVNGString &name, const librevenge::RVNGBinaryData &data)
Definition MSPUBCollector.cpp:356
void setShapeBorderImageId(unsigned seqNum, unsigned borderImageId)
Definition MSPUBCollector.cpp:529
double m_height
Definition MSPUBCollector.h:143
void setShapeNumColumns(unsigned seqNum, unsigned numColumns)
Definition MSPUBCollector.cpp:403
void setBorderImageOffset(unsigned index, unsigned offset)
Definition MSPUBCollector.cpp:1943
bool pageIsMaster(unsigned pageSeqNum) const
Definition MSPUBCollector.cpp:1827
void addFont(std::vector< unsigned char > name)
Definition MSPUBCollector.cpp:1533
void setPageBgShape(unsigned pageSeqNum, unsigned seqNum)
Definition MSPUBCollector.cpp:585
void writeImage(double x, double y, double height, double width, ImgType type, const librevenge::RVNGBinaryData &blob, boost::optional< Color > oneBitColor) const
Definition MSPUBCollector.cpp:1315
void setShapeRotation(unsigned seqNum, double rotation)
Definition MSPUBCollector.cpp:1461
void setShapeType(unsigned seqNum, ShapeType type)
Definition MSPUBCollector.cpp:1472
double getSpecialValue(const ShapeInfo &info, const CustomShape &shape, int arg, const std::vector< int > &adjustValues) const
Definition MSPUBCollector.cpp:1337
void setShapePage(unsigned seqNum, unsigned pageSeqNum)
Definition MSPUBCollector.cpp:1968
void writePageShapes(unsigned pageSeqNum) const
Definition MSPUBCollector.cpp:1796
void setShapeImgIndex(unsigned seqNum, unsigned index)
Definition MSPUBCollector.cpp:1508
void setShapeCropType(unsigned seqNum, ShapeType cropType)
Definition MSPUBCollector.cpp:1989
void setShapeClipPath(unsigned seqNum, const std::vector< libmspub::Vertex > &clip)
Definition MSPUBCollector.cpp:540
void setRectCoordProps(Coordinate, librevenge::RVNGPropertyList *) const
Definition MSPUBCollector.cpp:420
std::vector< bool > m_calculationValuesSeen
Definition MSPUBCollector.h:170
std::set< unsigned > m_shapesWithCoordinatesRotated90
Definition MSPUBCollector.h:166
void addDefaultCharacterStyle(const CharacterStyle &style)
Definition MSPUBCollector.cpp:1482
librevenge::RVNGBinaryData * addBorderImage(ImgType type, unsigned borderArtIndex)
Definition MSPUBCollector.cpp:1932
void writePageBackground(unsigned pageSeqNum) const
Definition MSPUBCollector.cpp:1803
void setShapePictureBrightness(unsigned seqNum, int brightness)
Definition MSPUBCollector.cpp:367
void collectMetaData(const librevenge::RVNGPropertyList &metaData)
Definition MSPUBCollector.cpp:351
void setShapeDash(unsigned seqNum, const Dash &dash)
Definition MSPUBCollector.cpp:1514
friend class PatternFill
Definition MSPUBCollector.h:50
void addTextColor(ColorReference c)
Definition MSPUBCollector.cpp:1974
librevenge::RVNGPropertyList m_metaData
Definition MSPUBCollector.h:175
std::vector< ColorReference > m_textColors
Definition MSPUBCollector.h:150
std::shared_ptr< ShapeGroupElement > m_currentShapeGroup
Definition MSPUBCollector.h:160
bool m_heightSet
Definition MSPUBCollector.h:144
const char * getCalculatedEncoding() const
Definition MSPUBCollector.cpp:1247
void addTextShape(unsigned stringId, unsigned seqNum)
Definition MSPUBCollector.cpp:1503
bool endGroup()
Definition MSPUBCollector.cpp:555
virtual ~MSPUBCollector()
Definition MSPUBCollector.cpp:1457
std::function< void(void)> paintShape(const ShapeInfo &info, const Coordinate &relativeTo, const VectorTransformation2D &foldedTransform, bool isGroup, const VectorTransformation2D &thisTransform) const
Definition MSPUBCollector.cpp:690
void setTextStringOffset(unsigned textId, unsigned offset)
Definition MSPUBCollector.cpp:498
librevenge::RVNGDrawingInterface * m_painter
Definition MSPUBCollector.h:141
bool hasPage(unsigned seqNum) const
Definition MSPUBCollector.cpp:575
std::vector< CharacterStyle > m_defaultCharStyles
Definition MSPUBCollector.h:152
double m_width
Definition MSPUBCollector.h:143
void setAdjustValue(unsigned seqNum, unsigned index, int adjust)
Definition MSPUBCollector.cpp:1477
void assignShapesToPages()
Definition MSPUBCollector.cpp:1736
std::vector< std::pair< ImgType, librevenge::RVNGBinaryData > > m_images
Definition MSPUBCollector.h:148
std::vector< Color > m_paletteColors
Definition MSPUBCollector.h:155
std::map< unsigned, std::vector< unsigned > > m_tableCellTextEndsByTextId
Definition MSPUBCollector.h:168
void setShapeBorderPosition(unsigned seqNum, BorderPosition pos)
Definition MSPUBCollector.cpp:570
void useEncodingHeuristic()
Definition MSPUBCollector.cpp:510
librevenge::RVNGPropertyList getCharStyleProps(const CharacterStyle &, boost::optional< unsigned > defaultCharStyleIndex) const
Definition MSPUBCollector.cpp:1621
unsigned short m_numPages
Definition MSPUBCollector.h:145
std::vector< ParagraphStyle > m_defaultParaStyles
Definition MSPUBCollector.h:153
void setShapeMargins(unsigned seqNum, unsigned left, unsigned top, unsigned right, unsigned bottom)
Definition MSPUBCollector.cpp:580
boost::optional< std::vector< libmspub::TextParagraph > > getShapeText(const ShapeInfo &info) const
Definition MSPUBCollector.cpp:648
void beginGroup()
Definition MSPUBCollector.cpp:545
std::map< unsigned, unsigned > m_bgShapeSeqNumsByPageSeqNum
Definition MSPUBCollector.h:158
void ponderStringEncoding(const std::vector< TextParagraph > &str)
Definition MSPUBCollector.cpp:1887
static librevenge::RVNGString getColorString(const Color &)
Definition MSPUBCollector.cpp:1720
std::vector< int > getShapeAdjustValues(const ShapeInfo &info) const
Definition MSPUBCollector.cpp:624
std::map< unsigned, ShapeType > m_shapeTypesBySeqNum
Definition MSPUBCollector.h:154
void addBlackToPaletteIfNecessary()
Definition MSPUBCollector.cpp:1728
bool m_encodingHeuristic
Definition MSPUBCollector.h:172
MSPUBCollector & operator=(const MSPUBCollector &)
void setShapeTableInfo(unsigned seqNum, const TableInfo &ti)
Definition MSPUBCollector.cpp:397
boost::optional< const char * > m_calculatedEncoding
Definition MSPUBCollector.h:174
friend class Fill
Definition MSPUBCollector.h:46
std::map< unsigned, unsigned > m_stringOffsetsByTextId
Definition MSPUBCollector.h:169
double getCalculationValue(const ShapeInfo &info, unsigned index, bool recursiveEntry, const std::vector< int > &adjustValues) const
Definition MSPUBCollector.cpp:1377
void addPaletteColor(Color)
Definition MSPUBCollector.cpp:610
void setShapeCustomPath(unsigned seqNum, const DynamicCustomShape &shape)
Definition MSPUBCollector.cpp:534
void setShapeEndArrow(unsigned seqNum, const Arrow &arrow)
Definition MSPUBCollector.cpp:391
bool addImage(unsigned index, ImgType type, librevenge::RVNGBinaryData img)
Definition MSPUBCollector.cpp:1914
Definition ShapeGroupElement.h:28
Definition VectorTransformation2D.h:26
Definition Arrow.h:14
ShapeType
Definition ShapeType.h:16
VerticalAlign
Definition VerticalAlign.h:16
BorderPosition
Definition MSPUBTypes.h:27
ImgType
Definition MSPUBTypes.h:214
Definition Arrow.h:31
Definition MSPUBTypes.h:113
Definition MSPUBTypes.h:200
Definition Coordinate.h:18
Definition PolygonUtils.h:60
Definition Dash.h:50
Definition PolygonUtils.h:93
Definition Line.h:21
PageInfo()
Definition MSPUBCollector.h:135
std::vector< std::shared_ptr< ShapeGroupElement > > m_shapeGroupsOrdered
Definition MSPUBCollector.h:134
Definition MSPUBTypes.h:164
Definition Shadow.h:27
Definition ShapeInfo.h:38
Definition TableInfo.h:35

Generated for libmspub by doxygen 1.14.0