Lotus.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2/* libwps
3 * Version: MPL 2.0 / LGPLv2.1+
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 * Major Contributor(s):
10 * Copyright (C) 2006, 2007 Andrew Ziem
11 * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
12 * Copyright (C) 2003 Marc Maurer (uwog@uwog.net)
13 *
14 * For minor contributions see the git repository.
15 *
16 * Alternatively, the contents of this file may be used under the terms
17 * of the GNU Lesser General Public License Version 2.1 or later
18 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
19 * applicable instead of those above.
20 */
21
22#ifndef LOTUS_H
23#define LOTUS_H
24
25#include <vector>
26
27#include <librevenge-stream/librevenge-stream.h>
28#include "libwps_internal.h"
29#include "libwps_tools_win.h"
30#include "WPSDebug.h"
31
32#include "WKSParser.h"
33
34 namespace LotusParserInternal
35{
36 class SubDocument;
37 struct State;
38}
39
40 class LotusGraph;
41 class LotusChart;
42 class LotusSpreadsheet;
43 class LotusStyleManager;
44 class WPSGraphicStyle;
45 class WPSOLE1Parser;
46
47/* .wk3: a spreadsheet is composed in two files
48 + a wk3 file which contains the spreadsheet data
49 + a fm3 file which contains the different formatings
50
51 .wk4: the file contains three parts:
52 + the wk3 previous file
53 + the fm3 file
54 + an unknown part, which may code the file structure,
55
56 Normally the wk3 and the fm3 are a sequence of small zones,
57 but picture seems to be appeared at random position inside the
58 fm3 part (and even inside some structure fm3 structures...)
59
60 search for .ole and OLE1
61
62 .123: the file contains at least two parts:
63 + the 123 storing the spreadsheet's data and format
64 + the last part containing the file's structure
65 + some optional part containing chart, picture, ...
66 */
67
72 class LotusParser final : public WKSParser
73{
74 friend class LotusParserInternal::SubDocument;
75 friend class LotusChart;
76 friend class LotusGraph;
77 friend class LotusSpreadsheet;
78 friend class LotusStyleManager;
79 public:
81 LotusParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header,
82 libwps_tools_win::Font::Type encoding=libwps_tools_win::Font::UNKNOWN,
83 char const *password=nullptr);
85 ~LotusParser() final;
87 void parse(librevenge::RVNGSpreadsheetInterface *documentInterface) final;
89 bool checkHeader(WPSHeader *header, bool strict=false);
90
92 struct Link
93 {
95 Link() : m_name(), m_linkName()
96 {
97 }
98
99 std::string m_name;
101 WPSVec3i m_cells[2];
103 librevenge::RVNGString m_linkName;
104 };
105 protected:
107 int version() const;
108
109 //
110 // interface
111 //
112
114 bool getFont(int id, WPSFont &font, libwps_tools_win::Font::Type &type) const;
118 libwps_tools_win::Font::Type getDefaultFontType() const;
120 std::vector<Link> getLinksList(int lId) const;
121
122 //
123 // interface with LotusChart
124 //
125
127 bool sendChart(int cId, WPSPosition const &pos, WPSGraphicStyle const &style);
128
129 //
130 // interface with LotusGraph
131 //
132
134 bool hasGraphics(int sheetId) const;
136 void sendGraphics(int sheetId);
137
138 //
139 // interface with LotusSpreadsheet
140 //
141
143 bool getLeftTopPosition(Vec2i const &cell, int spreadsheet, Vec2f &pos) const;
145 librevenge::RVNGString getSheetName(int id) const;
146
147 //
148 // interface with WPSOLE1Parser
149 //
150
152 bool updateEmbeddedObject(int id, WPSEmbeddedObject &object) const;
153
155 bool createZones();
157 bool createListener(librevenge::RVNGSpreadsheetInterface *interface);
158
159 //
160 // low level
161 //
162
164 bool parseFormatStream();
165
167 bool checkHeader(std::shared_ptr<WPSStream> stream, bool mainStream, bool strict);
169 bool readZones(std::shared_ptr<WPSStream> stream);
171 bool readDataZone(std::shared_ptr<WPSStream> stream);
173 bool readZone(std::shared_ptr<WPSStream> &stream);
175 bool readZone1(std::shared_ptr<WPSStream> stream);
177 bool readSheetZone(std::shared_ptr<WPSStream> stream);
179 static bool readZone4(std::shared_ptr<WPSStream> stream);
181 static bool readChartZone(std::shared_ptr<WPSStream> stream);
183 static bool readRefZone(std::shared_ptr<WPSStream> stream);
185 static bool readZone7(std::shared_ptr<WPSStream> stream);
187 bool readZone8(std::shared_ptr<WPSStream> stream);
189 static bool readVersionZone(std::shared_ptr<WPSStream> stream);
191 static bool readZoneV3(std::shared_ptr<WPSStream> stream);
193
195 bool readMacFontName(std::shared_ptr<WPSStream> stream, long endPos);
197 static bool readFMTStyleName(std::shared_ptr<WPSStream> stream);
199 bool readLinkZone(std::shared_ptr<WPSStream> stream);
201 bool readDocumentInfoMac(std::shared_ptr<WPSStream> stream, long endPos);
202
204
206 static RVNGInputStreamPtr decodeStream(RVNGInputStreamPtr input, long endPos, std::vector<uint8_t> const &key);
208 static std::vector<uint8_t> retrievePasswordKeys(std::vector<uint8_t> const &fileKeys);
209
210 std::shared_ptr<WKSContentListener> m_listener;
212 std::shared_ptr<LotusParserInternal::State> m_state;
214 std::shared_ptr<LotusStyleManager> m_styleManager;
216 std::shared_ptr<LotusChart> m_chartParser;
218 std::shared_ptr<LotusGraph> m_graphParser;
220 std::shared_ptr<LotusSpreadsheet> m_spreadsheetParser;
222 std::shared_ptr<WPSOLE1Parser> m_ole1Parser;
223};
224
225#endif /* LOTUS_H */
226/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
WKSParser.h
WPSDebug.h
LotusChart
This class parses Microsoft Works chart file.
Definition LotusChart.h:54
LotusGraph
This class parses Microsoft Works graph file.
Definition LotusGraph.h:56
LotusParser::LotusChart
friend class LotusChart
Definition Lotus.h:75
LotusParser::LotusSpreadsheet
friend class LotusSpreadsheet
Definition Lotus.h:77
LotusParser::readZones
bool readZones(std::shared_ptr< WPSStream > stream)
finds the different zones (spreadsheet, chart, print, ...)
Definition Lotus.cpp:577
LotusParser::m_styleManager
std::shared_ptr< LotusStyleManager > m_styleManager
the style manager
Definition Lotus.h:214
LotusParser::updateEmbeddedObject
bool updateEmbeddedObject(int id, WPSEmbeddedObject &object) const
try to retrieve the content of a graphic, knowing it local id
Definition Lotus.cpp:328
LotusParser::readZone
bool readZone(std::shared_ptr< WPSStream > &stream)
reads a zone
Definition Lotus.cpp:649
LotusParser::readLinkZone
bool readLinkZone(std::shared_ptr< WPSStream > stream)
reads a link
Definition Lotus.cpp:3115
LotusParser::m_graphParser
std::shared_ptr< LotusGraph > m_graphParser
the graph manager
Definition Lotus.h:218
LotusParser::readChartZone
static bool readChartZone(std::shared_ptr< WPSStream > stream)
reads a zone of type 5: 123 files
Definition Lotus.cpp:2456
LotusParser::~LotusParser
~LotusParser() final
destructor
Definition Lotus.cpp:261
LotusParser::getLinksList
std::vector< Link > getLinksList(int lId) const
returns a list of links corresponding to an id
Definition Lotus.cpp:291
LotusParser::m_spreadsheetParser
std::shared_ptr< LotusSpreadsheet > m_spreadsheetParser
the spreadsheet manager
Definition Lotus.h:220
LotusParser::getLeftTopPosition
bool getLeftTopPosition(Vec2i const &cell, int spreadsheet, Vec2f &pos) const
returns the left top position of a cell
Definition Lotus.cpp:313
LotusParser::readMacFontName
bool readMacFontName(std::shared_ptr< WPSStream > stream, long endPos)
reads a mac font name
Definition Lotus.cpp:2948
LotusParser::readZone8
bool readZone8(std::shared_ptr< WPSStream > stream)
reads a zone of type 8: 123 files
Definition Lotus.cpp:2768
LotusParser::sendGraphics
void sendGraphics(int sheetId)
send the graphics corresponding to a sheetId
Definition Lotus.cpp:308
LotusParser::m_ole1Parser
std::shared_ptr< WPSOLE1Parser > m_ole1Parser
the ole1 parser
Definition Lotus.h:222
LotusParser::decodeStream
static RVNGInputStreamPtr decodeStream(RVNGInputStreamPtr input, long endPos, std::vector< uint8_t > const &key)
try to decode a stream, if successful, replace the stream'input by the new one
Definition Lotus.cpp:3304
LotusParser::retrievePasswordKeys
static std::vector< uint8_t > retrievePasswordKeys(std::vector< uint8_t > const &fileKeys)
try to guess a password knowing its file keys. Returns the keys if it founds a valid password
Definition Lotus.cpp:3366
LotusParser::checkHeader
bool checkHeader(WPSHeader *header, bool strict=false)
checks if the document header is correct (or not)
Definition Lotus.cpp:427
LotusParser::readSheetZone
bool readSheetZone(std::shared_ptr< WPSStream > stream)
reads a zone of type 2: 123 files
Definition Lotus.cpp:1973
LotusParser::parseFormatStream
bool parseFormatStream()
check for the existence of a format stream, if it exists, parse it
Definition Lotus.cpp:553
LotusParser::readZoneV3
static bool readZoneV3(std::shared_ptr< WPSStream > stream)
parse a wk123 zone
Definition Lotus.cpp:1765
LotusParser::readVersionZone
static bool readVersionZone(std::shared_ptr< WPSStream > stream)
reads a zone of type a: 123 files
Definition Lotus.cpp:2910
LotusParser::readZone1
bool readZone1(std::shared_ptr< WPSStream > stream)
reads a zone of type 1: 123 files
Definition Lotus.cpp:1789
LotusParser::createZones
bool createZones()
try to parse the different zones
Definition Lotus.cpp:514
LotusParser::sendChart
bool sendChart(int cId, WPSPosition const &pos, WPSGraphicStyle const &style)
try to send a chart
Definition Lotus.cpp:323
LotusParser::LotusParser
LotusParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header, libwps_tools_win::Font::Type encoding=libwps_tools_win::Font::UNKNOWN, char const *password=nullptr)
constructor
Definition Lotus.cpp:243
LotusParser::m_state
std::shared_ptr< LotusParserInternal::State > m_state
the listener (if set)
Definition Lotus.h:212
LotusParser::getSheetName
librevenge::RVNGString getSheetName(int id) const
returns the name of the id's spreadsheet
Definition Lotus.cpp:318
LotusParser::SubDocument
friend class LotusParserInternal::SubDocument
Definition Lotus.h:74
LotusParser::readZone7
static bool readZone7(std::shared_ptr< WPSStream > stream)
reads a zone of type 7: 123 files
Definition Lotus.cpp:2642
LotusParser::getFont
bool getFont(int id, WPSFont &font, libwps_tools_win::Font::Type &type) const
returns the font corresponding to an id
Definition Lotus.cpp:278
LotusParser::m_chartParser
std::shared_ptr< LotusChart > m_chartParser
the chart manager
Definition Lotus.h:216
LotusParser::readRefZone
static bool readRefZone(std::shared_ptr< WPSStream > stream)
reads a zone of type 6: 123 files
Definition Lotus.cpp:2556
LotusParser::readDocumentInfoMac
bool readDocumentInfoMac(std::shared_ptr< WPSStream > stream, long endPos)
reads a mac document info zone: zone 1b, then 2af8
Definition Lotus.cpp:3232
LotusParser::getDefaultFontType
libwps_tools_win::Font::Type getDefaultFontType() const
returns the default font type, ie.
Definition Lotus.cpp:273
LotusParser::LotusGraph
friend class LotusGraph
Definition Lotus.h:76
LotusParser::readZone4
static bool readZone4(std::shared_ptr< WPSStream > stream)
reads a zone of type 4: 123 files
Definition Lotus.cpp:2272
LotusParser::version
int version() const
return the file version
Definition Lotus.cpp:265
LotusParser::parse
void parse(librevenge::RVNGSpreadsheetInterface *documentInterface) final
called by WPSDocument to parse the file
Definition Lotus.cpp:343
LotusParser::readFMTStyleName
static bool readFMTStyleName(std::shared_ptr< WPSStream > stream)
reads a format style name: b6
Definition Lotus.cpp:3068
LotusParser::readDataZone
bool readDataZone(std::shared_ptr< WPSStream > stream)
parse the different zones 1B
Definition Lotus.cpp:1332
LotusParser::m_listener
std::shared_ptr< WKSContentListener > m_listener
Definition Lotus.h:210
LotusParser::createListener
bool createListener(librevenge::RVNGSpreadsheetInterface *interface)
creates the main listener
Definition Lotus.cpp:408
LotusParser::hasGraphics
bool hasGraphics(int sheetId) const
return true if the sheet sheetId has some graphic
Definition Lotus.cpp:303
LotusParser::LotusStyleManager
friend class LotusStyleManager
Definition Lotus.h:78
LotusSpreadsheet
This class parses Microsoft Works spreadsheet file.
Definition LotusSpreadsheet.h:53
LotusStyleManager
This class parses the Lotus style.
Definition LotusStyleManager.h:51
WKSParser::WKSParser
WKSParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header)
Definition WKSParser.cpp:30
WPSFont
define the font properties
Definition WPSFont.h:37
WPSGraphicStyle
a structure used to define a picture style
Definition WPSGraphicStyle.h:38
WPSHeader
Definition WPSHeader.h:32
WPSOLE1Parser
a class used to parse a container which is used by Lotus123 (and also by RagTime).
Definition WPSOLE1Parser.h:50
WPSPosition
Class to define the position of an object (textbox, picture, ..) in the document.
Definition WPSPosition.h:40
libwps_tools_win::Font::Type
Type
enum Type
Definition libwps_tools_win.h:46
libwps_tools_win::Font::UNKNOWN
@ UNKNOWN
Definition libwps_tools_win.h:63
libwps_internal.h
WPSHeaderPtr
std::shared_ptr< WPSHeader > WPSHeaderPtr
shared pointer to WPSHeader
Definition libwps_internal.h:109
Vec2i
Vec2< int > Vec2i
Vec2 of int.
Definition libwps_internal.h:702
Vec2f
Vec2< float > Vec2f
Vec2 of float.
Definition libwps_internal.h:704
RVNGInputStreamPtr
std::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
shared pointer to librevenge::RVNGInputStream
Definition libwps_internal.h:87
WPSVec3i
WPSVec3< int > WPSVec3i
WPSVec3 of int.
Definition libwps_internal.h:1067
libwps_tools_win.h
LotusParserInternal
Internal: namespace to define internal class of LotusParser.
Definition Lotus.cpp:61
LotusParserInternal::State
the state of LotusParser
Definition Lotus.cpp:81
LotusParser::Link::m_name
std::string m_name
the basic name(used to retrieve a data)
Definition Lotus.h:99
LotusParser::Link::Link
Link()
constructor
Definition Lotus.h:95
LotusParser::Link::m_cells
WPSVec3i m_cells[2]
the cell positions
Definition Lotus.h:101
LotusParser::Link::m_linkName
librevenge::RVNGString m_linkName
the link name
Definition Lotus.h:103
WPSEmbeddedObject
small class use to define a embedded object
Definition libwps_internal.h:1077