MsWksDocument.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#ifndef MS_WKS_DOCUMENT
35# define MS_WKS_DOCUMENT
36
37#include <string>
38#include <map>
39#include <vector>
40
41#include <librevenge/librevenge.h>
42
43#include "libmwaw_internal.hxx"
44
45#include "MWAWDebug.hxx"
46#include "MWAWCell.hxx"
47#include "MWAWParser.hxx"
48
50{
51struct State;
52
53class SubDocument;
54}
55
56class MsWksParser;
57class MsWksDBParser;
58class MsWksDRParser;
59class MsWksSSParser;
60class MsWks4Zone;
61
62class MsWksGraph;
63class MsWks3Text;
64class MsWks4Text;
65
69{
71 friend class MsWksParser;
72 friend class MsWks4Zone;
73 friend class MsWksDBParser;
74 friend class MsWksDRParser;
75 friend class MsWksSSParser;
76public:
80 struct Zone {
82 Zone(ZoneType type=Z_NONE, int zoneId=-1) : m_type(type), m_zoneId(zoneId), m_textId(-1) {}
89 };
90
91public:
92
96 virtual ~MsWksDocument();
97
99 int version() const;
101 void setVersion(int vers);
105 void setKind(MWAWDocument::Kind kind);
106
109 {
110 return m_input;
111 }
114 {
115 return *m_parser;
116 }
118 shared_ptr<MsWksGraph> getGraphParser()
119 {
120 return m_graphParser;
121 }
123 shared_ptr<MsWks3Text> getTextParser3();
125 shared_ptr<MsWks4Text> getTextParser4();
128 {
129 return m_asciiFile;
130 }
131
132 //
133 // read some v3 structure
134 //
135
137 bool checkHeader3(MWAWHeader *header, bool strict=false);
139 long getLengthOfFileHeader3() const;
141 bool readPrintInfo();
143 bool readDocumentInfo(long sz=-1);
145 bool readZone(Zone &zone);
147 bool readGroupHeaderFooter(bool header, int check);
148
149 //
150 // read some ole structures
151 //
152
156 std::vector<std::string> const &getUnparsedOLEZones() const;
157 //
158 // utilities functions
159 //
160
162 bool hasHeader() const;
164 bool hasFooter() const;
166 float getHeaderFooterHeight(bool header) const;
168 void getPageSpanList(std::vector<MWAWPageSpan> &pagesList, int &numPages);
170 bool getColor(int id, MWAWColor &col, int vers);
172 std::vector<MWAWColor> const &getPalette(int vers);
173
175 std::multimap<int, Zone> &getTypeZoneMap();
177 Zone getZone(ZoneType type) const;
179 int getNewZoneId() const;
181 std::multimap<std::string, MWAWEntry> &getEntryMap();
182
183 // general interface
184
186 void sendZone(int zoneType);
187
188 // interface with the text parser
189
191 void newPage(int page, bool softBreak=false);
193 void sendFootnoteContent(int noteId);
195 void sendFootnote(int id);
197 void sendText(int id);
198
199 // interface with the graph parser
200
202 void sendOLE(int id, MWAWPosition const &pos, MWAWGraphicStyle const &style);
204 void sendRBIL(int id, MWAWVec2i const &sz);
206 void sendTextbox(MWAWEntry const &entry, std::string const &frame);
207
208protected:
209 //
210 // spreadsheet/database function
211 //
212
216 bool readDBString(long endPos, std::string &res);
218 bool readDBNumber(long endPos, double &res, bool &isNan, std::string &str);
219 /* reads a formula */
220 bool readFormula(long endPos, MWAWCellContent &content, std::string &extra);
221
222protected:
223
224 //
225 // low level
226 //
228 void initAsciiFile(std::string const &name);
229
230private:
233
234 //
235 // data
236 //
237
238protected:
240 shared_ptr<MsWksDocumentInternal::State> m_state;
241public:
243 shared_ptr<MWAWParserState> m_parserState;
244
245protected:
254
256 shared_ptr<MsWksGraph> m_graphParser;
258 shared_ptr<MsWks3Text> m_textParser3;
260 shared_ptr<MsWks4Text> m_textParser4;
261
263 typedef void (MWAWParser::* NewPage)(int page, bool softBreak);
264
267};
268#endif
269// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
Defines MWAWCell (cell content and format)
small class use to define a sheet cell content
Definition: MWAWCell.hxx:356
Kind
an enum to define the kind of document
Definition: MWAWDocument.hxx:80
basic class to store an entry in a file This contained :
Definition: MWAWEntry.hxx:47
a structure used to define a picture style
Definition: MWAWGraphicStyle.hxx:48
a function used by MWAWDocument to store the version of document
Definition: MWAWHeader.hxx:57
virtual class which defines the ancestor of all main zone parser
Definition: MWAWParser.hxx:100
Class to define the position of an object (textbox, picture, ..) in the document.
Definition: MWAWPosition.hxx:48
the main class to read the text part of Microsoft Works file
Definition: MsWks3Text.hxx:70
The class which parses text zones in a mac MS Works document v4.
Definition: MsWks4Text.hxx:65
The class which parses the main zones of a mac MS Works document v4.
Definition: MsWks4Zone.hxx:74
the main class to read a Microsoft Works database file and convert it in a spreadsheet file
Definition: MsWksDBParser.hxx:66
the main class to read a Microsoft Works graphic file
Definition: MsWksDRParser.hxx:60
Internal: the subdocument of a MsWksDocument.
Definition: MsWksDocument.cxx:204
the main class to read/store generic data of a MsWorks document v1-v3
Definition: MsWksDocument.hxx:69
void getPageSpanList(std::vector< MWAWPageSpan > &pagesList, int &numPages)
get the page span list and the number of page for a v1-v3 document
Definition: MsWksDocument.cxx:404
MWAWParser & getMainParser()
returns the main parser
Definition: MsWksDocument.hxx:113
shared_ptr< MsWks4Text > getTextParser4()
returns the text parser (for v4 document)
Definition: MsWksDocument.cxx:307
bool createOLEZones(MWAWInputStreamPtr input)
finds the different OLE zones
Definition: MsWksDocument.cxx:592
int getNewZoneId() const
returns a free zone'id
Definition: MsWksDocument.cxx:333
MWAWInputStreamPtr m_input
the input which can be an OLE in MSWorks 4 file
Definition: MsWksDocument.hxx:251
bool hasFooter() const
returns true if the document has some footer ( found by checkHeader3)
Definition: MsWksDocument.cxx:394
bool readDBNumber(long endPos, double &res, bool &isNan, std::string &str)
try to read a number
Definition: MsWksDocument.cxx:1184
shared_ptr< MsWks4Text > m_textParser4
the text document (for v4 document)
Definition: MsWksDocument.hxx:260
shared_ptr< MWAWParserState > m_parserState
the parser state
Definition: MsWksDocument.hxx:243
MsWksDocument(MsWksDocument const &orig)
shared_ptr< MsWks3Text > m_textParser3
the text document (for v1-3 document)
Definition: MsWksDocument.hxx:258
ZoneType
the different type of zone (v1-v3)
Definition: MsWksDocument.hxx:78
@ Z_MAIN
Definition: MsWksDocument.hxx:78
@ Z_NONE
Definition: MsWksDocument.hxx:78
@ Z_HEADER
Definition: MsWksDocument.hxx:78
@ Z_FOOTER
Definition: MsWksDocument.hxx:78
void(MWAWParser::* NewPage)(int page, bool softBreak)
callback used to send a page break
Definition: MsWksDocument.hxx:263
NewPage m_newPage
the new page callback
Definition: MsWksDocument.hxx:266
void sendTextbox(MWAWEntry const &entry, std::string const &frame)
send a textbox
Definition: MsWksDocument.cxx:518
bool readCellInFormula(MWAWCellContent::FormulaInstruction &instr, bool is2D)
reads a cell
Definition: MsWksDocument.cxx:1194
long getLengthOfFileHeader3() const
returns the length of the file header of a v1-v3 document (if know)
Definition: MsWksDocument.cxx:356
void sendRBIL(int id, MWAWVec2i const &sz)
send a rbil zone
Definition: MsWksDocument.cxx:508
shared_ptr< MsWks3Text > getTextParser3()
returns the text parser (for v1-v3 document)
Definition: MsWksDocument.cxx:301
MWAWInputStreamPtr & getInput()
returns the actual input
Definition: MsWksDocument.hxx:108
bool readGroupHeaderFooter(bool header, int check)
try to read a header/footer group
Definition: MsWksDocument.cxx:856
std::vector< std::string > const & getUnparsedOLEZones() const
returns the list of unparsed OLE zones
Definition: MsWksDocument.cxx:587
bool hasHeader() const
returns true if the document has some header ( found by checkHeader3)
Definition: MsWksDocument.cxx:389
libmwaw::DebugFile m_asciiFile
the debug file of the actual input
Definition: MsWksDocument.hxx:253
bool checkHeader3(MWAWHeader *header, bool strict=false)
checks if the file header corresponds to a v1-v3 document (or not)
Definition: MsWksDocument.cxx:1002
libmwaw::DebugFile & ascii()
a DebugFile used to write what we recognize when we parse the document
Definition: MsWksDocument.hxx:127
bool readZone(Zone &zone)
try to read a generic zone
Definition: MsWksDocument.cxx:955
std::multimap< std::string, MWAWEntry > & getEntryMap()
returns the document entry map of a v4 document
Definition: MsWksDocument.cxx:351
bool getColor(int id, MWAWColor &col, int vers)
returns the color which correspond to an index
Definition: MsWksDocument.cxx:562
void newPage(int page, bool softBreak=false)
tries to create a new page
Definition: MsWksDocument.cxx:470
MWAWParser * m_parser
the main parser
Definition: MsWksDocument.hxx:247
bool readDBString(long endPos, std::string &res)
try to read a string
Definition: MsWksDocument.cxx:1169
bool readPrintInfo()
read the print info zone (v1-v3)
Definition: MsWksDocument.cxx:676
void sendZone(int zoneType)
try to send a zone (v1-v3 document)
Definition: MsWksDocument.cxx:366
void sendFootnote(int id)
tries to send a footnote
Definition: MsWksDocument.cxx:481
bool readDocumentInfo(long sz=-1)
try to read the documentinfo ( v1-v3)
Definition: MsWksDocument.cxx:742
shared_ptr< MsWksDocumentInternal::State > m_state
the state
Definition: MsWksDocument.hxx:240
virtual ~MsWksDocument()
destructor
Definition: MsWksDocument.cxx:291
MsWksDocument * m_parentDocument
the parent document (if this is not the main document)
Definition: MsWksDocument.hxx:249
bool readFormula(long endPos, MWAWCellContent &content, std::string &extra)
Definition: MsWksDocument.cxx:1233
MsWksDocument(MWAWInputStreamPtr input, MWAWParser &parser)
constructor
Definition: MsWksDocument.cxx:283
void setVersion(int vers)
sets the document's version
Definition: MsWksDocument.cxx:313
void initAsciiFile(std::string const &name)
inits the ascii file
Definition: MsWksDocument.cxx:295
void sendText(int id)
try to send a text zone (v1-v3 document)
Definition: MsWksDocument.cxx:361
void sendFootnoteContent(int noteId)
try to send a footnote content (v4 document)
Definition: MsWksDocument.cxx:374
MsWksDocument & operator=(MsWksDocument const &orig)
void setKind(MWAWDocument::Kind kind)
sets the document's kind
Definition: MsWksDocument.cxx:328
float getHeaderFooterHeight(bool header) const
returns the header/footer height (found by readGroupHeaderFooter)
Definition: MsWksDocument.cxx:399
shared_ptr< MsWksGraph > m_graphParser
the graph document
Definition: MsWksDocument.hxx:256
Zone getZone(ZoneType type) const
returns the zone corresponding to a zoneType (v1-v3 document)
Definition: MsWksDocument.cxx:338
shared_ptr< MsWksGraph > getGraphParser()
returns the graph parser
Definition: MsWksDocument.hxx:118
void sendOLE(int id, MWAWPosition const &pos, MWAWGraphicStyle const &style)
send an OLE zone
Definition: MsWksDocument.cxx:492
MWAWDocument::Kind getKind() const
returns the document's kind
Definition: MsWksDocument.cxx:323
int version() const
returns the document's version
Definition: MsWksDocument.cxx:318
std::multimap< int, Zone > & getTypeZoneMap()
returns the document entry map of a v1-v3 document
Definition: MsWksDocument.cxx:346
std::vector< MWAWColor > const & getPalette(int vers)
returns a list of color corresponding to a version
Definition: MsWksDocument.cxx:557
the main class to read the graphic of a Microsoft Works file
Definition: MsWksGraph.hxx:74
the main class to read a Microsoft Works file: v1-v4
Definition: MsWksParser.hxx:60
the main class to read a Microsoft Works spreadsheet file
Definition: MsWksSSParser.hxx:66
an interface used to insert comment in a binary file, written in ascii form (if debug_with_files is n...
Definition: MWAWDebug.hxx:66
shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:503
Internal: the structures of a MsWksDocument.
Definition: MsWksDocument.cxx:64
small class use to define a formula instruction
Definition: MWAWCell.hxx:359
the class to store a color
Definition: libmwaw_internal.hxx:182
a zone of a MsWksDocument ( main, header, footer )
Definition: MsWksDocument.hxx:80
ZoneType m_type
the zone type
Definition: MsWksDocument.hxx:84
int m_textId
the text internal id
Definition: MsWksDocument.hxx:88
int m_zoneId
the parser zone id
Definition: MsWksDocument.hxx:86
Zone(ZoneType type=Z_NONE, int zoneId=-1)
the constructor
Definition: MsWksDocument.hxx:82

Generated on Wed Jan 19 2022 22:23:15 for libmwaw by doxygen 1.9.3