MSWrite.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) 2015 Sean Young <sean@mess.org>
11  *
12  * For minor contributions see the git repository.
13  *
14  * Alternatively, the contents of this file may be used under the terms
15  * of the GNU Lesser General Public License Version 2.1 or later
16  * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
17  * applicable instead of those above.
18  *
19  * For further information visit http://libwps.sourceforge.net
20  */
21 
22 #ifndef MS_WRITE_H
23 #define MS_WRITE_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 
31 #include "WPSParser.h"
32 #include "WPSEntry.h"
33 #include "WPSFont.h"
34 #include "WPSPageSpan.h"
35 #include "WPSParagraph.h"
36 
37 namespace MSWriteParserInternal
38 {
39 class SubDocument;
40 
41 struct Paragraph : public WPSParagraph
42 {
45  m_Location(MAIN), m_graphics(false), m_firstpage(false),
46  m_skiptab(false), m_headerUseMargin(false), m_interLine(0.0),
48  uint32_t m_fcFirst, m_fcLim;
51  double m_interLine;
53 };
54 
55 struct Font : public WPSFont
56 {
57  Font() : WPSFont(), m_fcFirst(0), m_fcLim(0), m_special(false),
58  m_footnote(false), m_annotation(false),
59  m_encoding(libwps_tools_win::Font::UNKNOWN) { }
60  uint32_t m_fcFirst, m_fcLim;
61  bool m_special, m_footnote, m_annotation;
63 };
64 
65 struct Footnote
66 {
67  Footnote() : m_fcFtn(0), m_fcRef(0) { }
68  uint32_t m_fcFtn, m_fcRef;
69 };
70 
71 struct Section
72 {
74  Section() : m_fcLim(0), m_bkc(1), m_yaMac(11), m_xaMac(8.5),
75  m_yaTop(1), m_dyaText(9), m_xaLeft(1.25), m_dxaText(6),
76  m_startPageNumber(0xffff), m_yaHeader(0.75),
77  m_yaFooter(10.25) /* 11-0.75inch*/, m_endFtns(false),
78  m_columns(1), m_dxaColumns(0.5), m_dxaGutter(0.0), m_Main() { }
79  uint32_t m_fcLim;
80  unsigned m_bkc;
81  double m_yaMac, m_xaMac;
82  double m_yaTop;
83  double m_dyaText;
84  double m_xaLeft;
85  double m_dxaText;
87  double m_yaHeader;
88  double m_yaFooter;
89  bool m_endFtns;
90  unsigned m_columns;
91  double m_dxaColumns, m_dxaGutter;
93 };
94 
95 }
96 
101 class MSWriteParser : public WPSParser
102 {
106 
107 public:
110 
111 
112  ~MSWriteParser();
113  void parse(librevenge::RVNGTextInterface *documentInterface);
114 
115 private:
116  MSWriteParser(const MSWriteParser &);
117  MSWriteParser &operator=(const MSWriteParser &);
118 
119  shared_ptr<WPSContentListener> createListener(librevenge::RVNGTextInterface *interface);
120 protected:
121  void readStructures();
122  virtual libwps_tools_win::Font::Type getFileEncoding(libwps_tools_win::Font::Type hint);
123  void readFIB();
124  virtual void readFFNTB();
125  void readFOD(unsigned page, void (MSWriteParser::*parseFOD)(uint32_t fcFirst, uint32_t fcLim, unsigned size));
126  virtual void readPAP(uint32_t fcFirst, uint32_t fcLim, unsigned cch);
127  virtual void readCHP(uint32_t fcFirst, uint32_t fcLim, unsigned cch);
128  virtual void readSUMD();
129  virtual void readFNTB();
130  virtual void readSED();
131  void readText(WPSEntry e, MSWriteParserInternal::Paragraph::Location location);
132  int numPages();
133  void processObject(WPSPosition &pos, unsigned long lastPos);
134  bool processDDB(librevenge::RVNGBinaryData &bmpdata, WPSPosition &pos, unsigned width, unsigned height, unsigned byte_width, unsigned planes, unsigned bits_pixel, unsigned size);
135  bool processDIB(librevenge::RVNGBinaryData &bmpdata, unsigned size);
136  bool processWMF(librevenge::RVNGBinaryData &wmfdata, unsigned size);
137  void processEmbeddedOLE(WPSPosition &pos, unsigned long lastPos);
138  bool processStaticOLE(librevenge::RVNGBinaryData &, std::string &mimetype, WPSPosition &pos, unsigned long lastPos);
139  bool readString(std::string &res, unsigned long lastPos);
140  virtual void insertSpecial(uint8_t val, uint32_t fc, MSWriteParserInternal::Paragraph::Location location);
141  virtual void insertControl(uint8_t val, uint32_t fc);
142  void insertNote(bool annotation, uint32_t fcPos, librevenge::RVNGString &label);
143  unsigned insertString(const unsigned char *str, unsigned size, libwps_tools_win::Font::Type type);
144  static void getPageStyle(MSWriteParserInternal::Section &sep, WPSPageSpan &pageSpan);
145  void getHeaderFooters(uint32_t first, MSWriteParserInternal::Section &sep, WPSPageSpan &pageSpan);
146  void startSection(MSWriteParserInternal::Section &section);
147 
149  bool checkFilePosition(uint32_t pos) const
150  {
151  return pos<=m_fileLength;
152  }
153  // State
155  uint32_t m_fileLength;
156  uint32_t m_fcMac;
157 
158  std::vector<MSWriteParserInternal::Paragraph> m_paragraphList;
159  std::vector<MSWriteParserInternal::Font> m_fontList;
160  std::vector<MSWriteParserInternal::Footnote> m_footnotes;
161  std::vector<MSWriteParserInternal::Section> m_sections;
162  std::vector<librevenge::RVNGString> m_fonts;
164 
165  shared_ptr<WPSContentListener> m_listener; /* the listener (if set)*/
166 
167  librevenge::RVNGPropertyList m_metaData;
168 };
169 
170 #endif /* MS_WRITE_H */
171 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
bool m_special
Definition: MSWrite.h:61
std::vector< MSWriteParserInternal::Font > m_fontList
Definition: MSWrite.h:159
unsigned m_bkc
Definition: MSWrite.h:80
Definition: MSWrite.cpp:38
class to store the paragraph properties
Definition: WPSParagraph.h:54
double m_dxaText
Definition: MSWrite.h:85
Footnote()
Definition: MSWrite.h:67
double m_xaLeft
Definition: MSWrite.h:84
double m_dyaText
Definition: MSWrite.h:83
uint32_t m_fcLim
Definition: MSWrite.h:79
std::vector< MSWriteParserInternal::Paragraph > m_paragraphList
Definition: MSWrite.h:158
std::vector< librevenge::RVNGString > m_fonts
Definition: MSWrite.h:162
double m_yaMac
Definition: MSWrite.h:81
unsigned m_columns
Definition: MSWrite.h:90
define the font properties
Definition: WPSFont.h:36
uint16_t m_startPageNumber
Definition: MSWrite.h:86
bool m_skiptab
Definition: MSWrite.h:50
uint32_t m_fcLim
Definition: MSWrite.h:60
bool m_graphics
Definition: MSWrite.h:50
uint32_t m_fcFirst
Definition: MSWrite.h:48
libwps_tools_win::Font::Type m_encoding
Definition: MSWrite.h:62
double m_interLine
Definition: MSWrite.h:51
Definition: WPSParser.h:35
Type
enum Type
Definition: libwps_tools_win.h:46
double m_yaTop
Definition: MSWrite.h:82
Internal: the subdocument of a MSWriteParser.
Definition: MSWrite.cpp:41
WPSEntry m_Main
Definition: MSWrite.h:92
double m_yaHeader
Definition: MSWrite.h:87
shared_ptr< WPSContentListener > m_listener
Definition: MSWrite.h:165
uint32_t m_fcLim
Definition: MSWrite.h:48
shared_ptr< WPSHeader > WPSHeaderPtr
shared pointer to WPSHeader
Definition: libwps_internal.h:110
libwps_tools_win::Font::Type m_fontType
Definition: MSWrite.h:163
WPSPageSpan::HeaderFooterOccurrence m_HeaderFooterOccurrence
Definition: MSWrite.h:52
librevenge::RVNGPropertyList m_metaData
Definition: MSWrite.h:167
std::vector< MSWriteParserInternal::Footnote > m_footnotes
Definition: MSWrite.h:160
double m_yaFooter
Definition: MSWrite.h:88
bool m_firstpage
Definition: MSWrite.h:50
Definition: MSWrite.h:55
Font()
Definition: MSWrite.h:57
Paragraph()
Definition: MSWrite.h:44
uint32_t m_fcMac
Definition: MSWrite.h:156
HeaderFooterOccurrence
Definition: WPSPageSpan.h:44
This class parses Microsoft Write 3.0 and 3.1.
Definition: MSWrite.h:101
double m_dxaGutter
Definition: MSWrite.h:91
bool m_headerUseMargin
Definition: MSWrite.h:50
shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
shared pointer to librevenge::RVNGInputStream
Definition: libwps_internal.h:88
bool m_endFtns
Definition: MSWrite.h:89
uint32_t m_fcRef
Definition: MSWrite.h:68
some Windows© classes and tools
Definition: libwps_tools_win.cpp:31
bool checkFilePosition(uint32_t pos) const
check if the file position is correct or not
Definition: MSWrite.h:149
Definition: WPSPageSpan.h:38
Definition: MSWrite.h:71
Location m_Location
Definition: MSWrite.h:49
std::vector< MSWriteParserInternal::Section > m_sections
Definition: MSWrite.h:161
basic class to store an entry in a file This contained :
Definition: WPSEntry.h:38
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: WPSPosition.h:39
Location
Definition: MSWrite.h:43
Definition: libwps_tools_win.h:52
uint32_t m_fileLength
the last file position
Definition: MSWrite.h:155
Definition: MSWrite.h:41
Section()
constructor
Definition: MSWrite.h:74
Definition: MSWrite.h:65

Generated on Wed Oct 26 2016 16:54:37 for libwps by doxygen 1.8.12