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 __MSPUBPARSER_H__
11#define __MSPUBPARSER_H__
12
13#include <map>
14#include <set>
15#include <vector>
16#include <memory>
17
18#include <boost/shared_ptr.hpp>
19#include <boost/optional.hpp>
20
21#include <librevenge/librevenge.h>
22#include <librevenge/librevenge.h>
23
24#include "MSPUBTypes.h"
25#include "Fill.h"
26#include "Coordinate.h"
27#include "PolygonUtils.h"
28
29namespace libmspub
30{
31class MSPUBCollector;
33{
34 unsigned seqNum;
35public:
36 FindBySeqNum(unsigned sn) : seqNum(sn) { }
38 {
39 return ref.seqNum == seqNum;
40 }
41};
42
44{
45 unsigned seqNum;
46public:
47 FindByParentSeqNum(unsigned sn) : seqNum(sn) { }
49 {
50 return ref.parentSeqNum == seqNum;
51 }
52};
53
55{
56 std::map<unsigned short, unsigned> m_scalarValues;
57 std::map<unsigned short, std::vector<unsigned char> > m_complexValues;
59 {
60 }
61};
62
64{
65public:
66 explicit MSPUBParser(librevenge::RVNGInputStream *input, MSPUBCollector *collector);
67 virtual ~MSPUBParser();
68 virtual bool parse();
69protected:
70 virtual unsigned getColorIndexByQuillEntry(unsigned entry);
71
73 {
74 TextSpanReference(unsigned short f, unsigned short l, const CharacterStyle &cs) : first(f), last(l), charStyle(cs) { }
75 unsigned short first;
76 unsigned short last;
78 };
79
81 {
82 TextParagraphReference(unsigned short f, unsigned short l, const ParagraphStyle &ps) : first(f), last(l), paraStyle(ps) { }
83 unsigned short first;
84 unsigned short last;
86 };
87
88 typedef std::vector<ContentChunkReference>::const_iterator ccr_iterator_t;
89
93 virtual bool parseContents(librevenge::RVNGInputStream *input);
94 bool parseMetaData(librevenge::RVNGInputStream *input);
95 bool parseQuill(librevenge::RVNGInputStream *input);
96 bool parseEscher(librevenge::RVNGInputStream *input);
97 bool parseEscherDelay(librevenge::RVNGInputStream *input);
98
99 MSPUBBlockInfo parseBlock(librevenge::RVNGInputStream *input, bool skipHierarchicalData = false);
100 EscherContainerInfo parseEscherContainer(librevenge::RVNGInputStream *input);
101
102 bool parseContentChunkReference(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
103 QuillChunkReference parseQuillChunkReference(librevenge::RVNGInputStream *input);
104 bool parseDocumentChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
105 bool parsePageChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
106 bool parsePaletteChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
107 bool parsePageShapeList(librevenge::RVNGInputStream *input, MSPUBBlockInfo block, unsigned pageSeqNum);
108 bool parseShape(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk);
109 bool parseBorderArtChunk(librevenge::RVNGInputStream *input,
110 const ContentChunkReference &chunk);
111 bool parseFontChunk(librevenge::RVNGInputStream *input,
112 const ContentChunkReference &chunk);
113 void parsePaletteEntry(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
114 void parseColors(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
115 void parseFonts(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
116 void parseDefaultStyle(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
117 void parseShapeGroup(librevenge::RVNGInputStream *input, const EscherContainerInfo &spgr, Coordinate parentCoordinateSystem, Coordinate parentGroupAbsoluteCoord);
118 void skipBlock(librevenge::RVNGInputStream *input, MSPUBBlockInfo block);
119 void parseEscherShape(librevenge::RVNGInputStream *input, const EscherContainerInfo &sp, Coordinate &parentCoordinateSystem, Coordinate &parentGroupAbsoluteCoord);
120 bool findEscherContainer(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, unsigned short type);
121 bool findEscherContainerWithTypeInSet(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, std::set<unsigned short> types);
122 std::map<unsigned short, unsigned> extractEscherValues(librevenge::RVNGInputStream *input, const EscherContainerInfo &record);
123 FOPTValues extractFOPTValues(librevenge::RVNGInputStream *input,
124 const libmspub::EscherContainerInfo &record);
125 std::vector<TextSpanReference> parseCharacterStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
126 std::vector<TextParagraphReference> parseParagraphStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk);
127 std::vector<Calculation> parseGuides(const std::vector<unsigned char>
128 &guideData);
129 std::vector<Vertex> parseVertices(const std::vector<unsigned char>
130 &vertexData);
131 std::vector<unsigned> parseTableCellDefinitions(librevenge::RVNGInputStream *input,
132 const QuillChunkReference &chunk);
133 std::vector<unsigned short> parseSegments(
134 const std::vector<unsigned char> &segmentData);
136 const std::vector<unsigned char> &vertexData,
137 const std::vector<unsigned char> &segmentData,
138 const std::vector<unsigned char> &guideData,
139 unsigned geoWidth, unsigned geoHeight);
140 int getColorIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info);
141 unsigned getFontIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info);
142 CharacterStyle getCharacterStyle(librevenge::RVNGInputStream *input);
143 ParagraphStyle getParagraphStyle(librevenge::RVNGInputStream *input);
144 boost::shared_ptr<Fill> getNewFill(const std::map<unsigned short, unsigned> &foptValues, bool &skipIfNotBg, std::map<unsigned short, std::vector<unsigned char> > &foptVal);
145
146 librevenge::RVNGInputStream *m_input;
148 std::vector<MSPUBBlockInfo> m_blockInfo;
149 std::vector<ContentChunkReference> m_contentChunks;
150 std::vector<unsigned> m_cellsChunkIndices;
151 std::vector<unsigned> m_pageChunkIndices;
152 std::vector<unsigned> m_shapeChunkIndices;
153 std::vector<unsigned> m_paletteChunkIndices;
154 std::vector<unsigned> m_borderArtChunkIndices;
155 std::vector<unsigned> m_fontChunkIndices;
156 std::vector<unsigned> m_unknownChunkIndices;
157 boost::optional<unsigned> m_documentChunkIndex;
160 std::vector<int> m_alternateShapeSeqNums;
161 std::vector<int> m_escherDelayIndices;
162
163 static short getBlockDataLength(unsigned type);
164 static bool isBlockDataString(unsigned type);
165 static PageType getPageTypeBySeqNum(unsigned seqNum);
166 static unsigned getEscherElementTailLength(unsigned short type);
167 static unsigned getEscherElementAdditionalHeaderLength(unsigned short type);
168 static ImgType imgTypeByBlipType(unsigned short type);
169 static int getStartOffset(ImgType type, unsigned short initial);
170 static bool lineExistsByFlagPointer(unsigned *flags,
171 unsigned *geomFlags = NULL);
172};
173
174} // namespace libmspub
175
176#endif // __MSPUBRAPHICS_H__
177/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition: MSPUBParser.h:44
FindByParentSeqNum(unsigned sn)
Definition: MSPUBParser.h:47
bool operator()(const libmspub::ContentChunkReference &ref)
Definition: MSPUBParser.h:48
unsigned seqNum
Definition: MSPUBParser.h:45
Definition: MSPUBParser.h:33
FindBySeqNum(unsigned sn)
Definition: MSPUBParser.h:36
unsigned seqNum
Definition: MSPUBParser.h:34
bool operator()(const libmspub::ContentChunkReference &ref)
Definition: MSPUBParser.h:37
Definition: MSPUBCollector.h:47
Definition: MSPUBParser.h:64
void parseDefaultStyle(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:1144
virtual ~MSPUBParser()
Definition: MSPUBParser.cpp:54
std::vector< TextSpanReference > parseCharacterStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:1219
void parseColors(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:1172
unsigned m_lastAddedImage
Definition: MSPUBParser.h:159
virtual bool parseContents(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:320
std::vector< Vertex > parseVertices(const std::vector< unsigned char > &vertexData)
Definition: MSPUBParser.cpp:2151
EscherContainerInfo parseEscherContainer(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:2427
bool parsePaletteChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:2503
bool parsePageShapeList(librevenge::RVNGInputStream *input, MSPUBBlockInfo block, unsigned pageSeqNum)
Definition: MSPUBParser.cpp:641
static unsigned getEscherElementAdditionalHeaderLength(unsigned short type)
Definition: MSPUBParser.cpp:2219
std::vector< int > m_alternateShapeSeqNums
Definition: MSPUBParser.h:160
static ImgType imgTypeByBlipType(unsigned short type)
Definition: MSPUBParser.cpp:175
std::vector< unsigned > parseTableCellDefinitions(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:931
bool findEscherContainerWithTypeInSet(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, std::set< unsigned short > types)
Definition: MSPUBParser.cpp:2230
std::vector< unsigned > m_paletteChunkIndices
Definition: MSPUBParser.h:153
bool parseEscher(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:1474
static PageType getPageTypeBySeqNum(unsigned seqNum)
Definition: MSPUBParser.cpp:2489
std::vector< ContentChunkReference > m_contentChunks
Definition: MSPUBParser.h:149
bool parseFontChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:470
void parsePaletteEntry(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition: MSPUBParser.cpp:2530
static int getStartOffset(ImgType type, unsigned short initial)
Definition: MSPUBParser.cpp:199
boost::optional< unsigned > m_documentChunkIndex
Definition: MSPUBParser.h:157
std::map< unsigned short, unsigned > extractEscherValues(librevenge::RVNGInputStream *input, const EscherContainerInfo &record)
Definition: MSPUBParser.cpp:2307
FOPTValues extractFOPTValues(librevenge::RVNGInputStream *input, const libmspub::EscherContainerInfo &record)
Definition: MSPUBParser.cpp:2261
bool parseQuill(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:949
void parseShapeGroup(librevenge::RVNGInputStream *input, const EscherContainerInfo &spgr, Coordinate parentCoordinateSystem, Coordinate parentGroupAbsoluteCoord)
Definition: MSPUBParser.cpp:1520
static bool lineExistsByFlagPointer(unsigned *flags, unsigned *geomFlags=NULL)
Definition: MSPUBParser.cpp:58
static unsigned getEscherElementTailLength(unsigned short type)
Definition: MSPUBParser.cpp:2207
int m_lastSeenSeqNum
Definition: MSPUBParser.h:158
static short getBlockDataLength(unsigned type)
Definition: MSPUBParser.cpp:73
void parseFonts(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:1126
bool parseShape(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:655
virtual unsigned getColorIndexByQuillEntry(unsigned entry)
Definition: MSPUBParser.cpp:68
std::vector< MSPUBBlockInfo > m_blockInfo
Definition: MSPUBParser.h:148
unsigned getFontIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info)
Definition: MSPUBParser.cpp:1436
ParagraphStyle getParagraphStyle(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:1246
bool parseContentChunkReference(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition: MSPUBParser.cpp:2327
MSPUBParser & operator=(const MSPUBParser &)
boost::shared_ptr< Fill > getNewFill(const std::map< unsigned short, unsigned > &foptValues, bool &skipIfNotBg, std::map< unsigned short, std::vector< unsigned char > > &foptVal)
Definition: MSPUBParser.cpp:1937
std::vector< ContentChunkReference >::const_iterator ccr_iterator_t
Definition: MSPUBParser.h:88
bool parseEscherDelay(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:240
std::vector< Calculation > parseGuides(const std::vector< unsigned char > &guideData)
Definition: MSPUBParser.cpp:2141
std::vector< TextParagraphReference > parseParagraphStyles(librevenge::RVNGInputStream *input, const QuillChunkReference &chunk)
Definition: MSPUBParser.cpp:1191
std::vector< unsigned short > parseSegments(const std::vector< unsigned char > &segmentData)
Definition: MSPUBParser.cpp:2118
void skipBlock(librevenge::RVNGInputStream *input, MSPUBBlockInfo block)
Definition: MSPUBParser.cpp:2422
std::vector< unsigned > m_unknownChunkIndices
Definition: MSPUBParser.h:156
virtual bool parse()
Definition: MSPUBParser.cpp:116
MSPUBCollector * m_collector
Definition: MSPUBParser.h:147
librevenge::RVNGInputStream * m_input
Definition: MSPUBParser.h:146
MSPUBBlockInfo parseBlock(librevenge::RVNGInputStream *input, bool skipHierarchicalData=false)
Definition: MSPUBParser.cpp:2438
bool parseDocumentChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:426
std::vector< unsigned > m_pageChunkIndices
Definition: MSPUBParser.h:151
bool findEscherContainer(librevenge::RVNGInputStream *input, const EscherContainerInfo &parent, EscherContainerInfo &out, unsigned short type)
Definition: MSPUBParser.cpp:2245
std::vector< unsigned > m_cellsChunkIndices
Definition: MSPUBParser.h:150
std::vector< unsigned > m_shapeChunkIndices
Definition: MSPUBParser.h:152
bool parseMetaData(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:2542
MSPUBParser(const MSPUBParser &)
std::vector< unsigned > m_borderArtChunkIndices
Definition: MSPUBParser.h:154
QuillChunkReference parseQuillChunkReference(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:906
CharacterStyle getCharacterStyle(librevenge::RVNGInputStream *input)
Definition: MSPUBParser.cpp:1376
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:2106
int getColorIndex(librevenge::RVNGInputStream *input, const MSPUBBlockInfo &info)
Definition: MSPUBParser.cpp:1457
std::vector< unsigned > m_fontChunkIndices
Definition: MSPUBParser.h:155
void parseEscherShape(librevenge::RVNGInputStream *input, const EscherContainerInfo &sp, Coordinate &parentCoordinateSystem, Coordinate &parentGroupAbsoluteCoord)
Definition: MSPUBParser.cpp:1543
std::vector< int > m_escherDelayIndices
Definition: MSPUBParser.h:161
static bool isBlockDataString(unsigned type)
Definition: MSPUBParser.cpp:2418
bool parseBorderArtChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:535
bool parsePageChunk(librevenge::RVNGInputStream *input, const ContentChunkReference &chunk)
Definition: MSPUBParser.cpp:599
Definition: Arrow.h:14
PageType
Definition: MSPUBTypes.h:173
ImgType
Definition: MSPUBTypes.h:180
Definition: MSPUBTypes.h:89
Definition: MSPUBTypes.h:67
unsigned parentSeqNum
Definition: MSPUBTypes.h:75
unsigned seqNum
Definition: MSPUBTypes.h:74
Definition: Coordinate.h:16
Definition: PolygonUtils.h:92
Definition: MSPUBTypes.h:47
Definition: MSPUBParser.h:55
std::map< unsigned short, std::vector< unsigned char > > m_complexValues
Definition: MSPUBParser.h:57
FOPTValues()
Definition: MSPUBParser.h:58
std::map< unsigned short, unsigned > m_scalarValues
Definition: MSPUBParser.h:56
Definition: MSPUBTypes.h:55
ParagraphStyle paraStyle
Definition: MSPUBParser.h:85
unsigned short last
Definition: MSPUBParser.h:84
unsigned short first
Definition: MSPUBParser.h:83
TextParagraphReference(unsigned short f, unsigned short l, const ParagraphStyle &ps)
Definition: MSPUBParser.h:82
Definition: MSPUBParser.h:73
unsigned short last
Definition: MSPUBParser.h:76
CharacterStyle charStyle
Definition: MSPUBParser.h:77
TextSpanReference(unsigned short f, unsigned short l, const CharacterStyle &cs)
Definition: MSPUBParser.h:74
unsigned short first
Definition: MSPUBParser.h:75
Definition: MSPUBTypes.h:130
Definition: MSPUBTypes.h:79

Generated for libmspub by doxygen 1.9.3