HanMacWrdKParser.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 /*
35  * Parser to convert HanMac Word-K document
36  */
37 #ifndef HAN_MAC_WRD_K_PARSER
38 # define HAN_MAC_WRD_K_PARSER
39 
40 #include <iostream>
41 #include <string>
42 #include <vector>
43 
44 #include <librevenge/librevenge.h>
45 
46 #include "MWAWDebug.hxx"
47 #include "MWAWInputStream.hxx"
48 
49 #include "MWAWParser.hxx"
50 
52 {
53 struct State;
54 class SubDocument;
55 }
56 
62  HanMacWrdKZone(shared_ptr<libmwaw::DebugFile> asciiFile);
65 
67  long begin() const
68  {
69  return m_asciiFilePtr ? 0 : m_filePos;
70  }
72  long end() const
73  {
74  return m_asciiFilePtr ? (long) m_data.size() : m_endFilePos;
75  }
77  long length() const
78  {
79  if (m_asciiFilePtr) return (long) m_data.size();
80  return m_endFilePos-m_filePos;
81  }
83  bool valid() const
84  {
85  return length() > 0;
86  }
87 
88  // function to define the zone in the original file
89 
91  long fileBeginPos() const
92  {
93  return m_filePos;
94  }
96  long fileEndPos() const
97  {
98  return m_endFilePos;
99  }
101  void setFileBeginPos(long begPos)
102  {
103  m_filePos = m_endFilePos = begPos;
104  }
106  void setFileLength(long len)
107  {
108  m_endFilePos = m_filePos+len;
109  }
111  void setFilePositions(long begPos, long endPos)
112  {
113  m_filePos = begPos;
114  m_endFilePos = endPos;
115  }
117  librevenge::RVNGBinaryData &getBinaryData()
118  {
119  return m_data;
120  }
122  std::string name() const
123  {
124  return name(m_type);
125  }
127  static std::string name(int type);
128 
130  friend std::ostream &operator<<(std::ostream &o, HanMacWrdKZone const &zone);
131 
134  {
135  return *m_asciiFile;
136  }
137 
139  int m_type;
140 
142  long m_id;
143 
145  long m_subId;
146 
149 
151  std::string m_extra;
152 
154  mutable bool m_parsed;
155 
156 protected:
158  long m_filePos;
159 
162 
164  librevenge::RVNGBinaryData m_data;
165 
168 
170  shared_ptr<libmwaw::DebugFile> m_asciiFilePtr;
171 
172 private:
173  HanMacWrdKZone(HanMacWrdKZone const &orig);
175 };
176 
177 class HanMacWrdKGraph;
178 class HanMacWrdKText;
179 
186 {
187  friend class HanMacWrdKGraph;
188  friend class HanMacWrdKText;
190 
191 public:
195  virtual ~HanMacWrdKParser();
196 
198  bool checkHeader(MWAWHeader *header, bool strict=false);
199 
200  // the main parse function
201  void parse(librevenge::RVNGTextInterface *documentInterface);
202 
203 protected:
205  void init();
206 
208  void createDocument(librevenge::RVNGTextInterface *documentInterface);
209 
211  bool createZones();
212 
214  MWAWVec2f getPageLeftTop() const;
215 
217  void newPage(int number);
218 
219  // interface with the text parser
220 
222  bool sendText(long id, long subId, MWAWListenerPtr listener=MWAWListenerPtr());
223 
225  bool canSendTextAsGraphic(long id, long subId);
226 
227  // interface with the graph parser
228 
230  bool sendZone(long zId);
232  bool getColor(int colId, int patternId, MWAWColor &color) const;
233 
234  //
235  // low level
236  //
237 
239  bool readZonesList();
241  bool readZone(shared_ptr<HanMacWrdKZone> zone);
243  shared_ptr<HanMacWrdKZone> decodeZone(shared_ptr<HanMacWrdKZone> zone);
245  bool readFramesUnkn(shared_ptr<HanMacWrdKZone> zone);
247  bool readPrintInfo(HanMacWrdKZone &zone);
249  bool readZone6(shared_ptr<HanMacWrdKZone> zone);
251  bool readZone8(shared_ptr<HanMacWrdKZone> zone);
253  bool readZonea(shared_ptr<HanMacWrdKZone> zone);
255  bool readZoneb(HanMacWrdKZone &zone);
257  bool readZonec(shared_ptr<HanMacWrdKZone> zone);
258 
259 protected:
260  //
261  // data
262  //
264  shared_ptr<HanMacWrdKParserInternal::State> m_state;
265 
267  shared_ptr<HanMacWrdKGraph> m_graphParser;
268 
270  shared_ptr<HanMacWrdKText> m_textParser;
271 };
272 #endif
273 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
shared_ptr< MWAWListener > MWAWListenerPtr
a smart pointer of MWAWListener
Definition: libmwaw_internal.hxx:441
libmwaw::DebugFile & ascii() const
returns the debug file
Definition: HanMacWrdKParser.hxx:133
shared_ptr< libmwaw::DebugFile > m_asciiFilePtr
the file pointer
Definition: HanMacWrdKParser.hxx:170
a function used by MWAWDocument to store the version of document
Definition: MWAWHeader.hxx:56
long fileBeginPos() const
returns the file begin position
Definition: HanMacWrdKParser.hxx:91
Internal: the subdocument of a HanMacWrdKParser.
Definition: HanMacWrdKParser.cxx:85
bool readZonesList()
try to read the zones list
Definition: HanMacWrdKParser.cxx:334
shared_ptr< HanMacWrdKGraph > m_graphParser
the graph parser
Definition: HanMacWrdKParser.hxx:267
bool m_parsed
true if the zone is sended
Definition: HanMacWrdKParser.hxx:154
HanMacWrdKZone & operator=(HanMacWrdKZone const &orig)
an interface used to insert comment in a binary file, written in ascii form (if debug_with_files is n...
Definition: MWAWDebug.hxx:65
bool readZone(shared_ptr< HanMacWrdKZone > zone)
try to read a generic zone
Definition: HanMacWrdKParser.cxx:428
~HanMacWrdKZone()
destructor
Definition: HanMacWrdKParser.cxx:1193
long end() const
returns the last position in the input
Definition: HanMacWrdKParser.hxx:72
int m_type
the type : 1(text), ....
Definition: HanMacWrdKParser.hxx:139
bool sendZone(long zId)
send a zone
Definition: HanMacWrdKParser.cxx:179
bool readZonea(shared_ptr< HanMacWrdKZone > zone)
try to read a unknown zone of type a
Definition: HanMacWrdKParser.cxx:784
shared_ptr< HanMacWrdKParserInternal::State > m_state
the state
Definition: HanMacWrdKParser.hxx:264
the class to store a color
Definition: libmwaw_internal.hxx:177
long m_endFilePos
the end of the entry
Definition: HanMacWrdKParser.hxx:161
long m_subId
the zone subId
Definition: HanMacWrdKParser.hxx:145
bool sendText(long id, long subId, MWAWListenerPtr listener=MWAWListenerPtr())
send a text zone
Definition: HanMacWrdKParser.cxx:169
MWAWVec2f getPageLeftTop() const
returns the page left top point ( in inches)
Definition: HanMacWrdKParser.cxx:194
bool readFramesUnkn(shared_ptr< HanMacWrdKZone > zone)
try to read a zone storing a list of ?, frameType
Definition: HanMacWrdKParser.cxx:638
void setFilePositions(long begPos, long endPos)
sets the begin/end file pos
Definition: HanMacWrdKParser.hxx:111
long length() const
returns the zone size
Definition: HanMacWrdKParser.hxx:77
bool readZone6(shared_ptr< HanMacWrdKZone > zone)
try to read a unknown zone of type 6
Definition: HanMacWrdKParser.cxx:707
shared_ptr< MWAWRSRCParser > MWAWRSRCParserPtr
a smart pointer of MWAWRSRCParser
Definition: libmwaw_internal.hxx:449
bool canSendTextAsGraphic(long id, long subId)
check if we can send a textzone as graphic
Definition: HanMacWrdKParser.cxx:174
long m_filePos
the begin of the entry
Definition: HanMacWrdKParser.hxx:158
bool valid() const
returns true if the zone data exists
Definition: HanMacWrdKParser.hxx:83
bool createZones()
finds the different objects zones
Definition: HanMacWrdKParser.cxx:302
shared_ptr< HanMacWrdKZone > decodeZone(shared_ptr< HanMacWrdKZone > zone)
try to decode a zone
Definition: HanMacWrdKParser.cxx:969
HanMacWrdKParser(MWAWInputStreamPtr input, MWAWRSRCParserPtr rsrcParser, MWAWHeader *header)
constructor
Definition: HanMacWrdKParser.cxx:142
MWAWInputStreamPtr m_input
the main input
Definition: HanMacWrdKParser.hxx:148
shared_ptr< HanMacWrdKText > m_textParser
the text parser
Definition: HanMacWrdKParser.hxx:270
libmwaw::DebugFile * m_asciiFile
the debug file
Definition: HanMacWrdKParser.hxx:167
Internal: the structures of a HanMacWrdKParser.
Definition: HanMacWrdKParser.cxx:62
virtual class which defines the ancestor of all text zone parser
Definition: MWAWParser.hxx:284
librevenge::RVNGBinaryData m_data
the storage (if needed)
Definition: HanMacWrdKParser.hxx:164
std::string name() const
returns the zone name
Definition: HanMacWrdKParser.hxx:122
the main class to read a HanMac Word-K file
Definition: HanMacWrdKParser.hxx:185
shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:439
bool readZone8(shared_ptr< HanMacWrdKZone > zone)
try to read a unknown zone of type 8
Definition: HanMacWrdKParser.cxx:751
bool checkHeader(MWAWHeader *header, bool strict=false)
checks if the document header is correct (or not)
Definition: HanMacWrdKParser.cxx:1080
librevenge::RVNGBinaryData & getBinaryData()
returns a pointer to the binary data
Definition: HanMacWrdKParser.hxx:117
the main class to read the text part of HanMac Word file
Definition: HanMacWrdKText.hxx:61
void parse(librevenge::RVNGTextInterface *documentInterface)
virtual function used to parse the input
Definition: HanMacWrdKParser.cxx:219
the main class to read the graphic part of a HanMac Word file
Definition: HanMacWrdKGraph.hxx:77
bool getColor(int colId, int patternId, MWAWColor &color) const
returns the color associated with a pattern
Definition: HanMacWrdKParser.cxx:186
void init()
inits all internal variables
Definition: HanMacWrdKParser.cxx:152
void setFileBeginPos(long begPos)
sets the begin file pos
Definition: HanMacWrdKParser.hxx:101
bool readPrintInfo(HanMacWrdKZone &zone)
try to read a printinfo zone (type 7)
Definition: HanMacWrdKParser.cxx:527
Small class used to store the decoded zone of HanMacWrdKParser.
Definition: HanMacWrdKParser.hxx:58
void newPage(int number)
adds a new page
Definition: HanMacWrdKParser.cxx:203
bool readZoneb(HanMacWrdKZone &zone)
try to read a unknown zone of type b
Definition: HanMacWrdKParser.cxx:828
long begin() const
returns the first position in the input
Definition: HanMacWrdKParser.hxx:67
friend std::ostream & operator<<(std::ostream &o, HanMacWrdKZone const &zone)
operator <<
Definition: HanMacWrdKParser.cxx:1199
long fileEndPos() const
returns the file begin position
Definition: HanMacWrdKParser.hxx:96
bool readZonec(shared_ptr< HanMacWrdKZone > zone)
try to read a unknown zone of type c
Definition: HanMacWrdKParser.cxx:886
HanMacWrdKZone(MWAWInputStreamPtr input, libmwaw::DebugFile &asciiFile)
constructor given an input and an asciiFile
Definition: HanMacWrdKParser.cxx:1183
void createDocument(librevenge::RVNGTextInterface *documentInterface)
creates the listener which will be associated to the document
Definition: HanMacWrdKParser.cxx:255
long m_id
the zone id
Definition: HanMacWrdKParser.hxx:142
void setFileLength(long len)
sets the file length
Definition: HanMacWrdKParser.hxx:106
std::string m_extra
some extra data
Definition: HanMacWrdKParser.hxx:151
virtual ~HanMacWrdKParser()
destructor
Definition: HanMacWrdKParser.cxx:148

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