WPSOLEParser.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) 2009, 2011 Alonso Laurent (alonso@loria.fr)
11  * Copyright (C) 2006, 2007 Andrew Ziem
12  * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
13  * Copyright (C) 2004 Marc Maurer (uwog@uwog.net)
14  * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
15  *
16  * For minor contributions see the git repository.
17  *
18  * Alternatively, the contents of this file may be used under the terms
19  * of the GNU Lesser General Public License Version 2.1 or later
20  * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
21  * applicable instead of those above.
22  *
23  * For further information visit http://libwps.sourceforge.net
24  */
25 
26 /*
27  * freely inspired from istorage :
28  * ------------------------------------------------------------
29  * Generic OLE Zones furnished with a copy of the file header
30  *
31  * Compound Storage (32 bit version)
32  * Storage implementation
33  *
34  * This file contains the compound file implementation
35  * of the storage interface.
36  *
37  * Copyright 1999 Francis Beaudet
38  * Copyright 1999 Sylvain St-Germain
39  * Copyright 1999 Thuy Nguyen
40  * Copyright 2005 Mike McCormack
41  *
42  * This library is free software; you can redistribute it and/or
43  * modify it under the terms of the GNU Lesser General Public
44  * License as published by the Free Software Foundation; either
45  * version 2.1 of the License, or (at your option) any later version.
46  *
47  * This library is distributed in the hope that it will be useful,
48  * but WITHOUT ANY WARRANTY; without even the implied warranty of
49  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
50  * Lesser General Public License for more details.
51  *
52  * ------------------------------------------------------------
53  */
54 
55 #ifndef WPS_OLE_PARSER_H
56 #define WPS_OLE_PARSER_H
57 
58 #include <functional>
59 #include <string>
60 #include <map>
61 #include <vector>
62 
63 #include <librevenge-stream/librevenge-stream.h>
64 
65 #include "libwps_internal.h"
66 #include "libwps_tools_win.h"
67 
68 #include "WPSDebug.h"
69 #include "WPSPosition.h"
70 
71 namespace libwps
72 {
73 class Storage;
74 }
75 
76 namespace WPSOLEParserInternal
77 {
78 class CompObj;
79 struct State;
80 }
81 
86 {
87 public:
90  WPSOLEParser(const std::string &mainName,
92  std::function<int(std::string const &)> const &dirToIdFunc=getIdFromDirectory);
93 
95  ~WPSOLEParser();
96 
99  bool parse(RVNGInputStreamPtr fileInput);
101  void updateMetaData(librevenge::RVNGPropertyList &metaData) const;
102 
104  std::vector<std::string> const &getNotParse() const;
106  std::map<int,WPSEmbeddedObject> const &getObjectsMap() const;
107 
108 protected:
110  bool readSummaryInformation(RVNGInputStreamPtr input, std::string const &oleName,
111  librevenge::RVNGPropertyList &pList,
112  libwps::DebugFile &ascii) const;
114  bool readSummaryProperty(RVNGInputStreamPtr input, long endPos, int type,
115  libwps::DebugFile &ascii, libwps::DebugStream &f) const;
117  bool readSummaryPropertyString(RVNGInputStreamPtr input, long endPos, int type, librevenge::RVNGString &string,
118  libwps::DebugStream &f) const;
120  bool readSummaryPropertyLong(RVNGInputStreamPtr input, long endPos, int type, long &value,
121  libwps::DebugStream &f) const;
122 
124  static bool readOle(RVNGInputStreamPtr &ip, std::string const &oleName,
125  libwps::DebugFile &ascii);
127  static bool readMM(RVNGInputStreamPtr &input, std::string const &oleName,
128  libwps::DebugFile &ascii);
130  static bool readObjInfo(RVNGInputStreamPtr &input, std::string const &oleName,
131  libwps::DebugFile &ascii);
133  bool readCompObj(RVNGInputStreamPtr &ip, std::string const &oleName,
134  libwps::DebugFile &ascii);
135 
137  static bool isOlePres(RVNGInputStreamPtr &ip, std::string const &oleName);
139  static bool readOlePres(RVNGInputStreamPtr &ip, WPSEmbeddedObject &obj, libwps::DebugFile &ascii);
140 
142  static bool isOle10Native(RVNGInputStreamPtr &ip, std::string const &oleName);
145 
149  static bool readContents(RVNGInputStreamPtr &input, std::string const &oleName,
150  WPSEmbeddedObject &obj, libwps::DebugFile &ascii);
151 
157  static bool readCONTENTS(RVNGInputStreamPtr &input, std::string const &oleName,
158  WPSEmbeddedObject &obj, libwps::DebugFile &ascii);
159 
161  static bool readMN0AndCheckWKS(RVNGInputStreamPtr &input, std::string const &oleName,
162  WPSEmbeddedObject &obj, libwps::DebugFile &ascii);
163 
166  static int getIdFromDirectory(std::string const &dirName);
167 
169  std::string m_avoidOLE;
171  std::shared_ptr<WPSOLEParserInternal::State> m_state;
172 };
173 
174 #endif
175 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
Definition: libwps_internal.cpp:38
bool readSummaryInformation(RVNGInputStreamPtr input, std::string const &oleName, librevenge::RVNGPropertyList &pList, libwps::DebugFile &ascii) const
the summary information and the doc summary information
Definition: WPSOLEParser.cpp:1160
Definition: WPSDebug.h:207
Definition: WPSOLEParser.cpp:85
bool readSummaryPropertyString(RVNGInputStreamPtr input, long endPos, int type, librevenge::RVNGString &string, libwps::DebugStream &f) const
try to read a summary property: type 1e
Definition: WPSOLEParser.cpp:1306
static int getIdFromDirectory(std::string const &dirName)
the default function which uses the last integer of dirName to return the final id, ie.
Definition: WPSOLEParser.cpp:295
static bool readOlePres(RVNGInputStreamPtr &ip, WPSEmbeddedObject &obj, libwps::DebugFile &ascii)
extracts the picture of OlePres001 if it is possible
Definition: WPSOLEParser.cpp:720
Type
enum Type
Definition: libwps_tools_win.h:46
bool readSummaryPropertyLong(RVNGInputStreamPtr input, long endPos, int type, long &value, libwps::DebugStream &f) const
try to read a summary property: type 2,3,9,12,
Definition: WPSOLEParser.cpp:1338
Definition: WPSDebug.h:191
bool readCompObj(RVNGInputStreamPtr &ip, std::string const &oleName, libwps::DebugFile &ascii)
the "CompObj" contains : UserType,ClipName,ProgIdName
Definition: WPSOLEParser.cpp:545
std::shared_ptr< WPSOLEParserInternal::State > m_state
the main state
Definition: WPSOLEParser.h:171
bool readSummaryProperty(RVNGInputStreamPtr input, long endPos, int type, libwps::DebugFile &ascii, libwps::DebugStream &f) const
try to read a summary property
Definition: WPSOLEParser.cpp:1364
static bool isOlePres(RVNGInputStreamPtr &ip, std::string const &oleName)
the OlePres001 seems to contain standart picture file and size
Definition: WPSOLEParser.cpp:675
a class used to parse some basic oles Tries to read the different ole parts and stores their contents...
Definition: WPSOLEParser.h:85
std::map< int, WPSEmbeddedObject > const & getObjectsMap() const
returns the list of data positions which have been read
Definition: WPSOLEParser.cpp:281
static bool readObjInfo(RVNGInputStreamPtr &input, std::string const &oleName, libwps::DebugFile &ascii)
the "ObjInfo" small structure : seems to contain 3 ints=0,3,4
Definition: WPSOLEParser.cpp:468
std::vector< std::string > const & getNotParse() const
returns the list of unknown ole
Definition: WPSOLEParser.cpp:276
WPSOLEParser(const std::string &mainName, libwps_tools_win::Font::Type fontType, std::function< int(std::string const &)> const &dirToIdFunc=getIdFromDirectory)
constructor
Definition: WPSOLEParser.cpp:264
static bool readContents(RVNGInputStreamPtr &input, std::string const &oleName, WPSEmbeddedObject &obj, libwps::DebugFile &ascii)
the Contents : in general a picture : a PNG, an JPEG, a basic metafile, I find also a Word art pictur...
Definition: WPSOLEParser.cpp:893
static bool readCONTENTS(RVNGInputStreamPtr &input, std::string const &oleName, WPSEmbeddedObject &obj, libwps::DebugFile &ascii)
the CONTENTS : seems to store a header size, the header and then a object in EMF (with the same heade...
Definition: WPSOLEParser.cpp:1015
~WPSOLEParser()
destructor
Definition: WPSOLEParser.cpp:271
static bool readOle10Native(RVNGInputStreamPtr &ip, WPSEmbeddedObject &obj, libwps::DebugFile &ascii)
extracts the picture if it is possible
Definition: WPSOLEParser.cpp:849
void updateMetaData(librevenge::RVNGPropertyList &metaData) const
update the meta data, using information find in SummaryInformation
Definition: WPSOLEParser.cpp:285
std::shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
shared pointer to librevenge::RVNGInputStream
Definition: libwps_internal.h:87
bool parse(RVNGInputStreamPtr fileInput)
tries to parse basic OLE (excepted mainName)
Definition: WPSOLEParser.cpp:318
static bool readOle(RVNGInputStreamPtr &ip, std::string const &oleName, libwps::DebugFile &ascii)
the "Ole" small structure : unknown contain
Definition: WPSOLEParser.cpp:433
static bool isOle10Native(RVNGInputStreamPtr &ip, std::string const &oleName)
theOle10Native : basic Windows&#39; picture, with no size
Definition: WPSOLEParser.cpp:833
static bool readMN0AndCheckWKS(RVNGInputStreamPtr &input, std::string const &oleName, WPSEmbeddedObject &obj, libwps::DebugFile &ascii)
the "MN0" small structure : can contains a WKS file...
Definition: WPSOLEParser.cpp:1132
small class use to define a embedded object
Definition: libwps_internal.h:1076
std::string m_avoidOLE
if filled, does not parse content with this name
Definition: WPSOLEParser.h:169
static bool readMM(RVNGInputStreamPtr &input, std::string const &oleName, libwps::DebugFile &ascii)
the "MM" small structure : seems to contain the file versions
Definition: WPSOLEParser.cpp:489

Generated on Fri May 27 2022 03:07:00 for libwps by doxygen 1.8.14