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 
49 namespace MsWksDocumentInternal
50 {
51 struct State;
52 
53 class SubDocument;
54 }
55 
56 class MsWksParser;
57 class MsWksDBParser;
58 class MsWksDRParser;
59 class MsWksSSParser;
60 class MsWks4Zone;
61 
62 class MsWksGraph;
63 class MsWks3Text;
64 class MsWks4Text;
65 
69 {
71  friend class MsWksParser;
72  friend class MsWks4Zone;
73  friend class MsWksDBParser;
74  friend class MsWksDRParser;
75  friend class MsWksSSParser;
76 public:
78  enum ZoneType { Z_MAIN, Z_HEADER, Z_FOOTER, Z_NONE };
80  struct Zone {
82  Zone(ZoneType type=Z_NONE, int zoneId=-1)
83  : m_type(type)
84  , m_zoneId(zoneId)
85  , m_textId(-1)
86  {
87  }
91  int m_zoneId;
93  int m_textId;
94  };
95 
96 public:
97 
99  MsWksDocument(MWAWInputStreamPtr const &input, MWAWParser &parser);
101  virtual ~MsWksDocument();
102 
104  int version() const;
106  void setVersion(int vers);
108  MWAWDocument::Kind getKind() const;
110  void setKind(MWAWDocument::Kind kind);
111 
114  {
115  return m_input;
116  }
119  {
120  return *m_parser;
121  }
123  std::shared_ptr<MsWksGraph> getGraphParser()
124  {
125  return m_graphParser;
126  }
128  std::shared_ptr<MsWks3Text> getTextParser3();
130  std::shared_ptr<MsWks4Text> getTextParser4();
133  {
134  return m_asciiFile;
135  }
136 
137  //
138  // read some v3 structure
139  //
140 
142  bool checkHeader3(MWAWHeader *header, bool strict=false);
144  long getLengthOfFileHeader3() const;
146  bool readPrintInfo();
148  bool readDocumentInfo(long sz=-1);
150  bool readZone(Zone &zone);
152  bool readGroupHeaderFooter(bool header, int check);
153 
154  //
155  // read some ole structures
156  //
157 
159  bool createOLEZones(MWAWInputStreamPtr input);
161  std::vector<std::string> const &getUnparsedOLEZones() const;
162  //
163  // utilities functions
164  //
165 
167  bool hasHeader() const;
169  bool hasFooter() const;
171  float getHeaderFooterHeight(bool header) const;
173  void getPageSpanList(std::vector<MWAWPageSpan> &pagesList, int &numPages);
175  bool getColor(int id, MWAWColor &col, int vers);
177  std::vector<MWAWColor> const &getPalette(int vers);
178 
180  std::multimap<int, Zone> &getTypeZoneMap();
182  Zone getZone(ZoneType type) const;
184  int getNewZoneId() const;
186  std::multimap<std::string, MWAWEntry> &getEntryMap();
187 
188  // general interface
189 
191  void sendZone(int zoneType);
192 
193  // interface with the text parser
194 
196  void newPage(int page, bool softBreak=false);
198  void sendFootnoteContent(int noteId);
200  void sendFootnote(int id);
202  void sendText(int id);
203 
204  // interface with the graph parser
205 
207  void sendOLE(int id, MWAWPosition const &pos, MWAWGraphicStyle const &style);
209  void sendRBIL(int id, MWAWVec2i const &sz);
211  void sendTextbox(MWAWEntry const &entry, std::string const &frame);
212 
213 protected:
214  //
215  // spreadsheet/database function
216  //
217 
219  bool readCellInFormula(MWAWCellContent::FormulaInstruction &instr, bool is2D);
221  bool readDBString(long endPos, std::string &res);
223  bool readDBNumber(long endPos, double &res, bool &isNan, std::string &str);
224  /* reads a formula */
225  bool readFormula(long endPos, MWAWCellContent &content, std::string &extra);
226 
227 protected:
228 
229  //
230  // low level
231  //
233  void initAsciiFile(std::string const &name);
234 
235 private:
236  MsWksDocument(MsWksDocument const &orig) = delete;
237  MsWksDocument &operator=(MsWksDocument const &orig) = delete;
238 
239  //
240  // data
241  //
242 
243 protected:
245  std::shared_ptr<MsWksDocumentInternal::State> m_state;
246 public:
248  std::shared_ptr<MWAWParserState> m_parserState;
249 
250 protected:
259 
261  std::shared_ptr<MsWksGraph> m_graphParser;
263  std::shared_ptr<MsWks3Text> m_textParser3;
265  std::shared_ptr<MsWks4Text> m_textParser4;
266 
268  typedef void (MWAWParser::* NewPage)(int page, bool softBreak);
269 
271  NewPage m_newPage;
272 };
273 #endif
274 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
small class use to define a formula instruction
Definition: MWAWCell.hxx:382
a function used by MWAWDocument to store the version of document
Definition: MWAWHeader.hxx:56
MWAWInputStreamPtr m_input
the input which can be an OLE in MSWorks 4 file
Definition: MsWksDocument.hxx:256
the main class to read a Microsoft Works database file and convert it in a spreadsheet file ...
Definition: MsWksDBParser.hxx:65
std::shared_ptr< MsWks3Text > m_textParser3
the text document (for v1-3 document)
Definition: MsWksDocument.hxx:263
int m_zoneId
the parser zone id
Definition: MsWksDocument.hxx:91
the main class to read a Microsoft Works file: v1-v4
Definition: MsWksParser.hxx:59
The class which parses text zones in a mac MS Works document v4.
Definition: MsWks4Text.hxx:64
MWAWParser & getMainParser()
returns the main parser
Definition: MsWksDocument.hxx:118
ZoneType m_type
the zone type
Definition: MsWksDocument.hxx:89
an interface used to insert comment in a binary file, written in ascii form (if debug_with_files is n...
Definition: MWAWDebug.hxx:65
libmwaw::DebugFile m_asciiFile
the debug file of the actual input
Definition: MsWksDocument.hxx:258
a structure used to define a picture style
Definition: MWAWGraphicStyle.hxx:47
ZoneType
the different type of zone (v1-v3)
Definition: MsWksDocument.hxx:78
a zone of a MsWksDocument ( main, header, footer )
Definition: MsWksDocument.hxx:80
MsWksDocument * m_parentDocument
the parent document (if this is not the main document)
Definition: MsWksDocument.hxx:254
std::shared_ptr< MsWks4Text > m_textParser4
the text document (for v4 document)
Definition: MsWksDocument.hxx:265
the class to store a color
Definition: libmwaw_internal.hxx:192
small class use to define a sheet cell content
Definition: MWAWCell.hxx:378
std::shared_ptr< MsWksDocumentInternal::State > m_state
the state
Definition: MsWksDocument.hxx:245
MWAWInputStreamPtr & getInput()
returns the actual input
Definition: MsWksDocument.hxx:113
MWAWParser * m_parser
the main parser
Definition: MsWksDocument.hxx:252
Internal: the structures of a MsWksDocument.
Definition: MsWksDocument.cxx:63
std::shared_ptr< MsWksGraph > getGraphParser()
returns the graph parser
Definition: MsWksDocument.hxx:123
The class which parses the main zones of a mac MS Works document v4.
Definition: MsWks4Zone.hxx:73
the main class to read the text part of Microsoft Works file
Definition: MsWks3Text.hxx:69
the main class to read a Microsoft Works graphic file
Definition: MsWksDRParser.hxx:59
NewPage m_newPage
the new page callback
Definition: MsWksDocument.hxx:271
the main class to read the graphic of a Microsoft Works file
Definition: MsWksGraph.hxx:73
the main class to read a Microsoft Works spreadsheet file
Definition: MsWksSSParser.hxx:65
std::shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:549
Kind
an enum to define the kind of document
Definition: MWAWDocument.hxx:80
bool getColor(int color, MWAWColor &col)
try to convert a file data to a color
Definition: FullWrtStruct.cxx:45
Internal: the subdocument of a MsWksDocument.
Definition: MsWksDocument.cxx:218
int m_textId
the text internal id
Definition: MsWksDocument.hxx:93
Defines MWAWCell (cell content and format)
virtual class which defines the ancestor of all main zone parser
Definition: MWAWParser.hxx:99
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: MWAWPosition.hxx:47
std::shared_ptr< MsWksGraph > m_graphParser
the graph document
Definition: MsWksDocument.hxx:261
basic class to store an entry in a file This contained :
Definition: MWAWEntry.hxx:46
Zone(ZoneType type=Z_NONE, int zoneId=-1)
the constructor
Definition: MsWksDocument.hxx:82
libmwaw::DebugFile & ascii()
a DebugFile used to write what we recognize when we parse the document
Definition: MsWksDocument.hxx:132
the main class to read/store generic data of a MsWorks document v1-v3
Definition: MsWksDocument.hxx:68
std::shared_ptr< MWAWParserState > m_parserState
the parser state
Definition: MsWksDocument.hxx:248

Generated on Sat Feb 8 2020 19:04:28 for libmwaw by doxygen 1.8.13