RagTime5StructManager.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_STRUCT_MANAGER
35# define RAG_TIME_5_STRUCT_MANAGER
36
37#include <map>
38#include <ostream>
39#include <sstream>
40#include <string>
41#include <vector>
42
43#include "libmwaw_internal.hxx"
44#include "MWAWDebug.hxx"
45#include "MWAWEntry.hxx"
46
49{
50public:
53 m_level(-1), m_parentName(""), m_defPosition(0), m_entry(), m_name(""), m_hiLoEndian(true),
56 {
57 for (int i=0; i<3; ++i) m_ids[i]=m_idsFlag[i]=0;
58 for (int i=0; i<2; ++i) m_kinds[i]="";
59 for (int i=0; i<2; ++i) m_variableD[i]=0;
60 }
62 virtual ~RagTime5Zone();
64 std::string getZoneName() const;
66 std::string getKindLastPart(bool main=true) const
67 {
68 std::string res(m_kinds[main ? 0 : 1]);
69 std::string::size_type pos = res.find_last_of(':');
70 if (pos == std::string::npos) return res;
71 return res.substr(pos+1);
72 }
73
75 friend std::ostream &operator<<(std::ostream &o, RagTime5Zone const &z);
78 {
79 return m_input;
80 }
83 {
84 m_input = input;
85 m_defaultInput = false;
86 }
88 bool isMainInput() const
89 {
90 return m_defaultInput;
91 }
94 {
97 return *m_asciiFile;
98 }
100 void setAsciiFileName(std::string const &name)
101 {
102 m_asciiName = name;
103 }
105 void createAsciiFile();
107 void addErrorInDebugFile(std::string const &zoneName);
108
112 std::string m_parentName;
116 std::string m_kinds[2];
120 std::string m_name;
124 int m_ids[3];
126 int m_idsFlag[3];
128 std::vector<MWAWEntry> m_entriesList;
130 std::map<int,shared_ptr<RagTime5Zone> > m_childIdToZoneMap;
136 std::string m_extra;
137protected:
143 std::string m_asciiName;
149 shared_ptr<libmwaw::DebugFile> m_localAsciiFile;
150private:
153};
154
157{
158public:
159 struct Field;
164
168 bool readField(MWAWInputStreamPtr input, long endPos, libmwaw::DebugFile &ascFile,
169 Field &field, long fSz=0);
171 static bool readCompressedLong(MWAWInputStreamPtr &input, long endPos, long &val);
173 static bool readUnicodeString(MWAWInputStreamPtr input, long endPos, librevenge::RVNGString &string);
175 static bool readDataIdList(MWAWInputStreamPtr input, int n, std::vector<int> &listIds);
176
178 struct TabStop {
181 {
182 }
184 friend std::ostream &operator<<(std::ostream &o, TabStop const &tab)
185 {
186 o << tab.m_position;
187 switch (tab.m_type) {
188 case 1:
189 break;
190 case 2:
191 o << "R";
192 break;
193 case 3:
194 o << "C";
195 break;
196 case 4:
197 o << "D";
198 break;
199 case 5: // Kintou Waritsuke: sort of center
200 o << "K";
201 break;
202 default:
203 o << ":#type=" << tab.m_type;
204 break;
205 }
206 if (tab.m_leaderChar>0)
207 o << ":leader=" << char(tab.m_leaderChar);
208 return o;
209 }
215 uint16_t m_leaderChar;
216 };
218 struct Field {
222 };
223
227 {
228 for (int i=0; i<2; ++i) m_longValue[i]=0;
229 }
232 {
233 }
235 friend std::ostream &operator<<(std::ostream &o, Field const &field);
241 std::string m_name;
243 long m_longValue[2];
249 librevenge::RVNGString m_string;
251 std::vector<long> m_longList;
253 std::vector<double> m_doubleList;
257 std::vector<TabStop> m_tabList;
259 std::vector<Field> m_fieldList;
263 std::string m_extra;
264 };
266 struct ZoneLink {
269 {
270 m_subZoneId[0]=m_subZoneId[1]=0;
271 }
273 int getSubZoneId(int i) const
274 {
275 if (i<0 || i>=2) {
276 MWAW_DEBUG_MSG(("RagTime5StructManager::ZoneLink::getSubZoneId: called with bad value=%d\n", i));
277 return 0;
278 }
279 return (m_subZoneId[0]&0x3fffffff);
280 }
282 friend std::ostream &operator<<(std::ostream &o, ZoneLink const &link)
283 {
284 if (link.m_dataId) o << "data" << link.m_dataId << "A,";
285 if (link.m_subZoneId[0]) {
286 if (link.m_subZoneId[0]> 0&& (static_cast<unsigned long>(link.m_subZoneId[0])&0xc0000000)==0)
287 o << "data[subId]=" << link.m_subZoneId[0] << ",";
288 else
289 o << "data[subId]=" << (link.m_subZoneId[0]&0x3fffffff) << "[" << (link.m_subZoneId[0]>>30) << "],";
290 }
291 if (link.m_subZoneId[1]) o << "orig[subId]=" << link.m_subZoneId[1] << ",";
292 for (size_t i=0; i<link.m_valuesList.size(); ++i) {
293 if (!link.m_valuesList[i]) continue;
294 o << "f" << i << "=" << link.m_valuesList[i] << ",";
295 }
296 return o;
297 }
301 long m_subZoneId[2];
303 std::vector<long> m_valuesList;
305 std::string m_extra;
306 };
308 struct FieldParser {
310 explicit FieldParser(std::string const &zoneName) : m_regroupFields(false), m_name(zoneName) {}
312 virtual ~FieldParser();
314 virtual std::string getZoneName() const
315 {
316 return m_name;
317 }
319 virtual std::string getZoneName(int n) const
320 {
321 std::stringstream s;
322 s << m_name << "-" << n;
323 return s.str();
324 }
326 virtual bool parseHeaderField(Field &field, RagTime5Zone &/*zone*/, int /*n*/, libmwaw::DebugStream &f)
327 {
328 f << field;
329 return true;
330 }
332 virtual bool parseField(Field &field, RagTime5Zone &/*zone*/, int /*n*/, libmwaw::DebugStream &f)
333 {
334 f << field;
335 return true;
336 }
339 protected:
341 std::string m_name;
342 private:
345 };
347 struct DataParser {
349 explicit DataParser(std::string const &zoneName) : m_name(zoneName) {}
351 virtual ~DataParser();
353 virtual std::string getZoneName() const
354 {
355 return m_name;
356 }
358 virtual std::string getZoneName(int n) const
359 {
360 std::stringstream s;
361 s << m_name << "-" << n;
362 return s.str();
363 }
365 virtual bool parseData(MWAWInputStreamPtr &/*input*/, long /*endPos*/, RagTime5Zone &/*zone*/, int /*n*/, libmwaw::DebugStream &/*f*/)
366 {
367 return true;
368 }
369 protected:
371 std::string m_name;
372 private:
373 DataParser(DataParser const &orig);
375 };
376
380 explicit GObjPropFieldParser(std::string const &name) : FieldParser(name), m_clusterId(0)
381 {
382 }
384 virtual bool parseField(Field &field, RagTime5Zone &zone, int n, libmwaw::DebugStream &f);
385
388 };
389
390private:
393};
394
395#endif
396// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
basic class to store an entry in a file This contained :
Definition: MWAWEntry.hxx:47
basic class used to store RagTime 5/6 structures
Definition: RagTime5StructManager.hxx:157
RagTime5StructManager()
constructor
Definition: RagTime5StructManager.cxx:48
bool readTypeDefinitions(RagTime5Zone &zone)
try to read a list of type definition
Definition: RagTime5StructManager.cxx:82
RagTime5StructManager(RagTime5StructManager const &orig)
~RagTime5StructManager()
destructor
Definition: RagTime5StructManager.cxx:52
bool readField(MWAWInputStreamPtr input, long endPos, libmwaw::DebugFile &ascFile, Field &field, long fSz=0)
try to read a field
Definition: RagTime5StructManager.cxx:290
RagTime5StructManager operator=(RagTime5StructManager const &orig)
static bool readUnicodeString(MWAWInputStreamPtr input, long endPos, librevenge::RVNGString &string)
try to read a unicode string
Definition: RagTime5StructManager.cxx:240
static bool readCompressedLong(MWAWInputStreamPtr &input, long endPos, long &val)
try to read a compressed long
Definition: RagTime5StructManager.cxx:66
static bool readDataIdList(MWAWInputStreamPtr input, int n, std::vector< int > &listIds)
try to read n data id
Definition: RagTime5StructManager.cxx:269
main zone in a RagTime v5-v6 document
Definition: RagTime5StructManager.hxx:49
std::string m_extra
extra data
Definition: RagTime5StructManager.hxx:136
MWAWInputStreamPtr m_input
the main input
Definition: RagTime5StructManager.hxx:139
bool m_defaultInput
a flag used to know if the input is or not the default input
Definition: RagTime5StructManager.hxx:141
MWAWInputStreamPtr getInput()
returns the current input
Definition: RagTime5StructManager.hxx:77
friend std::ostream & operator<<(std::ostream &o, RagTime5Zone const &z)
operator<<
Definition: RagTime5StructManager.cxx:1697
std::string m_name
the zone name ( mainly used for debugging)
Definition: RagTime5StructManager.hxx:120
std::string m_parentName
the parent name
Definition: RagTime5StructManager.hxx:112
std::vector< MWAWEntry > m_entriesList
the list of original entries
Definition: RagTime5StructManager.hxx:128
std::string m_asciiName
the ascii file name ( used if we need to create a ascii file)
Definition: RagTime5StructManager.hxx:143
MWAWEntry m_entry
the zone entry
Definition: RagTime5StructManager.hxx:118
int m_level
the zone level
Definition: RagTime5StructManager.hxx:110
bool m_hiLoEndian
true if the endian is hilo
Definition: RagTime5StructManager.hxx:122
long m_defPosition
the position of the definition in the main zones
Definition: RagTime5StructManager.hxx:114
std::string getZoneName() const
returns the zone name
Definition: RagTime5StructManager.cxx:1660
virtual ~RagTime5Zone()
destructor
Definition: RagTime5StructManager.cxx:1642
shared_ptr< libmwaw::DebugFile > m_localAsciiFile
the local ascii file ( if we need to create a new input)
Definition: RagTime5StructManager.hxx:149
libmwaw::DebugFile & ascii()
returns the current ascii file
Definition: RagTime5StructManager.hxx:93
RagTime5Zone(RagTime5Zone const &orig)
RagTime5Zone & operator=(RagTime5Zone const &orig)
int m_idsFlag[3]
the zone flag
Definition: RagTime5StructManager.hxx:126
std::string getKindLastPart(bool main=true) const
returns the main type
Definition: RagTime5StructManager.hxx:66
int m_ids[3]
the zone id
Definition: RagTime5StructManager.hxx:124
bool isMainInput() const
returns true if the input correspond to the basic file
Definition: RagTime5StructManager.hxx:88
void setInput(MWAWInputStreamPtr input)
reset the current input
Definition: RagTime5StructManager.hxx:82
int m_variableD[2]
the content of the zone D if it exists
Definition: RagTime5StructManager.hxx:132
bool m_isParsed
a flag to know if the zone is parsed
Definition: RagTime5StructManager.hxx:134
libmwaw::DebugFile * m_mainAsciiFile
the main ascii file (used to print error)
Definition: RagTime5StructManager.hxx:147
libmwaw::DebugFile * m_asciiFile
the ascii file corresponding to an input
Definition: RagTime5StructManager.hxx:145
void addErrorInDebugFile(std::string const &zoneName)
mark a zone as bad
Definition: RagTime5StructManager.cxx:1680
void createAsciiFile()
creates the ascii file
Definition: RagTime5StructManager.cxx:1646
std::map< int, shared_ptr< RagTime5Zone > > m_childIdToZoneMap
the child zones
Definition: RagTime5StructManager.hxx:130
void setAsciiFileName(std::string const &name)
defines the ascii name
Definition: RagTime5StructManager.hxx:100
RagTime5Zone(MWAWInputStreamPtr input, libmwaw::DebugFile &asc)
constructor
Definition: RagTime5StructManager.hxx:52
std::string m_kinds[2]
the zone types: normal and packing
Definition: RagTime5StructManager.hxx:116
an interface used to insert comment in a binary file, written in ascii form (if debug_with_files is n...
Definition: MWAWDebug.hxx:66
shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:503
#define MWAW_DEBUG_MSG(M)
Definition: libmwaw_internal.hxx:127
std::stringstream DebugStream
a basic stream (if debug_with_files is not defined, does nothing)
Definition: MWAWDebug.hxx:61
the class to store a color
Definition: libmwaw_internal.hxx:182
virtual class use to parse the unstructured data
Definition: RagTime5StructManager.hxx:347
DataParser(DataParser const &orig)
virtual std::string getZoneName(int n) const
return the debug name corresponding to a field
Definition: RagTime5StructManager.hxx:358
DataParser(std::string const &zoneName)
constructor
Definition: RagTime5StructManager.hxx:349
virtual ~DataParser()
destructor
Definition: RagTime5StructManager.cxx:56
DataParser & operator=(DataParser const &orig)
virtual bool parseData(MWAWInputStreamPtr &, long, RagTime5Zone &, int, libmwaw::DebugStream &)
parse a data
Definition: RagTime5StructManager.hxx:365
virtual std::string getZoneName() const
return the debug name corresponding to a zone
Definition: RagTime5StructManager.hxx:353
std::string m_name
the field name
Definition: RagTime5StructManager.hxx:371
virtual class use to parse the field data
Definition: RagTime5StructManager.hxx:308
virtual bool parseHeaderField(Field &field, RagTime5Zone &, int, libmwaw::DebugStream &f)
parse a header field
Definition: RagTime5StructManager.hxx:326
virtual bool parseField(Field &field, RagTime5Zone &, int, libmwaw::DebugStream &f)
parse a field
Definition: RagTime5StructManager.hxx:332
std::string m_name
the field name
Definition: RagTime5StructManager.hxx:341
FieldParser(FieldParser const &orig)
bool m_regroupFields
a flag use to decide if we output one debug message by field or not
Definition: RagTime5StructManager.hxx:338
FieldParser(std::string const &zoneName)
constructor
Definition: RagTime5StructManager.hxx:310
FieldParser & operator=(FieldParser const &orig)
virtual ~FieldParser()
destructor
Definition: RagTime5StructManager.cxx:60
virtual std::string getZoneName() const
return the debug name corresponding to a zone
Definition: RagTime5StructManager.hxx:314
virtual std::string getZoneName(int n) const
return the debug name corresponding to a field
Definition: RagTime5StructManager.hxx:319
a field of RagTime 5/6 structures
Definition: RagTime5StructManager.hxx:218
long m_longValue[2]
the long value
Definition: RagTime5StructManager.hxx:243
Field()
constructor
Definition: RagTime5StructManager.hxx:225
std::vector< Field > m_fieldList
the list of field
Definition: RagTime5StructManager.hxx:259
std::string m_extra
extra data
Definition: RagTime5StructManager.hxx:263
std::vector< long > m_longList
the list of long value
Definition: RagTime5StructManager.hxx:251
Type
the different type
Definition: RagTime5StructManager.hxx:220
@ T_LongList
Definition: RagTime5StructManager.hxx:220
@ T_FieldList
Definition: RagTime5StructManager.hxx:220
@ T_String
Definition: RagTime5StructManager.hxx:221
@ T_2Long
Definition: RagTime5StructManager.hxx:220
@ T_Unknown
Definition: RagTime5StructManager.hxx:220
@ T_CondColor
Definition: RagTime5StructManager.hxx:221
@ T_DoubleList
Definition: RagTime5StructManager.hxx:220
@ T_LongDouble
Definition: RagTime5StructManager.hxx:221
@ T_Code
Definition: RagTime5StructManager.hxx:221
@ T_Unicode
Definition: RagTime5StructManager.hxx:221
@ T_Bool
Definition: RagTime5StructManager.hxx:220
@ T_Unstructured
Definition: RagTime5StructManager.hxx:221
@ T_Double
Definition: RagTime5StructManager.hxx:220
@ T_Long
Definition: RagTime5StructManager.hxx:220
@ T_PrintInfo
Definition: RagTime5StructManager.hxx:221
@ T_ZoneId
Definition: RagTime5StructManager.hxx:221
@ T_TabList
Definition: RagTime5StructManager.hxx:220
@ T_Color
Definition: RagTime5StructManager.hxx:221
double m_doubleValue
the double value
Definition: RagTime5StructManager.hxx:245
friend std::ostream & operator<<(std::ostream &o, Field const &field)
operator<<
Definition: RagTime5StructManager.cxx:1390
Type m_type
the field type
Definition: RagTime5StructManager.hxx:237
~Field()
destructor
Definition: RagTime5StructManager.hxx:231
std::string m_name
the field type name
Definition: RagTime5StructManager.hxx:241
MWAWEntry m_entry
entry to defined the position of a String or Unstructured data
Definition: RagTime5StructManager.hxx:261
int m_numLongByData
the number of long by data (in m_longList)
Definition: RagTime5StructManager.hxx:255
long m_fileType
the file type
Definition: RagTime5StructManager.hxx:239
MWAWColor m_color
the color
Definition: RagTime5StructManager.hxx:247
std::vector< TabStop > m_tabList
the list of tabStop
Definition: RagTime5StructManager.hxx:257
librevenge::RVNGString m_string
small string use to store a string or a 4 char code
Definition: RagTime5StructManager.hxx:249
std::vector< double > m_doubleList
the list of double value
Definition: RagTime5StructManager.hxx:253
basic parser to read image/main graphic position properties
Definition: RagTime5StructManager.hxx:378
virtual bool parseField(Field &field, RagTime5Zone &zone, int n, libmwaw::DebugStream &f)
parse a field
Definition: RagTime5StructManager.cxx:1506
int m_clusterId
the id of the zone corresponding to this property (always a clust graph ?)
Definition: RagTime5StructManager.hxx:387
GObjPropFieldParser(std::string const &name)
constructor
Definition: RagTime5StructManager.hxx:380
a tabulation in RagTime 5/6 structures
Definition: RagTime5StructManager.hxx:178
friend std::ostream & operator<<(std::ostream &o, TabStop const &tab)
operator<<
Definition: RagTime5StructManager.hxx:184
TabStop()
constructor
Definition: RagTime5StructManager.hxx:180
int m_type
the type
Definition: RagTime5StructManager.hxx:213
uint16_t m_leaderChar
the unicode leader char
Definition: RagTime5StructManager.hxx:215
float m_position
the position
Definition: RagTime5StructManager.hxx:211

Generated on Wed Jan 19 2022 22:23:17 for libmwaw by doxygen 1.9.3