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 
42 namespace libcdr
43 {
44 
45 class CDRCollector;
46 
47 struct CMXOutline
48 {
50  : m_lineStyle(0), m_screen(0), m_color(0),
51  m_arrowHeads(0), m_pen(0), m_dashArray(0) {}
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 
60 struct 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 {
80  : m_type(0), m_compression(0), m_size(0), m_compressedSize(0) {}
81  unsigned short m_type;
82  unsigned short m_compression;
83  unsigned m_size;
84  unsigned m_compressedSize;
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 
105 class CMXParser : protected CommonParser
106 {
107 public:
108  explicit CMXParser(CDRCollector *collector, CMXParserState &parserState);
109  ~CMXParser() override;
110  bool parseRecords(librevenge::RVNGInputStream *input, long size = -1, unsigned level = 0);
111 
112 private:
113  CMXParser();
114  CMXParser(const CMXParser &);
115  CMXParser &operator=(const CMXParser &);
116  bool parseRecord(librevenge::RVNGInputStream *input, unsigned level = 0);
117  void readRecord(unsigned fourCC, unsigned &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: */
void readRotl(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1839
CMXOutline()
Definition: CMXParser.h:49
Definition: CMXParser.h:87
Definition: CommonParser.h:27
CMXLineStyle()
Definition: CMXParser.h:72
Definition: CMXParser.h:77
void readBeginPage(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:491
unsigned m_nextInstructionOffset
Definition: CMXParser.h:170
void readIxpg(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:2032
void readRclr(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1684
void readData(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:2145
double m_aspect
Definition: CMXParser.h:65
~CMXParser() override
Definition: CMXParser.cpp:80
double m_xmax
Definition: CMXParser.h:168
CMXParserState()
Definition: CMXParser.h:89
Definition: CDRTypes.h:24
CMXPen()
Definition: CMXParser.h:62
std::unique_ptr< CDRBitmap > m_currentBitmap
Definition: CMXParser.h:174
CDRTransform m_matrix
Definition: CMXParser.h:67
unsigned m_compressedSize
Definition: CMXParser.h:84
Definition: CMXParser.h:60
unsigned char m_spec
Definition: CMXParser.h:73
std::map< unsigned, unsigned > m_embeddedOffsets
Definition: CMXParser.h:101
void readRott(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1790
void readPolyCurve(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:590
void parseImage(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:154
unsigned char m_capAndJoin
Definition: CMXParser.h:74
Definition: CDRTransforms.h:19
CMXParser & operator=(const CMXParser &)
librevenge::RVNGString readString(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1007
void readRecord(unsigned fourCC, unsigned &length, librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:194
void readIxef(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1995
std::map< unsigned, CDRColor > m_colorPalette
Definition: CMXParser.h:93
unsigned short m_arrowHeads
Definition: CMXParser.h:55
unsigned short m_unit
Definition: CMXParser.h:166
std::unique_ptr< CDRPattern > m_currentPattern
Definition: CMXParser.h:173
std::map< unsigned, unsigned > m_patternOffsets
Definition: CMXParser.h:99
Definition: CMXParser.h:105
bool readLens(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1018
double m_width
Definition: CMXParser.h:64
std::map< unsigned, CMXOutline > m_outlines
Definition: CMXParser.h:97
bool m_bigEndian
Definition: CMXParser.h:165
CMXParserState & m_parserState
Definition: CMXParser.h:171
std::map< unsigned, unsigned > m_arrowOffsets
Definition: CMXParser.h:100
CMXImageInfo m_currentImageInfo
Definition: CMXParser.h:172
Definition: CDRCollector.h:24
unsigned short m_dashArray
Definition: CMXParser.h:57
void readBeginProcedure(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:920
void readJumpAbsolute(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1650
Definition: CMXParser.h:47
double m_ymin
Definition: CMXParser.h:168
void readInfo(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:2104
void readRpen(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1896
bool parseRecords(librevenge::RVNGInputStream *input, long size=-1, unsigned level=0)
Definition: CMXParser.cpp:84
unsigned short m_pen
Definition: CMXParser.h:56
void readPage(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:471
void readEllipse(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:665
std::map< unsigned, CMXPen > m_pens
Definition: CMXParser.h:96
double m_ymax
Definition: CMXParser.h:168
unsigned short m_lineStyle
Definition: CMXParser.h:52
std::map< unsigned, std::vector< unsigned > > m_dashArrays
Definition: CMXParser.h:94
bool readFill(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1062
unsigned m_fillIndex
Definition: CMXParser.h:169
unsigned short m_color
Definition: CMXParser.h:54
void readProc(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:481
CDRTransform readMatrix(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:967
const unsigned * _getOffsetByType(unsigned short type, const std::map< unsigned short, unsigned > &offsets)
Definition: CMXParser.cpp:340
void readRectangle(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:831
void readBeginGroup(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:543
CDRBox readBBox(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:997
void readIxtl(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1950
unsigned m_size
Definition: CMXParser.h:83
std::map< unsigned, unsigned > m_embeddedOffsetTypes
Definition: CMXParser.h:102
bool parseRecord(librevenge::RVNGInputStream *input, unsigned level=0)
Definition: CMXParser.cpp:102
unsigned short m_compression
Definition: CMXParser.h:82
void readBeginLayer(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:540
std::map< unsigned, CMXLineStyle > m_lineStyles
Definition: CMXParser.h:95
double m_scale
Definition: CMXParser.h:167
CMXImageInfo()
Definition: CMXParser.h:79
Definition: CDRTypes.h:113
double m_xmin
Definition: CMXParser.h:168
unsigned short m_type
Definition: CMXParser.h:81
void readDrawImage(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:770
CDRLineStyle getLineStyle(unsigned id)
Definition: CMXParser.cpp:2340
void readDisp(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:291
void readRdot(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1735
Definition: CDRTypes.h:53
double m_angle
Definition: CMXParser.h:66
void readCMXHeader(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:215
CDRColor readColor(librevenge::RVNGInputStream *input, unsigned char colorModel)
Definition: CMXParser.cpp:2221
void readIxpc(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:2067
void readCommands(librevenge::RVNGInputStream *input, unsigned length)
Definition: CMXParser.cpp:417
Definition: CMXParser.h:70
unsigned short m_screen
Definition: CMXParser.h:53
CDRColor getPaletteColor(unsigned id)
Definition: CMXParser.cpp:2213
Definition: CDRCollector.h:61
void readIxmr(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:348
bool readRenderingAttributes(librevenge::RVNGInputStream *input)
Definition: CMXParser.cpp:1477
std::map< unsigned, unsigned > m_bitmapOffsets
Definition: CMXParser.h:98

Generated for libcdr by doxygen 1.8.15