Canvas5Graph.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3/* libmwaw
4* Version: MPL 2.0 / LGPLv2+
5*
6* The contents of this file are subject to the Mozilla Public License Version
7* 2.0 (the "License"); you may not use this file except in compliance with
8* the License or as specified alternatively below. You may obtain a copy of
9* the License at http://www.mozilla.org/MPL/
10*
11* Software distributed under the License is distributed on an "AS IS" basis,
12* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13* for the specific language governing rights and limitations under the
14* License.
15*
16* Major Contributor(s):
17* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18* Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19* Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20* Copyright (C) 2006, 2007 Andrew Ziem
21* Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22*
23*
24* All Rights Reserved.
25*
26* For minor contributions see the git repository.
27*
28* Alternatively, the contents of this file may be used under the terms of
29* the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30* in which case the provisions of the LGPLv2+ are applicable
31* instead of those above.
32*/
33
34/*
35 * Parser to Canvas v5-v11 text document ( graphic part )
36 *
37 */
38#ifndef CANVAS5_GRAPH
39# define CANVAS5_GRAPH
40
41#include <string>
42#include <utility>
43#include <vector>
44
45#include <librevenge/librevenge.h>
46
47#include "libmwaw_internal.hxx"
48
49#include "MWAWDebug.hxx"
50#include "MWAWGraphicStyle.hxx"
51#include "MWAWInputStream.hxx"
52#include "MWAWPosition.hxx"
53
54#include "Canvas5StyleManager.hxx"
55
56 class MWAWFont;
57 class MWAWParagraph;
58
59 namespace Canvas5Structure
60{
61 struct Stream;
62}
63
64 namespace Canvas5GraphInternal
65{
66 struct Shape;
67 struct ShapeData;
68 struct State;
69
70 struct PseudoShape;
71
72 class SubDocument;
73}
74
75 class Canvas5Image;
76
77 class Canvas5Parser;
78
84 class Canvas5Graph
85{
86 friend class Canvas5GraphInternal::SubDocument;
87 friend class Canvas5Image;
88 friend class Canvas5Parser;
89
90 public:
92 explicit Canvas5Graph(Canvas5Parser &parser);
94 virtual ~Canvas5Graph();
95
97 int version() const;
98
100 struct LocalState {
102 explicit LocalState(MWAWPosition const &pos=MWAWPosition(), MWAWGraphicStyle const &style=MWAWGraphicStyle::emptyStyle())
103 : m_position(pos)
104 , m_style(style)
105 , m_transform()
106 {
107 }
108
109 void multiplyMatrix(std::array<double,9> const &mat);
111 MWAWPosition m_position;
113 MWAWGraphicStyle m_style;
115 MWAWTransformation m_transform;
116 };
117
118
119 protected:
120
121 // interface with main parser
122
124 bool sendShape(int sId);
125
126 //
127 // Intermediate level
128 //
129
131 bool findShapeDataZones(std::shared_ptr<Canvas5Structure::Stream> stream);
133 bool readShapeData(int id, Canvas5GraphInternal::Shape const &shape);
135 bool readSpecialData(std::shared_ptr<Canvas5Structure::Stream> stream, long len, Canvas5GraphInternal::ShapeData &data, std::string &extra);
137 std::shared_ptr<Canvas5GraphInternal::PseudoShape> readSpecialData(std::shared_ptr<Canvas5Structure::Stream> stream, long len, unsigned type, MWAWBox2f const &box, std::string &extra);
139 bool readShapes(Canvas5Structure::Stream &stream, int numShapes);
140
142 bool readMatrices(std::shared_ptr<Canvas5Structure::Stream> stream);
143
145 bool readDeR3(std::shared_ptr<Canvas5Structure::Stream> stream, Canvas5StyleManager::StyleList &styles);
146
147 //
148 // send data to the listener
149 //
150
152 bool sendShape(int sId, LocalState const &local);
154 bool send(Canvas5GraphInternal::Shape const &shape, LocalState const &local);
156 bool sendSpecial(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
157 LocalState const &local);
159 bool sendSpecial(MWAWListenerPtr listener, Canvas5GraphInternal::PseudoShape const &pseudoShape, LocalState const &local);
160
162 bool sendText(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data);
163
165 bool sendCurveText(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
166 LocalState const &local);
168 bool sendDimension(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
169 LocalState const &local);
171 bool sendDimension9(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
172 LocalState const &local);
174 bool sendEffect(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
175 LocalState const &local);
177 bool sendExtrude(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
178 LocalState const &local);
180 bool sendTechnical(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
181 LocalState const &local);
183 bool sendGIF(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data,
184 LocalState const &local);
185
186 //
187 // Low level
188 //
189
191 void send(MWAWListenerPtr listener, MWAWGraphicShape const &shape, MWAWTransformation const &transform,
192 MWAWGraphicStyle const &style);
194 void send(MWAWListenerPtr listener, librevenge::RVNGString const &text, MWAWVec2f const &center,
195 MWAWTransformation const &transform, MWAWFont const &font, bool addFrame);
196
197 private:
198 Canvas5Graph(Canvas5Graph const &orig) = delete;
199 Canvas5Graph &operator=(Canvas5Graph const &orig) = delete;
200
201 protected:
202 //
203 // data
204 //
206 MWAWParserStatePtr m_parserState;
207
209 std::shared_ptr<Canvas5GraphInternal::State> m_state;
210
212 Canvas5Parser *m_mainParser;
214 std::shared_ptr<Canvas5Image> m_imageParser;
216 std::shared_ptr<Canvas5StyleManager> m_styleManager;
217};
218#endif
219// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
Canvas5StyleManager.hxx
MWAWDebug.hxx
MWAWGraphicStyle.hxx
MWAWInputStream.hxx
MWAWPosition.hxx
Canvas5GraphInternal::SubDocument
Internal: the subdocument of a Canvas5Graph.
Definition Canvas5Graph.cxx:349
Canvas5Graph::sendGIF
bool sendGIF(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the gif's shape: AnGf (v7)
Definition Canvas5Graph.cxx:2867
Canvas5Graph::m_state
std::shared_ptr< Canvas5GraphInternal::State > m_state
the state
Definition Canvas5Graph.hxx:209
Canvas5Graph::sendExtrude
bool sendExtrude(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the extrude's special shape: Extr (pretty basic)
Definition Canvas5Graph.cxx:2732
Canvas5Graph::sendTechnical
bool sendTechnical(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the technical shape: Tech (v7)
Definition Canvas5Graph.cxx:2970
Canvas5Graph::~Canvas5Graph
virtual ~Canvas5Graph()
destructor
Definition Canvas5Graph.cxx:444
Canvas5Graph::readShapeData
bool readShapeData(int id, Canvas5GraphInternal::Shape const &shape)
try to read a shape data
Definition Canvas5Graph.cxx:686
Canvas5Graph::sendEffect
bool sendEffect(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the effect's special shape: effe
Definition Canvas5Graph.cxx:2675
Canvas5Graph::sendDimension9
bool sendDimension9(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the dimension line's special shape: DIMN: v9
Definition Canvas5Graph.cxx:3733
Canvas5Graph::m_styleManager
std::shared_ptr< Canvas5StyleManager > m_styleManager
the style manager
Definition Canvas5Graph.hxx:216
Canvas5Graph::Canvas5Graph
Canvas5Graph(Canvas5Parser &parser)
constructor
Definition Canvas5Graph.cxx:435
Canvas5Graph::Canvas5Graph
Canvas5Graph(Canvas5Graph const &orig)=delete
Canvas5Graph::sendCurveText
bool sendCurveText(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
try to send a curve's text zone: CvTe
Definition Canvas5Graph.cxx:3255
Canvas5Graph::readSpecialData
bool readSpecialData(std::shared_ptr< Canvas5Structure::Stream > stream, long len, Canvas5GraphInternal::ShapeData &data, std::string &extra)
try to read a special shape data
Definition Canvas5Graph.cxx:908
Canvas5Graph::m_imageParser
std::shared_ptr< Canvas5Image > m_imageParser
the image parser
Definition Canvas5Graph.hxx:214
Canvas5Graph::send
bool send(Canvas5GraphInternal::Shape const &shape, LocalState const &local)
try to send a shape with a transformation
Definition Canvas5Graph.cxx:1751
Canvas5Graph::version
int version() const
returns the file version
Definition Canvas5Graph.cxx:448
Canvas5Graph::readMatrices
bool readMatrices(std::shared_ptr< Canvas5Structure::Stream > stream)
try to read the different matrix
Definition Canvas5Graph.cxx:459
Canvas5Graph::sendText
bool sendText(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data)
try to send a text zone
Definition Canvas5Graph.cxx:2399
Canvas5Graph::sendSpecial
bool sendSpecial(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
try to send a special shape
Definition Canvas5Graph.cxx:1996
Canvas5Graph::sendDimension
bool sendDimension(MWAWListenerPtr listener, Canvas5GraphInternal::Shape const &shape, Canvas5GraphInternal::ShapeData const &data, LocalState const &local)
tries to send the dimension line's special shape: DIMN
Definition Canvas5Graph.cxx:3413
Canvas5Graph::readDeR3
bool readDeR3(std::shared_ptr< Canvas5Structure::Stream > stream, Canvas5StyleManager::StyleList &styles)
try to read a complementary styles zone: DeR3
Definition Canvas5Graph.cxx:1370
Canvas5Graph::sendShape
bool sendShape(int sId)
try to send a shape
Definition Canvas5Graph.cxx:1689
Canvas5Graph::m_mainParser
Canvas5Parser * m_mainParser
the main parser;
Definition Canvas5Graph.hxx:212
Canvas5Graph::operator=
Canvas5Graph & operator=(Canvas5Graph const &orig)=delete
Canvas5Graph::findShapeDataZones
bool findShapeDataZones(std::shared_ptr< Canvas5Structure::Stream > stream)
try to find the list of data's shape zones
Definition Canvas5Graph.cxx:539
Canvas5Graph::readShapes
bool readShapes(Canvas5Structure::Stream &stream, int numShapes)
try to read the different shapes
Definition Canvas5Graph.cxx:598
Canvas5Graph::m_parserState
MWAWParserStatePtr m_parserState
the parser state
Definition Canvas5Graph.hxx:206
Canvas5Graph::Canvas5Parser
friend class Canvas5Parser
Definition Canvas5Graph.hxx:88
Canvas5Graph::Canvas5Image
friend class Canvas5Image
Definition Canvas5Graph.hxx:87
Canvas5Image
the main class to read/convert the image or movie inside of Canvas 5-11 files
Definition Canvas5Image.hxx:78
Canvas5Parser
the main class to read a Canvas 5-10 files (and probably some not password protected Windows 11 files...
Definition Canvas5Parser.hxx:72
MWAWFont
Class to store font.
Definition MWAWFont.hxx:44
MWAWGraphicShape
a structure used to define a picture shape
Definition MWAWGraphicShape.hxx:46
MWAWGraphicStyle
a structure used to define a picture style
Definition MWAWGraphicStyle.hxx:48
MWAWGraphicStyle::emptyStyle
static MWAWGraphicStyle emptyStyle()
returns an empty style.
Definition MWAWGraphicStyle.hxx:477
MWAWParagraph
class to store the paragraph properties
Definition MWAWParagraph.hxx:85
MWAWPosition
Class to define the position of an object (textbox, picture, ..) in the document.
Definition MWAWPosition.hxx:48
MWAWTransformation
a transformation which stored the first row of a 3x3 perspective matrix
Definition libmwaw_internal.hxx:1199
libmwaw_internal.hxx
MWAWBox2f
MWAWBox2< float > MWAWBox2f
MWAWBox2 of float.
Definition libmwaw_internal.hxx:1193
MWAWParserStatePtr
std::shared_ptr< MWAWParserState > MWAWParserStatePtr
a smart pointer of MWAWParserState
Definition libmwaw_internal.hxx:557
MWAWListenerPtr
std::shared_ptr< MWAWListener > MWAWListenerPtr
a smart pointer of MWAWListener
Definition libmwaw_internal.hxx:553
MWAWVec2f
MWAWVec2< float > MWAWVec2f
MWAWVec2 of float.
Definition libmwaw_internal.hxx:842
Canvas5GraphInternal
Internal: the structures of a Canvas5Graph.
Definition Canvas5Graph.cxx:70
Canvas5Structure
a namespace used to define basic function or structure to read a Canvas v5-v11 file
Definition Canvas5BMParser.hxx:64
Canvas5GraphInternal::PseudoShape
Internal[low level]: a pseudo class to store the data corresponding to a shape.
Definition Canvas5Graph.cxx:291
Canvas5GraphInternal::ShapeData
Internal: the shape data.
Definition Canvas5Graph.cxx:86
Canvas5GraphInternal::Shape
Internal: the shape of a Canvas5Graph.
Definition Canvas5Graph.cxx:182
Canvas5GraphInternal::State
Internal: the state of a Canvas5Graph.
Definition Canvas5Graph.cxx:307
Canvas5Graph::LocalState
Internal: the local state of a Canvas5Graph.
Definition Canvas5Graph.hxx:100
Canvas5Graph::LocalState::multiplyMatrix
void multiplyMatrix(std::array< double, 9 > const &mat)
set the matrix transform
Definition Canvas5Graph.cxx:4299
Canvas5Graph::LocalState::m_style
MWAWGraphicStyle m_style
the shape style
Definition Canvas5Graph.hxx:113
Canvas5Graph::LocalState::m_transform
MWAWTransformation m_transform
the shape transformation
Definition Canvas5Graph.hxx:115
Canvas5Graph::LocalState::LocalState
LocalState(MWAWPosition const &pos=MWAWPosition(), MWAWGraphicStyle const &style=MWAWGraphicStyle::emptyStyle())
default constructor
Definition Canvas5Graph.hxx:102
Canvas5Graph::LocalState::m_position
MWAWPosition m_position
the shape position position
Definition Canvas5Graph.hxx:111
Canvas5Structure::Stream
a sub stream of Canvas5Structure
Definition Canvas5Structure.hxx:49
Canvas5StyleManager::StyleList
a structure use to store a list of styles
Definition Canvas5StyleManager.hxx:109