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);
142  bool readClusterLinkList(RagTime5Zone &zone,
143  RagTime5ClusterManager::Link const &link);
145  bool readClusterLinkList(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);
165  bool readClusterRootData(RagTime5ClusterManager::ClusterRoot &cluster);
167  bool readFormats(RagTime5ClusterManager::Cluster &cluster);
169  bool readClusterFieldsData(RagTime5ClusterManager::Cluster &cluster);
171  bool readClusterLayoutData(RagTime5ClusterManager::ClusterLayout &cluster);
173  bool readClusterPipelineData(RagTime5ClusterManager::Cluster &cluster);
175  bool readDocInfoClusterData(RagTime5Zone &zone, MWAWEntry const &entry);
177  bool readClusterScriptData(RagTime5ClusterManager::ClusterScript &cluster);
179  bool readUnknownClusterBData(RagTime5ClusterManager::Cluster &cluster);
181  bool readUnknownClusterCData(RagTime5ClusterManager::Cluster &cluster);
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);
194  bool readListZone(RagTime5ClusterManager::Link const &link, RagTime5StructManager::DataParser &parser);
196  bool readFixedSizeZone(RagTime5ClusterManager::Link const &link, std::string const &name);
198  bool readFixedSizeZone(RagTime5ClusterManager::Link const &link, RagTime5StructManager::DataParser &parser);
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
void parse(MWAWListenerPtr &listener, libmwaw::SubDocumentType type)
the parser function
Definition: RagTime5Parser.cxx:258
Internal: the helper to read doc info parse.
Definition: RagTime5Parser.cxx:69
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
shared_ptr< RagTime5ClusterManager > m_clusterManager
the cluster manager
Definition: RagTime5Parser.hxx:221
virtual class use to parse the field data
Definition: RagTime5StructManager.hxx:268
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
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
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
shared_ptr< RagTime5Spreadsheet > m_spreadsheetParser
the spreadsheet manager
Definition: RagTime5Parser.hxx:215
basic class used to manage RagTime 5/6 zones
Definition: RagTime5ClusterManager.hxx:58
virtual class which defines the ancestor of all text zone parser
Definition: MWAWParser.hxx:284
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< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:439
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< RagTime5ParserInternal::State > m_state
the state
Definition: RagTime5Parser.hxx:211
the cluster data
Definition: RagTime5ClusterManager.hxx:209
bool readStructZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete)
try to read a structured zone with unknown content
Definition: ClarisWksStruct.cxx:129

Generated on Fri Jul 5 2019 12:39:33 for libmwaw by doxygen 1.8.11