MSPUBParser.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_MSPUBPARSER_H
11#define INCLUDED_MSPUBPARSER_H
12
13#include <map>
14#include <memory>
15#include <memory>
16#include <set>
17#include <vector>
18
19#include <boost/optional.hpp>
20
21#include <librevenge/librevenge.h>
22
23#include "MSPUBTypes.h"
24#include "PolygonUtils.h"
25
26namespace libmspub
27{
28
29class Fill;
30class MSPUBCollector;
31
32struct Coordinate;
33
35{
36 unsigned seqNum;
37public:
38 FindBySeqNum(unsigned sn) : seqNum(sn) { }
40 {
41 return ref.seqNum == seqNum;
42 }
43};
44
46{
47 unsigned seqNum;
48public:
49 FindByParentSeqNum(unsigned sn) : seqNum(sn) { }
51 {
52 return ref.parentSeqNum == seqNum;
53 }
54};
55
57{
58 std::map<unsigned short, unsigned> m_scalarValues;
59 std::map<unsigned short, std::vector<unsigned char> > m_complexValues;
63};
64
66{
67public:
68 explicit MSPUBParser(librevenge::RVNGInputStream *input, MSPUBCollector *collector);
69 virtual ~MSPUBParser();
70 virtual bool parse();
71protected:
72 virtual unsigned getColorIndexByQuillEntry(unsigned entry);
73
75 {
76 TextSpanReference(unsigned short f, unsigned short l, const CharacterStyle &cs) : first(f), last(l), charStyle(cs) { }
77 unsigned short first;
78 unsigned short last;
80 };
81
83 {
84 TextParagraphReference(unsigned short f, unsigned short l, const ParagraphStyle &ps) : first(f), last(l), paraStyle(ps) { }
85 unsigned short first;
86 unsigned short last;
88 };
89
90 typedef std::vector<ContentChunkReference>::const_iterator ccr_iterator_t;
91
95 virtual bool parseContents(librevenge::RVNGInputStream *input);
96 bool parseMetaData();
97 bool parseQuill(librevenge::RVNGInputStream *input);
98 bool parseEscher(librevenge::RVNGInputStream *input);
99 bool parseEscherDelay(librevenge::RVNGInputStream *input);
100
101 MSPUBBlockInfo parseBlock(librevenge::RVNGInputStream *input, bool skipHierarchicalData = false);
102 EscherContainerInfo parseEscherContainer(librevenge::RVNGInputStream *input);
103
104 bool parseContentChunkReference(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
105 QuillChunkReference parseQuillChunkReference(librevenge::RVNGInputStream *input);
106 bool parseDocumentChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
107 bool parsePageChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
108 bool parsePaletteChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
109 bool parsePageShapeList(librevenge::RVNGInputStream *input, MSPUBBlockInfo block, unsigned pageSeqNum);
110 bool parseShape(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
111 bool parseBorderArtChunk(librevenge::RVNGInputStream *input,
112 const ContentChunkReference &chunk);
113 bool parseFontChunk(librevenge::RVNGInputStream *input,
114 const ContentChunkReference &chunk);
115 void parsePaletteEntry(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
116 void parseColors(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
117 void parseFonts(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
118 void parseDefaultStyle(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
119 void parseShapeGroup(librevenge::RVNGInputStream *input, const EscherContainerInfo &spgr, Coordinate parentCoordinateSystem, Coordinate parentGroupAbsoluteCoord);
120 void skipBlock(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
121 void parseEscherShape(librevenge::RVNGInputStream *input, const EscherContainerInfo &sp, Coordinate &parentCoordinateSystem, Coordinate &parentGroupAbsoluteCoord);
122 bool findEscherContainer(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, unsigned short type);
123 bool findEscherContainerWithTypeInSet(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, std::set<unsigned short> types);
124 std::map<unsigned short, unsigned> extractEscherValues(librevenge::RVNGInputStream *input, const EscherContainerInfo &record);
125 FOPTValues extractFOPTValues(librevenge::RVNGInputStream *input,
126 const libmspub::EscherContainerInfo &record);
127 std::vector<TextSpanReference> parseCharacterStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
128 std::vector<TextParagraphReference> parseParagraphStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
129 std::vector<Calculation> parseGuides(const std::vector<unsigned char>
130 &guideData);
131 std::vector<Vertex> parseVertices(const std::vector<unsigned char>
132 &vertexData);
133 std::vector<unsigned> parseTableCellDefinitions(librevenge::RVNGInputStream *input,
134 const QuillChunkReference &chunk);
135 std::vector<unsigned short> parseSegments(
136 const std::vector<unsigned char> &segmentData);
138 const std::vector<unsigned char> &vertexData,
139 const std::vector<unsigned char> &segmentData,
140 const std::vector<unsigned char> &guideData,
141 unsigned geoWidth, unsigned geoHeight);
142 int getColorIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info);
143 unsigned getFontIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info);
144 CharacterStyle getCharacterStyle(librevenge::RVNGInputStream *input);
145 ParagraphStyle getParagraphStyle(librevenge::RVNGInputStream *input);
146 std::shared_ptr<Fill> getNewFill(const std::map<unsigned short, unsigned> &foptProperties, bool &skipIfNotBg, std::map<unsigned short, std::vector<unsigned char> > &foptValues);
147
148 librevenge::RVNGInputStream *m_input;
149 unsigned m_length;
151 std::vector<MSPUBBlockInfo> m_blockInfo;
152 std::vector<ContentChunkReference> m_contentChunks;
153 std::vector<unsigned> m_cellsChunkIndices;
154 std::vector<unsigned> m_pageChunkIndices;
155 std::vector<unsigned> m_shapeChunkIndices;
156 std::vector<unsigned> m_paletteChunkIndices;
157 std::vector<unsigned> m_borderArtChunkIndices;
158 std::vector<unsigned> m_fontChunkIndices;
159 std::vector<unsigned> m_unknownChunkIndices;
160 boost::optional<unsigned> m_documentChunkIndex;
163 std::vector<int> m_alternateShapeSeqNums;
164 std::vector<int> m_escherDelayIndices;
165
166 static short getBlockDataLength(unsigned type);
167 static bool isBlockDataString(unsigned type);
168 static PageType getPageTypeBySeqNum(unsigned seqNum);
169 static unsigned getEscherElementTailLength(unsigned short type);
170 static unsigned getEscherElementAdditionalHeaderLength(unsigned short type);
171 static ImgType imgTypeByBlipType(unsigned short type);
172 static int getStartOffset(ImgType type, unsigned short initial);
173 static bool lineExistsByFlagPointer(unsigned *flags,
174 unsigned *geomFlags = nullptr);
175};
176
177} // namespace libmspub
178
179#endif // INCLUDED_MSPUBRAPHICS_H
180/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition Fill.h:23
FindByParentSeqNum(unsigned sn)
Definition MSPUBParser.h:49
bool operator()(const libmspub::ContentChunkReference &ref)
Definition MSPUBParser.h:50
unsigned seqNum
Definition MSPUBParser.h:47
FindBySeqNum(unsigned sn)
Definition MSPUBParser.h:38
unsigned seqNum
Definition MSPUBParser.h:36
bool operator()(const libmspub::ContentChunkReference &ref)
Definition MSPUBParser.h:39
Definition MSPUBCollector.h:45
void parseDefaultStyle(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:1171
virtual ~MSPUBParser()
Definition MSPUBParser.cpp:117
std::vector< TextSpanReference > parseCharacterStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:1246
void parseColors(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:1199
unsigned m_length
Definition MSPUBParser.h:149
unsigned m_lastAddedImage
Definition MSPUBParser.h:162
virtual bool parseContents(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:373
std::vector< Vertex > parseVertices(const std::vector< unsigned char > &vertexData)
Definition MSPUBParser.cpp:2216
EscherContainerInfo parseEscherContainer(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:2491
static bool lineExistsByFlagPointer(unsigned *flags, unsigned *geomFlags=nullptr)
Definition MSPUBParser.cpp:121
bool parsePaletteChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:2567
bool parsePageShapeList(librevenge::RVNGInputStream *input, MSPUBBlockInfo block, unsigned pageSeqNum)
Definition MSPUBParser.cpp:691
static unsigned getEscherElementAdditionalHeaderLength(unsigned short type)
Definition MSPUBParser.cpp:2284
std::vector< int > m_alternateShapeSeqNums
Definition MSPUBParser.h:163
static ImgType imgTypeByBlipType(unsigned short type)
Definition MSPUBParser.cpp:228
std::vector< unsigned > parseTableCellDefinitions(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:958
bool findEscherContainerWithTypeInSet(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, std::set< unsigned short > types)
Definition MSPUBParser.cpp:2295
std::vector< unsigned > m_paletteChunkIndices
Definition MSPUBParser.h:156
bool parseEscher(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:1536
static PageType getPageTypeBySeqNum(unsigned seqNum)
Definition MSPUBParser.cpp:2553
std::vector< ContentChunkReference > m_contentChunks
Definition MSPUBParser.h:152
bool parseFontChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:520
void parsePaletteEntry(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition MSPUBParser.cpp:2594
static int getStartOffset(ImgType type, unsigned short initial)
Definition MSPUBParser.cpp:252
boost::optional< unsigned > m_documentChunkIndex
Definition MSPUBParser.h:160
std::map< unsigned short, unsigned > extractEscherValues(librevenge::RVNGInputStream *input, const EscherContainerInfo &record)
Definition MSPUBParser.cpp:2371
FOPTValues extractFOPTValues(librevenge::RVNGInputStream *input, const libmspub::EscherContainerInfo &record)
Definition MSPUBParser.cpp:2326
bool parseQuill(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:976
void parseShapeGroup(librevenge::RVNGInputStream *input, const EscherContainerInfo &spgr, Coordinate parentCoordinateSystem, Coordinate parentGroupAbsoluteCoord)
Definition MSPUBParser.cpp:1582
static unsigned getEscherElementTailLength(unsigned short type)
Definition MSPUBParser.cpp:2272
int m_lastSeenSeqNum
Definition MSPUBParser.h:161
static short getBlockDataLength(unsigned type)
Definition MSPUBParser.cpp:136
void parseFonts(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:1153
bool parseShape(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:705
virtual unsigned getColorIndexByQuillEntry(unsigned entry)
Definition MSPUBParser.cpp:131
bool parseMetaData()
Definition MSPUBParser.cpp:2606
std::vector< MSPUBBlockInfo > m_blockInfo
Definition MSPUBParser.h:151
unsigned getFontIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info)
Definition MSPUBParser.cpp:1498
ParagraphStyle getParagraphStyle(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:1273
bool parseContentChunkReference(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition MSPUBParser.cpp:2391
MSPUBParser & operator=(const MSPUBParser &)
MSPUBParser(librevenge::RVNGInputStream *input, MSPUBCollector *collector)
Definition MSPUBParser.cpp:102
std::shared_ptr< Fill > getNewFill(const std::map< unsigned short, unsigned > &foptProperties, bool &skipIfNotBg, std::map< unsigned short, std::vector< unsigned char > > &foptValues)
Definition MSPUBParser.cpp:2001
std::vector< ContentChunkReference >::const_iterator ccr_iterator_t
Definition MSPUBParser.h:90
bool parseEscherDelay(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:293
std::vector< Calculation > parseGuides(const std::vector< unsigned char > &guideData)
Definition MSPUBParser.cpp:2206
std::vector< TextParagraphReference > parseParagraphStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition MSPUBParser.cpp:1218
std::vector< unsigned short > parseSegments(const std::vector< unsigned char > &segmentData)
Definition MSPUBParser.cpp:2183
void skipBlock(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition MSPUBParser.cpp:2486
std::vector< unsigned > m_unknownChunkIndices
Definition MSPUBParser.h:159
virtual bool parse()
Definition MSPUBParser.cpp:179
MSPUBCollector * m_collector
Definition MSPUBParser.h:150
librevenge::RVNGInputStream * m_input
Definition MSPUBParser.h:148
MSPUBBlockInfo parseBlock(librevenge::RVNGInputStream *input, bool skipHierarchicalData=false)
Definition MSPUBParser.cpp:2502
bool parseDocumentChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:476
std::vector< unsigned > m_pageChunkIndices
Definition MSPUBParser.h:154
bool findEscherContainer(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, unsigned short type)
Definition MSPUBParser.cpp:2310
std::vector< unsigned > m_cellsChunkIndices
Definition MSPUBParser.h:153
std::vector< unsigned > m_shapeChunkIndices
Definition MSPUBParser.h:155
MSPUBParser(const MSPUBParser &)
std::vector< unsigned > m_borderArtChunkIndices
Definition MSPUBParser.h:157
QuillChunkReference parseQuillChunkReference(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:933
CharacterStyle getCharacterStyle(librevenge::RVNGInputStream *input)
Definition MSPUBParser.cpp:1403
DynamicCustomShape getDynamicCustomShape(const std::vector< unsigned char > &vertexData, const std::vector< unsigned char > &segmentData, const std::vector< unsigned char > &guideData, unsigned geoWidth, unsigned geoHeight)
Definition MSPUBParser.cpp:2171
int getColorIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info)
Definition MSPUBParser.cpp:1519
std::vector< unsigned > m_fontChunkIndices
Definition MSPUBParser.h:158
void parseEscherShape(librevenge::RVNGInputStream *input, const EscherContainerInfo &sp, Coordinate &parentCoordinateSystem, Coordinate &parentGroupAbsoluteCoord)
Definition MSPUBParser.cpp:1605
std::vector< int > m_escherDelayIndices
Definition MSPUBParser.h:164
static bool isBlockDataString(unsigned type)
Definition MSPUBParser.cpp:2482
bool parseBorderArtChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:585
bool parsePageChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition MSPUBParser.cpp:649
Definition Arrow.h:14
PageType
Definition MSPUBTypes.h:207
ImgType
Definition MSPUBTypes.h:214
Definition MSPUBTypes.h:113
Definition MSPUBTypes.h:91
unsigned parentSeqNum
Definition MSPUBTypes.h:99
unsigned seqNum
Definition MSPUBTypes.h:98
Definition Coordinate.h:18
Definition PolygonUtils.h:93
Definition MSPUBTypes.h:71
Definition MSPUBParser.h:57
std::map< unsigned short, std::vector< unsigned char > > m_complexValues
Definition MSPUBParser.h:59
FOPTValues()
Definition MSPUBParser.h:60
std::map< unsigned short, unsigned > m_scalarValues
Definition MSPUBParser.h:58
Definition MSPUBTypes.h:79
ParagraphStyle paraStyle
Definition MSPUBParser.h:87
unsigned short last
Definition MSPUBParser.h:86
unsigned short first
Definition MSPUBParser.h:85
TextParagraphReference(unsigned short f, unsigned short l, const ParagraphStyle &ps)
Definition MSPUBParser.h:84
unsigned short last
Definition MSPUBParser.h:78
CharacterStyle charStyle
Definition MSPUBParser.h:79
TextSpanReference(unsigned short f, unsigned short l, const CharacterStyle &cs)
Definition MSPUBParser.h:76
unsigned short first
Definition MSPUBParser.h:77
Definition MSPUBTypes.h:164
Definition MSPUBTypes.h:103

Generated for libmspub by doxygen 1.14.0