MSWrite.h Source File documentation

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
37namespace MSWriteParserInternal
38{
39class SubDocument;
40
41 struct Paragraph : public WPSParagraph
42{
43 enum Location { MAIN, HEADER, FOOTER, FOOTNOTE };
44 Paragraph() : WPSParagraph(), m_fcFirst(0), m_fcLim(0),
45 m_Location(MAIN), m_graphics(false), m_firstpage(false),
46 m_skiptab(false), m_headerUseMargin(false), m_interLine(0.0),
47 m_HeaderFooterOccurrence(WPSPageSpan::ALL) { }
48 uint32_t m_fcFirst, m_fcLim;
49 Location m_Location;
50 bool m_graphics, m_firstpage, m_skiptab, m_headerUseMargin;
51 double m_interLine;
52 WPSPageSpan::HeaderFooterOccurrence m_HeaderFooterOccurrence;
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;
62 libwps_tools_win::Font::Type m_encoding;
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;
86 uint16_t m_startPageNumber;
87 double m_yaHeader;
88 double m_yaFooter;
89 bool m_endFtns;
90 unsigned m_columns;
91 double m_dxaColumns, m_dxaGutter;
92 WPSEntry m_Main;
93};
94
95}
96
101 class MSWriteParser : public WPSParser
102{
103 friend class MSWriteParserInternal::SubDocument;
104 friend struct MSWriteParserInternal::Paragraph;
105 friend struct MSWriteParserInternal::Font;
106
107public:
108 MSWriteParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header,
109 libwps_tools_win::Font::Type encoding=libwps_tools_win::Font::WIN3_WEUROPE);
110
111
112 ~MSWriteParser();
113 void parse(librevenge::RVNGTextInterface *documentInterface);
114
115private:
116 MSWriteParser(const MSWriteParser &);
117 MSWriteParser &operator=(const MSWriteParser &);
118
119 shared_ptr<WPSContentListener> createListener(librevenge::RVNGTextInterface *interface);
120protected:
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;
163 libwps_tools_win::Font::Type m_fontType;
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: */
WPSEntry.h
WPSFont.h
WPSPageSpan.h
WPSParagraph.h
WPSParser.h
MSWriteParserInternal::SubDocument
Internal: the subdocument of a MSWriteParser.
Definition MSWrite.cpp:42
MSWriteParser::m_fcMac
uint32_t m_fcMac
Definition MSWrite.h:156
MSWriteParser::insertControl
virtual void insertControl(uint8_t val, uint32_t fc)
Definition MSWrite.cpp:1073
MSWriteParser::m_fontType
libwps_tools_win::Font::Type m_fontType
Definition MSWrite.h:163
MSWriteParser::m_footnotes
std::vector< MSWriteParserInternal::Footnote > m_footnotes
Definition MSWrite.h:160
MSWriteParser::processDDB
bool processDDB(librevenge::RVNGBinaryData &bmpdata, WPSPosition &pos, unsigned width, unsigned height, unsigned byte_width, unsigned planes, unsigned bits_pixel, unsigned size)
Definition MSWrite.cpp:1266
MSWriteParser::numPages
int numPages()
MSWriteParser::m_fontList
std::vector< MSWriteParserInternal::Font > m_fontList
Definition MSWrite.h:159
MSWriteParser::readStructures
void readStructures()
Definition MSWrite.cpp:1660
MSWriteParser::MSWriteParser
MSWriteParser(const MSWriteParser &)
MSWriteParser::readText
void readText(WPSEntry e, MSWriteParserInternal::Paragraph::Location location)
Definition MSWrite.cpp:897
MSWriteParser::getFileEncoding
virtual libwps_tools_win::Font::Type getFileEncoding(libwps_tools_win::Font::Type hint)
Definition MSWrite.cpp:287
MSWriteParser::m_fonts
std::vector< librevenge::RVNGString > m_fonts
Definition MSWrite.h:162
MSWriteParser::processObject
void processObject(WPSPosition &pos, unsigned long lastPos)
Definition MSWrite.cpp:1157
MSWriteParser::processDIB
bool processDIB(librevenge::RVNGBinaryData &bmpdata, unsigned size)
Definition MSWrite.cpp:1451
MSWriteParser::readFOD
void readFOD(unsigned page, void(MSWriteParser::*parseFOD)(uint32_t fcFirst, uint32_t fcLim, unsigned size))
Definition MSWrite.cpp:524
MSWriteParser::MSWriteParser
MSWriteParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header, libwps_tools_win::Font::Type encoding=libwps_tools_win::Font::WIN3_WEUROPE)
Definition MSWrite.cpp:265
MSWriteParser::insertString
unsigned insertString(const unsigned char *str, unsigned size, libwps_tools_win::Font::Type type)
Definition MSWrite.cpp:1100
MSWriteParser::m_paragraphList
std::vector< MSWriteParserInternal::Paragraph > m_paragraphList
Definition MSWrite.h:158
MSWriteParser::insertSpecial
virtual void insertSpecial(uint8_t val, uint32_t fc, MSWriteParserInternal::Paragraph::Location location)
Definition MSWrite.cpp:1067
MSWriteParser::m_sections
std::vector< MSWriteParserInternal::Section > m_sections
Definition MSWrite.h:161
MSWriteParser::readFFNTB
virtual void readFFNTB()
Definition MSWrite.cpp:321
MSWriteParser::readFIB
void readFIB()
Definition MSWrite.cpp:295
MSWriteParser::getPageStyle
static void getPageStyle(MSWriteParserInternal::Section &sep, WPSPageSpan &pageSpan)
Definition MSWrite.cpp:477
MSWriteParser::insertNote
void insertNote(bool annotation, uint32_t fcPos, librevenge::RVNGString &label)
Definition MSWrite.cpp:1688
MSWriteParser::processEmbeddedOLE
void processEmbeddedOLE(WPSPosition &pos, unsigned long lastPos)
Definition MSWrite.cpp:1551
MSWriteParser::readString
bool readString(std::string &res, unsigned long lastPos)
Definition MSWrite.cpp:1116
MSWriteParser::startSection
void startSection(MSWriteParserInternal::Section &section)
Definition MSWrite.cpp:1725
MSWriteParser::m_listener
shared_ptr< WPSContentListener > m_listener
Definition MSWrite.h:165
MSWriteParser::m_metaData
librevenge::RVNGPropertyList m_metaData
Definition MSWrite.h:167
MSWriteParser::readCHP
virtual void readCHP(uint32_t fcFirst, uint32_t fcLim, unsigned cch)
Definition MSWrite.cpp:678
MSWriteParser::m_fileLength
uint32_t m_fileLength
the last file position
Definition MSWrite.h:155
MSWriteParser::operator=
MSWriteParser & operator=(const MSWriteParser &)
MSWriteParser::readPAP
virtual void readPAP(uint32_t fcFirst, uint32_t fcLim, unsigned cch)
Definition MSWrite.cpp:579
MSWriteParser::parse
void parse(librevenge::RVNGTextInterface *documentInterface)
Definition MSWrite.cpp:1735
MSWriteParser::getHeaderFooters
void getHeaderFooters(uint32_t first, MSWriteParserInternal::Section &sep, WPSPageSpan &pageSpan)
Definition MSWrite.cpp:734
MSWriteParser::processWMF
bool processWMF(librevenge::RVNGBinaryData &wmfdata, unsigned size)
Definition MSWrite.cpp:1631
MSWriteParser::readSED
virtual void readSED()
Definition MSWrite.cpp:419
MSWriteParser::~MSWriteParser
~MSWriteParser()
Definition MSWrite.cpp:283
MSWriteParser::readSUMD
virtual void readSUMD()
Definition MSWrite.cpp:1650
MSWriteParser::readFNTB
virtual void readFNTB()
Definition MSWrite.cpp:1655
MSWriteParser::createListener
shared_ptr< WPSContentListener > createListener(librevenge::RVNGTextInterface *interface)
Definition MSWrite.cpp:872
MSWriteParser::processStaticOLE
bool processStaticOLE(librevenge::RVNGBinaryData &, std::string &mimetype, WPSPosition &pos, unsigned long lastPos)
Definition MSWrite.cpp:1494
MSWriteParser::checkFilePosition
bool checkFilePosition(uint32_t pos) const
check if the file position is correct or not
Definition MSWrite.h:149
WPSEntry
basic class to store an entry in a file This contained :
Definition WPSEntry.h:39
WPSFont::WPSFont
WPSFont()
constructor
Definition WPSFont.h:40
WPSPageSpan
Definition WPSPageSpan.h:39
WPSPageSpan::HeaderFooterOccurrence
HeaderFooterOccurrence
Definition WPSPageSpan.h:44
WPSParser::WPSParser
WPSParser(RVNGInputStreamPtr &input, WPSHeaderPtr &header)
Definition WPSParser.cpp:30
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::WIN3_WEUROPE
@ WIN3_WEUROPE
Definition libwps_tools_win.h:52
libwps_internal.h
RVNGInputStreamPtr
shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
shared pointer to librevenge::RVNGInputStream
Definition libwps_internal.h:88
WPSHeaderPtr
shared_ptr< WPSHeader > WPSHeaderPtr
shared pointer to WPSHeader
Definition libwps_internal.h:110
libwps_tools_win.h
MSWriteParserInternal
Definition MSWrite.cpp:39
libwps_tools_win
some Windows© classes and tools
Definition libwps_tools_win.cpp:32
MSWriteParserInternal::Font
Definition MSWrite.h:56
MSWriteParserInternal::Font::m_annotation
bool m_annotation
Definition MSWrite.h:61
MSWriteParserInternal::Font::m_fcLim
uint32_t m_fcLim
Definition MSWrite.h:60
MSWriteParserInternal::Font::m_fcFirst
uint32_t m_fcFirst
Definition MSWrite.h:60
MSWriteParserInternal::Font::m_special
bool m_special
Definition MSWrite.h:61
MSWriteParserInternal::Font::m_encoding
libwps_tools_win::Font::Type m_encoding
Definition MSWrite.h:62
MSWriteParserInternal::Font::Font
Font()
Definition MSWrite.h:57
MSWriteParserInternal::Font::m_footnote
bool m_footnote
Definition MSWrite.h:61
MSWriteParserInternal::Footnote::Footnote
Footnote()
Definition MSWrite.h:67
MSWriteParserInternal::Footnote::m_fcFtn
uint32_t m_fcFtn
Definition MSWrite.h:68
MSWriteParserInternal::Footnote::m_fcRef
uint32_t m_fcRef
Definition MSWrite.h:68
MSWriteParserInternal::Paragraph
Definition MSWrite.h:42
MSWriteParserInternal::Paragraph::m_headerUseMargin
bool m_headerUseMargin
Definition MSWrite.h:50
MSWriteParserInternal::Paragraph::m_graphics
bool m_graphics
Definition MSWrite.h:50
MSWriteParserInternal::Paragraph::m_fcLim
uint32_t m_fcLim
Definition MSWrite.h:48
MSWriteParserInternal::Paragraph::m_skiptab
bool m_skiptab
Definition MSWrite.h:50
MSWriteParserInternal::Paragraph::m_HeaderFooterOccurrence
WPSPageSpan::HeaderFooterOccurrence m_HeaderFooterOccurrence
Definition MSWrite.h:52
MSWriteParserInternal::Paragraph::m_Location
Location m_Location
Definition MSWrite.h:49
MSWriteParserInternal::Paragraph::Paragraph
Paragraph()
Definition MSWrite.h:44
MSWriteParserInternal::Paragraph::m_firstpage
bool m_firstpage
Definition MSWrite.h:50
MSWriteParserInternal::Paragraph::Location
Location
Definition MSWrite.h:43
MSWriteParserInternal::Paragraph::FOOTNOTE
@ FOOTNOTE
Definition MSWrite.h:43
MSWriteParserInternal::Paragraph::FOOTER
@ FOOTER
Definition MSWrite.h:43
MSWriteParserInternal::Paragraph::HEADER
@ HEADER
Definition MSWrite.h:43
MSWriteParserInternal::Paragraph::MAIN
@ MAIN
Definition MSWrite.h:43
MSWriteParserInternal::Paragraph::m_fcFirst
uint32_t m_fcFirst
Definition MSWrite.h:48
MSWriteParserInternal::Paragraph::m_interLine
double m_interLine
Definition MSWrite.h:51
MSWriteParserInternal::Section
Definition MSWrite.h:72
MSWriteParserInternal::Section::m_xaLeft
double m_xaLeft
Definition MSWrite.h:84
MSWriteParserInternal::Section::m_dyaText
double m_dyaText
Definition MSWrite.h:83
MSWriteParserInternal::Section::m_columns
unsigned m_columns
Definition MSWrite.h:90
MSWriteParserInternal::Section::m_xaMac
double m_xaMac
Definition MSWrite.h:81
MSWriteParserInternal::Section::m_bkc
unsigned m_bkc
Definition MSWrite.h:80
MSWriteParserInternal::Section::m_startPageNumber
uint16_t m_startPageNumber
Definition MSWrite.h:86
MSWriteParserInternal::Section::m_yaHeader
double m_yaHeader
Definition MSWrite.h:87
MSWriteParserInternal::Section::m_yaMac
double m_yaMac
Definition MSWrite.h:81
MSWriteParserInternal::Section::m_dxaGutter
double m_dxaGutter
Definition MSWrite.h:91
MSWriteParserInternal::Section::Section
Section()
constructor
Definition MSWrite.h:74
MSWriteParserInternal::Section::m_dxaText
double m_dxaText
Definition MSWrite.h:85
MSWriteParserInternal::Section::m_yaFooter
double m_yaFooter
Definition MSWrite.h:88
MSWriteParserInternal::Section::m_yaTop
double m_yaTop
Definition MSWrite.h:82
MSWriteParserInternal::Section::m_endFtns
bool m_endFtns
Definition MSWrite.h:89
MSWriteParserInternal::Section::m_fcLim
uint32_t m_fcLim
Definition MSWrite.h:79
MSWriteParserInternal::Section::m_dxaColumns
double m_dxaColumns
Definition MSWrite.h:91
MSWriteParserInternal::Section::m_Main
WPSEntry m_Main
Definition MSWrite.h:92
WPSParagraph::WPSParagraph
WPSParagraph()
constructor
Definition WPSParagraph.h:61