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 
48 namespace MsWksDocumentInternal
49 {
50 struct State;
51 
52 class SubDocument;
53 }
54 
55 class MsWksParser;
56 class MsWksDBParser;
57 class MsWksDRParser;
58 class MsWksSSParser;
59 class MsWks4Zone;
60 
61 class MsWksGraph;
62 class MsWks3Text;
63 class MsWks4Text;
64 
68 {
70  friend class MsWksParser;
71  friend class MsWks4Zone;
72  friend class MsWksDBParser;
73  friend class MsWksDRParser;
74  friend class MsWksSSParser;
75 public:
79  struct Zone {
81  Zone(ZoneType type=Z_NONE, int zoneId=-1) : m_type(type), m_zoneId(zoneId), m_textId(-1) {}
85  int m_zoneId;
87  int m_textId;
88  };
89 
90 public:
91 
95  virtual ~MsWksDocument();
96 
98  int version() const;
100  void setVersion(int vers);
102  MWAWDocument::Kind getKind() const;
104  void setKind(MWAWDocument::Kind kind);
105 
108  {
109  return m_input;
110  }
113  {
114  return *m_parser;
115  }
117  shared_ptr<MsWksGraph> getGraphParser()
118  {
119  return m_graphParser;
120  }
122  shared_ptr<MsWks3Text> getTextParser3();
124  shared_ptr<MsWks4Text> getTextParser4();
127  {
128  return m_asciiFile;
129  }
130 
131  //
132  // read some v3 structure
133  //
134 
136  bool checkHeader3(MWAWHeader *header, bool strict=false);
138  long getLengthOfFileHeader3() const;
140  bool readPrintInfo();
142  bool readDocumentInfo(long sz=-1);
144  bool readZone(Zone &zone);
146  bool readGroupHeaderFooter(bool header, int check);
147 
148  //
149  // read some ole structures
150  //
151 
155  std::vector<std::string> const &getUnparsedOLEZones() const;
156  //
157  // utilities functions
158  //
159 
161  bool hasHeader() const;
163  bool hasFooter() const;
165  float getHeaderFooterHeight(bool header) const;
167  void getPageSpanList(std::vector<MWAWPageSpan> &pagesList, int &numPages);
169  static bool getColor(int id, MWAWColor &col, int vers);
171  static std::vector<MWAWColor> const &getPalette(int vers);
172 
174  std::multimap<int, Zone> &getTypeZoneMap();
176  Zone getZone(ZoneType type) const;
178  int getNewZoneId() const;
180  std::multimap<std::string, MWAWEntry> &getEntryMap();
181 
182  // general interface
183 
185  void sendZone(int zoneType);
186 
187  // interface with the text parser
188 
190  void newPage(int page, bool softBreak=false);
192  void sendFootnoteContent(int noteId);
194  void sendFootnote(int id);
196  void sendText(int id);
197 
198  // interface with the graph parser
199 
201  void sendOLE(int id, MWAWPosition const &pos, MWAWGraphicStyle const &style);
203  void sendRBIL(int id, MWAWVec2i const &sz);
205  void sendTextbox(MWAWEntry const &entry, std::string const &frame);
206 
207 protected:
208  //
209  // spreadsheet/database function
210  //
211 
215  bool readDBString(long endPos, std::string &res);
217  bool readDBNumber(long endPos, double &res, bool &isNan, std::string &str);
218  /* reads a formula */
219  bool readFormula(long endPos, MWAWCellContent &content, std::string &extra);
220 
221 protected:
222 
223  //
224  // low level
225  //
227  void initAsciiFile(std::string const &name);
228 
229 private:
230  MsWksDocument(MsWksDocument const &orig);
231  MsWksDocument &operator=(MsWksDocument const &orig);
232 
233  //
234  // data
235  //
236 
237 protected:
239  shared_ptr<MsWksDocumentInternal::State> m_state;
240 public:
242  shared_ptr<MWAWParserState> m_parserState;
243 
244 protected:
253 
255  shared_ptr<MsWksGraph> m_graphParser;
257  shared_ptr<MsWks3Text> m_textParser3;
259  shared_ptr<MsWks4Text> m_textParser4;
260 
262  typedef void (MWAWParser::* NewPage)(int page, bool softBreak);
263 
266 };
267 #endif
268 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:

Generated on Tue Mar 1 2016 23:42:50 for libmwaw by doxygen 1.8.4