RagTime5Parser.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 RAG_TIME_5_PARSER
35 # define RAG_TIME_5_PARSER
36 
37 #include <map>
38 #include <string>
39 #include <set>
40 #include <vector>
41 
42 #include "MWAWDebug.hxx"
43 #include "MWAWInputStream.hxx"
44 
45 #include "MWAWParser.hxx"
46 
49 
50 namespace RagTime5ParserInternal
51 {
52 struct DocInfoFieldParser;
53 struct State;
54 class SubDocument;
55 }
56 
57 class RagTime5Graph;
60 class RagTime5Text;
61 class RagTime5Zone;
63 
70 {
71  friend class RagTime5Graph;
72  friend class RagTime5Spreadsheet;
73  friend class RagTime5Text;
74  friend class RagTime5ClusterManager;
77 
78 public:
82  virtual ~RagTime5Parser();
83 
85  bool checkHeader(MWAWHeader *header, bool strict=false);
86 
87  // the main parse function
88  void parse(librevenge::RVNGTextInterface *documentInterface);
89 
90 protected:
92  void init();
93 
94  //
95  // interface
96  //
97 
99  shared_ptr<RagTime5ClusterManager> getClusterManager();
101  shared_ptr<RagTime5StructManager> getStructManager();
102 
104  bool readChartCluster(RagTime5Zone &zone, int zoneType);
106  bool readGraphicCluster(RagTime5Zone &zone, int zoneType);
108  bool readPictureCluster(RagTime5Zone &zone, int zoneType);
110  bool readSpreadsheetCluster(RagTime5Zone &zone, int zoneType);
112  bool readTextCluster(RagTime5Zone &zone, int zoneType);
113 
115  void createDocument(librevenge::RVNGTextInterface *documentInterface);
117  bool sendZones();
118 
120  void newPage(int number);
121 
123  bool createZones();
125  bool findDataZones(MWAWEntry const &entry);
127  shared_ptr<RagTime5Zone> getDataZone(int dataId) const;
129  bool update(RagTime5Zone &zone);
131  bool readZoneData(RagTime5Zone &zone);
133  bool unpackZone(RagTime5Zone &zone, MWAWEntry const &entry, std::vector<unsigned char> &data);
135  bool unpackZone(RagTime5Zone &zone);
136 
138  bool readClusterZones();
140  bool readClusterZone(RagTime5Zone &zone, int type=-1);
143  RagTime5ClusterManager::Link const &link);
146  RagTime5ClusterManager::Link const &nameLink,
147  std::vector<int> &list, std::string const &name="");
148 
150  bool readString(RagTime5Zone &zone, std::string &string);
152  bool readUnicodeString(RagTime5Zone &zone);
154  bool readLongListWithSize(int dataId, int fSz, std::vector<long> &list, std::string const &zoneName="");
156  bool readPositions(int posId, std::vector<long> &listPosition);
158  bool readLongList(RagTime5ClusterManager::Link const &link, std::vector<long> &list);
160  bool readUnicodeStringList(RagTime5ClusterManager::Link const &link, std::map<int, librevenge::RVNGString> &idToStringMap);
161 
163  bool readDocumentVersion(RagTime5Zone &zone);
175  bool readDocInfoClusterData(RagTime5Zone &zone, MWAWEntry const &entry);
182 
186  bool readStructData(RagTime5Zone &zone, long endPos, int n, int headerSz,
187  RagTime5StructManager::FieldParser &parser, librevenge::RVNGString const &dataName);
189  bool readStructMainZone(RagTime5Zone &zone);
190 
192  bool readListZone(RagTime5ClusterManager::Link const &link);
196  bool readFixedSizeZone(RagTime5ClusterManager::Link const &link, std::string const &name);
199 
201  bool checkClusterList(std::vector<int> const &list);
203  void flushExtra();
204 
205 protected:
206 
207  //
208  // data
209  //
211  shared_ptr<RagTime5ParserInternal::State> m_state;
213  shared_ptr<RagTime5Graph> m_graphParser;
215  shared_ptr<RagTime5Spreadsheet> m_spreadsheetParser;
217  shared_ptr<RagTime5Text> m_textParser;
219  shared_ptr<RagTime5StructManager> m_structManager;
221  shared_ptr<RagTime5ClusterManager> m_clusterManager;
222 };
223 #endif
224 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
shared_ptr< RagTime5Text > m_textParser
the text manager
Definition: RagTime5Parser.hxx:217
a function used by MWAWDocument to store the version of document
Definition: MWAWHeader.hxx:56
shared_ptr< RagTime5Graph > m_graphParser
the graph manager
Definition: RagTime5Parser.hxx:213
bool readSpreadsheetCluster(RagTime5Zone &zone, int zoneType)
try to read a spreadsheet cluster (via the spreadsheet manager)
Definition: RagTime5Parser.cxx:335
Internal: the helper to read doc info parse.
Definition: RagTime5Parser.cxx:69
bool readUnknownClusterBData(RagTime5ClusterManager::Cluster &cluster)
try to read the unknown clusterB data
Definition: RagTime5Parser.cxx:1501
bool readChartCluster(RagTime5Zone &zone, int zoneType)
try to read a chart cluster (via the spreadsheet manager)
Definition: RagTime5Parser.cxx:320
bool readFormats(RagTime5ClusterManager::Cluster &cluster)
try to read the list of format
Definition: RagTime5Parser.cxx:1162
void parse(librevenge::RVNGTextInterface *documentInterface)
virtual function used to parse the input
Definition: RagTime5Parser.cxx:371
void init()
inits all internal variables
Definition: RagTime5Parser.cxx:294
bool readClusterPipelineData(RagTime5ClusterManager::Cluster &cluster)
try to read the pipeline cluster data
Definition: RagTime5Parser.cxx:1451
RagTime5Parser(MWAWInputStreamPtr input, MWAWRSRCParserPtr rsrcParser, MWAWHeader *header)
constructor
Definition: RagTime5Parser.cxx:284
bool readGraphicCluster(RagTime5Zone &zone, int zoneType)
try to read a graphic cluster (via the graphic manager)
Definition: RagTime5Parser.cxx:325
bool readListZone(RagTime5ClusterManager::Link const &link)
try to read a list zone
Definition: RagTime5Parser.cxx:1574
bool readUnknownClusterCData(RagTime5ClusterManager::Cluster &cluster)
try to read the unknown clusterC data
Definition: RagTime5Parser.cxx:1539
void createDocument(librevenge::RVNGTextInterface *documentInterface)
creates the listener which will be associated to the document
Definition: RagTime5Parser.cxx:400
bool update(RagTime5Zone &zone)
try to update a zone: create a new input if the zone is stored in different positions, ...
Definition: RagTime5Parser.cxx:1956
bool readClusterZones()
try to read the different cluster zones
Definition: RagTime5Parser.cxx:798
the cluster script ( 2/a/4002/400a zone)
Definition: RagTime5ClusterManager.hxx:305
the main class to read the graphic part of RagTime 56 file
Definition: RagTime5Graph.hxx:75
bool checkClusterList(std::vector< int > const &list)
check a cluster list
Definition: RagTime5Parser.cxx:985
bool readClusterFieldsData(RagTime5ClusterManager::Cluster &cluster)
try to read the field data
Definition: RagTime5Parser.cxx:1238
bool readStructZone(RagTime5ClusterManager::Cluster &cluster, RagTime5StructManager::FieldParser &parser, int headerSz)
try to read a structured zone
Definition: RagTime5Parser.cxx:1717
bool readDocumentVersion(RagTime5Zone &zone)
try to read the document version zone
Definition: RagTime5Parser.cxx:2155
shared_ptr< RagTime5ClusterManager > m_clusterManager
the cluster manager
Definition: RagTime5Parser.hxx:221
virtual class use to parse the field data
Definition: RagTime5StructManager.hxx:268
bool readStructData(RagTime5Zone &zone, long endPos, int n, int headerSz, RagTime5StructManager::FieldParser &parser, librevenge::RVNGString const &dataName)
try to read a data in a structured zone
Definition: RagTime5Parser.cxx:1867
bool readClusterLinkList(RagTime5Zone &zone, RagTime5ClusterManager::Link const &link)
try to read a cluster link zone
Definition: RagTime5Parser.cxx:1088
main zone in a RagTime v5-v6 document
Definition: RagTime5StructManager.hxx:48
the layout cluster ( 4001 zone)
Definition: RagTime5ClusterManager.hxx:252
the cluster for root
Definition: RagTime5ClusterManager.hxx:268
Internal: the structures of a RagTime5Parser.
Definition: RagTime5Parser.cxx:66
bool readUnicodeStringList(RagTime5ClusterManager::Link const &link, std::map< int, librevenge::RVNGString > &idToStringMap)
try to read a list of unicode string zone
Definition: RagTime5Parser.cxx:732
bool readStructMainZone(RagTime5Zone &zone)
try to read a main structured zone (unknown content)
Definition: RagTime5Parser.cxx:1813
bool unpackZone(RagTime5Zone &zone, MWAWEntry const &entry, std::vector< unsigned char > &data)
try to unpack a zone
Definition: RagTime5Parser.cxx:2012
Internal: the subdocument of a RagTime5Parser.
Definition: RagTime5Parser.cxx:232
the main class to read the spreadsheet part of RagTime 56 file
Definition: RagTime5Spreadsheet.hxx:73
bool readClusterRootData(RagTime5ClusterManager::ClusterRoot &cluster)
try to read the main cluster
Definition: RagTime5Parser.cxx:840
shared_ptr< MWAWRSRCParser > MWAWRSRCParserPtr
a smart pointer of MWAWRSRCParser
Definition: libmwaw_internal.hxx:449
virtual class use to parse the unstructured data
Definition: RagTime5StructManager.hxx:301
bool readPictureCluster(RagTime5Zone &zone, int zoneType)
try to read a picture cluster (via the graphic manager)
Definition: RagTime5Parser.cxx:330
shared_ptr< RagTime5Spreadsheet > m_spreadsheetParser
the spreadsheet manager
Definition: RagTime5Parser.hxx:215
bool readDocInfoClusterData(RagTime5Zone &zone, MWAWEntry const &entry)
try to read the main doc info cluster data
Definition: RagTime5Parser.cxx:1251
bool findDataZones(MWAWEntry const &entry)
try to create the main data zones list
Definition: RagTime5Parser.cxx:2207
basic class used to manage RagTime 5/6 zones
Definition: RagTime5ClusterManager.hxx:58
bool readClusterZone(RagTime5Zone &zone, int type=-1)
try to read a cluster zone
Definition: RagTime5Parser.cxx:1000
bool readTextCluster(RagTime5Zone &zone, int zoneType)
try to read a text cluster (via the text manager)
Definition: RagTime5Parser.cxx:340
void newPage(int number)
adds a new page
Definition: RagTime5Parser.cxx:355
virtual class which defines the ancestor of all text zone parser
Definition: MWAWParser.hxx:284
bool readFixedSizeZone(RagTime5ClusterManager::Link const &link, std::string const &name)
try to read a fixed size zone
Definition: RagTime5Parser.cxx:1648
the main class to read a RagTime v5 file
Definition: RagTime5Parser.hxx:69
the main class to read the text part of RagTime 56 file
Definition: RagTime5Text.hxx:73
shared_ptr< RagTime5Zone > getDataZone(int dataId) const
returns the zone corresponding to a data id (or 0)
Definition: RagTime5Parser.cxx:345
shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:439
bool readPositions(int posId, std::vector< long > &listPosition)
try to read a positions zone in data
Definition: RagTime5Parser.cxx:790
bool readUnicodeString(RagTime5Zone &zone)
try to read a unicode string zone
Definition: RagTime5Parser.cxx:709
bool readLongListWithSize(int dataId, int fSz, std::vector< long > &list, std::string const &zoneName="")
try to read a int/long zone data
Definition: RagTime5Parser.cxx:741
bool readZoneData(RagTime5Zone &zone)
try to read the zone data
Definition: RagTime5Parser.cxx:601
bool readClusterScriptData(RagTime5ClusterManager::ClusterScript &cluster)
try to read the unknown clusterA data
Definition: RagTime5Parser.cxx:1470
bool createZones()
finds the different objects zones
Definition: RagTime5Parser.cxx:432
bool readString(RagTime5Zone &zone, std::string &string)
try to read a string zone ( zone with id1=21,id2=23:24)
Definition: RagTime5Parser.cxx:679
shared_ptr< RagTime5StructManager > m_structManager
the structure manager
Definition: RagTime5Parser.hxx:219
basic class to store an entry in a file This contained :
Definition: MWAWEntry.hxx:46
basic class used to store RagTime 5/6 structures
Definition: RagTime5StructManager.hxx:158
shared_ptr< RagTime5StructManager > getStructManager()
returns the structure manager
Definition: RagTime5Parser.cxx:315
virtual ~RagTime5Parser()
destructor
Definition: RagTime5Parser.cxx:290
bool checkHeader(MWAWHeader *header, bool strict=false)
checks if the document header is correct (or not)
Definition: RagTime5Parser.cxx:2368
shared_ptr< RagTime5ClusterManager > getClusterManager()
returns the cluster manager
Definition: RagTime5Parser.cxx:310
void flushExtra()
flush unsent zone (debugging function)
Definition: RagTime5Parser.cxx:2439
bool sendZones()
try to send the different zones
bool readLongList(RagTime5ClusterManager::Link const &link, std::vector< long > &list)
try to read/get the list of long of a L_LongList
Definition: RagTime5Parser.cxx:781
shared_ptr< RagTime5ParserInternal::State > m_state
the state
Definition: RagTime5Parser.hxx:211
bool readClusterLayoutData(RagTime5ClusterManager::ClusterLayout &cluster)
try to read the layout cluster (type 4001)
Definition: RagTime5Parser.cxx:1404
the cluster data
Definition: RagTime5ClusterManager.hxx:209

Generated on Thu Jul 9 2015 20:26:37 for libmwaw by doxygen 1.8.8