CMXParser.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 libcdr 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 __CMXPARSER_H__
11#define __CMXPARSER_H__
12
13#include <vector>
14#include <map>
15#include <memory>
16
17#include <librevenge-stream/librevenge-stream.h>
18
19#include "CDRTransforms.h"
20#include "CDRTypes.h"
21#include "CommonParser.h"
22
23#define CMX_MASTER_INDEX_TABLE 1
24#define CMX_PAGE_INDEX_TABLE 2
25#define CMX_MASTER_LAYER_TABLE 3
26#define CMX_PROCEDURE_INDEX_TABLE 4
27#define CMX_BITMAP_INDEX_TABLE 5
28#define CMX_ARROW_INDEX_TABLE 6
29#define CMX_FONT_INDEX_TABLE 7
30#define CMX_EMBEDDED_FILE_INDEX_TABLE 8
31#define CMX_THUMBNAIL_SECTION 10
32#define CMX_OUTLINE_DESCRIPTION_SECTION 15
33#define CMX_LINE_STYLE_DESCRIPTION_SECTION 16
34#define CMX_ARROWHEADS_DESCRIPTION_SECTION 17
35#define CMX_SCREEN_DESCRIPTION_SECTION 18
36#define CMX_PEN_DESCRIPTION_SECTION 19
37#define CMX_DOT_DASH_DESCRIPTION_SECTION 20
38#define CMX_COLOR_DESCRIPTION_SECTION 21
39#define CMX_COLOR_CORRECTION_SECTION 22
40#define CMX_PREVIEW_BOX_SECTION 23
41
42namespace libcdr
43{
44
45class CDRCollector;
46
48{
52 unsigned short m_lineStyle;
53 unsigned short m_screen;
54 unsigned short m_color;
55 unsigned short m_arrowHeads;
56 unsigned short m_pen;
57 unsigned short m_dashArray;
58};
59
60struct CMXPen
61{
63 : m_width(0.0), m_aspect(1.0), m_angle(0.0), m_matrix() {}
64 double m_width;
65 double m_aspect;
66 double m_angle;
68};
69
71{
73 unsigned char m_spec;
74 unsigned char m_capAndJoin;
75};
76
78{
81 unsigned short m_type;
82 unsigned short m_compression;
83 unsigned m_size;
85};
86
88{
93 std::map<unsigned, CDRColor> m_colorPalette;
94 std::map<unsigned, std::vector<unsigned> > m_dashArrays;
95 std::map<unsigned, CMXLineStyle> m_lineStyles;
96 std::map<unsigned, CMXPen> m_pens;
97 std::map<unsigned, CMXOutline> m_outlines;
98 std::map<unsigned, unsigned> m_bitmapOffsets;
99 std::map<unsigned, unsigned> m_patternOffsets;
100 std::map<unsigned, unsigned> m_arrowOffsets;
101 std::map<unsigned, unsigned> m_embeddedOffsets;
102 std::map<unsigned, unsigned> m_embeddedOffsetTypes;
103};
104
105class CMXParser : protected CommonParser
106{
107public:
108 explicit CMXParser(CDRCollector *collector, CMXParserState &parserState);
109 ~CMXParser() override;
110 bool parseRecords(librevenge::RVNGInputStream *input, long size = -1, unsigned level = 0);
111
112private:
116 bool parseRecord(librevenge::RVNGInputStream *input, unsigned level = 0);
117 void readRecord(unsigned fourCC, unsigned long length, librevenge::RVNGInputStream *input);
118 void parseImage(librevenge::RVNGInputStream *input);
119
120 void readCMXHeader(librevenge::RVNGInputStream *input);
121 void readDisp(librevenge::RVNGInputStream *input);
122 void readPage(librevenge::RVNGInputStream *input);
123 void readProc(librevenge::RVNGInputStream *input);
124 void readRclr(librevenge::RVNGInputStream *input);
125 void readRotl(librevenge::RVNGInputStream *input);
126 void readRott(librevenge::RVNGInputStream *input);
127 void readRdot(librevenge::RVNGInputStream *input);
128 void readRpen(librevenge::RVNGInputStream *input);
129 void readIxtl(librevenge::RVNGInputStream *input);
130 void readIxef(librevenge::RVNGInputStream *input);
131 void readIxmr(librevenge::RVNGInputStream *input);
132 void readIxpg(librevenge::RVNGInputStream *input);
133 void readIxpc(librevenge::RVNGInputStream *input);
134 void readInfo(librevenge::RVNGInputStream *input);
135 void readData(librevenge::RVNGInputStream *input);
136
137 // Command readers
138 void readCommands(librevenge::RVNGInputStream *input, unsigned length);
139 void readBeginPage(librevenge::RVNGInputStream *input);
140 void readBeginLayer(librevenge::RVNGInputStream *input);
141 void readBeginGroup(librevenge::RVNGInputStream *input);
142 void readPolyCurve(librevenge::RVNGInputStream *input);
143 void readEllipse(librevenge::RVNGInputStream *input);
144 void readRectangle(librevenge::RVNGInputStream *input);
145 void readJumpAbsolute(librevenge::RVNGInputStream *input);
146 void readDrawImage(librevenge::RVNGInputStream *input);
147 void readBeginProcedure(librevenge::RVNGInputStream *input);
148
149 // Types readers
150 CDRTransform readMatrix(librevenge::RVNGInputStream *input);
151 CDRBox readBBox(librevenge::RVNGInputStream *input);
152 librevenge::RVNGString readString(librevenge::RVNGInputStream *input);
153 bool readFill(librevenge::RVNGInputStream *input);
154 bool readLens(librevenge::RVNGInputStream *input);
155
156 // Complex types readers
157 bool readRenderingAttributes(librevenge::RVNGInputStream *input);
158
159 // Helper Functions
160 CDRColor getPaletteColor(unsigned id);
161 CDRColor readColor(librevenge::RVNGInputStream *input, unsigned char colorModel);
162 CDRLineStyle getLineStyle(unsigned id);
163 const unsigned *_getOffsetByType(unsigned short type, const std::map<unsigned short, unsigned> &offsets);
164
166 unsigned short m_unit;
167 double m_scale;
169 unsigned m_fillIndex;
173 std::unique_ptr<CDRPattern> m_currentPattern;
174 std::unique_ptr<CDRBitmap> m_currentBitmap;
175};
176
177} // namespace libcdr
178
179#endif // __CMXPARSER_H__
180/* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition CDRCollector.h:62
Definition CDRTransforms.h:20
CMXImageInfo m_currentImageInfo
Definition CMXParser.h:172
void readBeginGroup(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:543
void readDrawImage(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:770
void readProc(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:481
CMXParser & operator=(const CMXParser &)
CMXParser(CDRCollector *collector, CMXParserState &parserState)
Definition CMXParser.cpp:73
void readPage(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:471
CDRTransform readMatrix(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:967
bool readLens(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1018
CDRColor getPaletteColor(unsigned id)
Definition CMXParser.cpp:2213
const unsigned * _getOffsetByType(unsigned short type, const std::map< unsigned short, unsigned > &offsets)
Definition CMXParser.cpp:340
unsigned long m_nextInstructionOffset
Definition CMXParser.h:170
bool readRenderingAttributes(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1477
void readIxtl(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1950
bool parseRecords(librevenge::RVNGInputStream *input, long size=-1, unsigned level=0)
Definition CMXParser.cpp:84
void readIxpc(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:2067
std::unique_ptr< CDRPattern > m_currentPattern
Definition CMXParser.h:173
CDRBox readBBox(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:997
bool parseRecord(librevenge::RVNGInputStream *input, unsigned level=0)
Definition CMXParser.cpp:102
double m_ymax
Definition CMXParser.h:168
std::unique_ptr< CDRBitmap > m_currentBitmap
Definition CMXParser.h:174
void readPolyCurve(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:590
unsigned short m_unit
Definition CMXParser.h:166
CDRColor readColor(librevenge::RVNGInputStream *input, unsigned char colorModel)
Definition CMXParser.cpp:2221
void readRclr(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1684
void readIxef(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1995
CMXParser(const CMXParser &)
void parseImage(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:154
bool readFill(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1062
void readCommands(librevenge::RVNGInputStream *input, unsigned length)
Definition CMXParser.cpp:417
double m_xmin
Definition CMXParser.h:168
unsigned m_fillIndex
Definition CMXParser.h:169
void readCMXHeader(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:215
void readRotl(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1839
void readBeginLayer(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:540
void readEllipse(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:665
double m_ymin
Definition CMXParser.h:168
CMXParserState & m_parserState
Definition CMXParser.h:171
void readBeginPage(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:491
double m_xmax
Definition CMXParser.h:168
~CMXParser() override
Definition CMXParser.cpp:80
void readRdot(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1735
librevenge::RVNGString readString(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1007
CDRLineStyle getLineStyle(unsigned id)
Definition CMXParser.cpp:2340
void readBeginProcedure(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:920
void readRott(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1790
void readDisp(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:291
void readInfo(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:2104
bool m_bigEndian
Definition CMXParser.h:165
void readJumpAbsolute(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1650
void readRecord(unsigned fourCC, unsigned long length, librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:194
double m_scale
Definition CMXParser.h:167
void readRectangle(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:831
void readRpen(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:1896
void readData(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:2145
void readIxpg(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:2032
void readIxmr(librevenge::RVNGInputStream *input)
Definition CMXParser.cpp:348
CommonParser(CDRCollector *collector)
Definition CommonParser.cpp:18
Definition CDRCollector.h:25
Definition CDRTypes.h:25
Definition CDRTypes.h:54
Definition CDRTypes.h:118
Definition CMXParser.h:78
unsigned m_size
Definition CMXParser.h:83
unsigned short m_type
Definition CMXParser.h:81
unsigned m_compressedSize
Definition CMXParser.h:84
CMXImageInfo()
Definition CMXParser.h:79
unsigned short m_compression
Definition CMXParser.h:82
unsigned char m_capAndJoin
Definition CMXParser.h:74
CMXLineStyle()
Definition CMXParser.h:72
unsigned char m_spec
Definition CMXParser.h:73
unsigned short m_screen
Definition CMXParser.h:53
unsigned short m_arrowHeads
Definition CMXParser.h:55
unsigned short m_pen
Definition CMXParser.h:56
unsigned short m_color
Definition CMXParser.h:54
unsigned short m_lineStyle
Definition CMXParser.h:52
unsigned short m_dashArray
Definition CMXParser.h:57
CMXOutline()
Definition CMXParser.h:49
Definition CMXParser.h:88
std::map< unsigned, CMXPen > m_pens
Definition CMXParser.h:96
CMXParserState()
Definition CMXParser.h:89
std::map< unsigned, unsigned > m_embeddedOffsetTypes
Definition CMXParser.h:102
std::map< unsigned, unsigned > m_embeddedOffsets
Definition CMXParser.h:101
std::map< unsigned, std::vector< unsigned > > m_dashArrays
Definition CMXParser.h:94
std::map< unsigned, CDRColor > m_colorPalette
Definition CMXParser.h:93
std::map< unsigned, unsigned > m_bitmapOffsets
Definition CMXParser.h:98
std::map< unsigned, CMXOutline > m_outlines
Definition CMXParser.h:97
std::map< unsigned, unsigned > m_patternOffsets
Definition CMXParser.h:99
std::map< unsigned, unsigned > m_arrowOffsets
Definition CMXParser.h:100
std::map< unsigned, CMXLineStyle > m_lineStyles
Definition CMXParser.h:95
double m_width
Definition CMXParser.h:64
CMXPen()
Definition CMXParser.h:62
double m_angle
Definition CMXParser.h:66
CDRTransform m_matrix
Definition CMXParser.h:67
double m_aspect
Definition CMXParser.h:65

Generated for libcdr by doxygen 1.14.0