[go: up one dir, main page]

Menu

[2117e7]: / src / lib / WPS4.h  Maximize  Restore  History

Download this file

160 lines (132 with data), 5.1 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
/* libwps
* Version: MPL 2.0 / LGPLv2.1+
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Major Contributor(s):
* Copyright (C) 2006, 2007 Andrew Ziem
* Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
* Copyright (C) 2003 Marc Maurer (uwog@uwog.net)
*
* For minor contributions see the git repository.
*
* Alternatively, the contents of this file may be used under the terms
* of the GNU Lesser General Public License Version 2.1 or later
* (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
* applicable instead of those above.
*/
#ifndef WPS4_H
#define WPS4_H
#include <vector>
#include <librevenge-stream/librevenge-stream.h>
#include "libwps_internal.h"
#include "libwps_tools_win.h"
#include "WPSParser.h"
class WPSPageSpan;
namespace WPS4ParserInternal
{
class SubDocument;
struct State;
}
class WPS4Graph;
class WPS4Text;
/**
* This class parses Works version 2 through 4.
*
*/
class WPS4Parser final : public WPSParser
{
friend class WPS4ParserInternal::SubDocument;
friend class WPS4Graph;
friend class WPS4Text;
public:
//! constructor
WPS4Parser(RVNGInputStreamPtr &input, WPSHeaderPtr &header,
libwps_tools_win::Font::Type encoding=libwps_tools_win::Font::UNKNOWN);
//! destructor
~WPS4Parser() final;
//! called by WPSDocument to parse the file
void parse(librevenge::RVNGTextInterface *documentInterface) final;
//! checks if the document header is correct (or not)
bool checkHeader(WPSHeader *header, bool strict=false);
protected:
//! color
bool getColor(int id, WPSColor &color) const;
//! sets the file size ( filled by WPS4Text )
void setSizeFile(long sz);
//! return true if the pos is in the file, update the file size if need
bool checkFilePosition(long pos);
//! adds a new page
void newPage(int number);
//! set the listener
void setListener(std::shared_ptr<WPSContentListener> const &listener);
/** tries to parse the main zone, ... */
bool createStructures();
/** tries to parse the different OLE zones ( except the main zone ) */
bool createOLEStructures();
/** creates the main listener */
std::shared_ptr<WPSContentListener> createListener(librevenge::RVNGTextInterface *interface);
// interface with text parser
//! returns the page height, ie. paper size less margin (in inches)
float pageHeight() const;
//! returns the page width, ie. paper size less margin (in inches)
float pageWidth() const;
//! returns the number of columns
int numColumns() const;
/** returns the default font type, ie. the encoding given by the constructor if given
or the encoding deduiced from the version.
*/
libwps_tools_win::Font::Type getDefaultFontType() const;
//! returns the document codepage ( given from the file OEM field )
libwps_tools_win::Font::Type getOEMFontType() const;
/** creates a document for a comment entry and then send the data
*
* \note actually all bookmarks (comments) are empty */
void createDocument(WPSEntry const &entry, libwps::SubDocumentType type);
//! find the default encoding if no encoding is given
void findDefaultEncoding();
/** creates a document for a footnote entry with label and then send the data*/
void createNote(WPSEntry const &entry, librevenge::RVNGString const &label);
//! creates a textbox and then send the data
void createTextBox(WPSEntry const &entry, WPSPosition const &pos, librevenge::RVNGPropertyList &extras);
//! sends text corresponding to the entry to the listener (via WPS4Text)
void send(WPSEntry const &entry, libwps::SubDocumentType type);
// interface with graph parser
/** tries to read a picture ( via its WPS4Graph )
*
* \note returns the object id or -1 if find nothing */
int readObject(RVNGInputStreamPtr input, WPSEntry const &entry);
/** sends an object with given id ( via its WPS4Graph )
*
* The object is sent as a character with given size \a position */
void sendObject(WPSPosition const &position, int id);
//
// low level
//
/** finds the different zones (text, print, ...) and updates nameMultiMap */
bool findZones();
/** parses an entry
*
* reads a zone offset and a zone size and checks if this entry is valid */
bool parseEntry(std::string const &name);
/** tries to read the document dimension */
bool readDocDim();
/// tries to read the printer information
bool readPrnt(WPSEntry const &entry);
/** reads the additional windows info
\note this zone contains many unknown data
*/
bool readDocWindowsInfo(WPSEntry const &entry);
std::shared_ptr<WPSContentListener> m_listener; /* the listener (if set)*/
//! the graph parser
std::shared_ptr<WPS4Graph> m_graphParser;
//! the text parser
std::shared_ptr<WPS4Text> m_textParser;
//! the internal state
std::shared_ptr<WPS4ParserInternal::State> m_state;
};
#endif /* WPS4_H */
/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */