ClarisWksStruct.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  * Structures used by Claris Works parser
36  *
37  */
38 #ifndef CLARIS_WKS_STRUCT
39 # define CLARIS_WKS_STRUCT
40 
41 #include <iostream>
42 #include <set>
43 #include <vector>
44 
45 #include "libmwaw_internal.hxx"
46 
48 namespace ClarisWksStruct
49 {
51 struct DSET {
52  struct Child;
53 
57  };
60 
62  DSET() : m_size(0), m_numData(0), m_dataSz(-1), m_headerSz(-1),
64  m_page(-1), m_box(), m_pageDimension(0,0), m_id(0), m_fathersList(),
66  m_childs(), m_otherChilds(), m_parsed(false), m_internal(0)
67  {
68  for (int i = 0; i < 4; i++) m_flags[i] = 0;
69  }
70 
72  virtual ~DSET() {}
73 
75  bool isHeaderFooter() const
76  {
78  }
79 
81  bool isSlide() const
82  {
84  }
86  Box2f getBdBox() const
87  {
88  Vec2f minPt(m_box[0][0], m_box[0][1]);
89  Vec2f maxPt(m_box[1][0], m_box[1][1]);
90  for (int c=0; c<2; ++c) {
91  if (m_box.size()[c]>=0) continue;
92  minPt[c]=m_box[1][c];
93  maxPt[c]=m_box[0][c];
94  }
95  return Box2f(minPt,maxPt);
96  }
98  int getMaximumPage() const
99  {
101  return m_page;
103  return 0;
104  int nPages=m_page;
105  for (size_t b=0; b < m_childs.size(); b++) {
106  if (m_childs[b].m_page > nPages)
107  nPages=m_childs[b].m_page;
108  }
109  return nPages;
110  }
111 
113  virtual void removeChild(int cId, bool normalChild);
115  virtual void removeChild(int cId);
117  void updateChildPositions(Vec2f const &pageDim, int numHorizontalPages=1);
119  Box2i getUnionChildBox() const;
120 
122  friend std::ostream &operator<<(std::ostream &o, DSET const &doc);
123 
125  long m_size;
127  long m_numData;
129  long m_dataSz;
132 
137 
139  int m_page;
144 
146  int m_id;
148  std::set<int> m_fathersList;
149 
154 
157 
159  int m_flags[4];
160 
162  std::vector<Child> m_childs;
164  std::vector<int> m_otherChilds;
165 
167  mutable bool m_parsed;
169  mutable int m_internal;
170 
172  struct Child {
174  Child() : m_type(C_Unknown), m_id(-1), m_posC(-1), m_page(-1), m_box()
175  {
176  }
178  Box2f getBdBox() const
179  {
180  Vec2f minPt(m_box[0][0], m_box[0][1]);
181  Vec2f maxPt(m_box[1][0], m_box[1][1]);
182  for (int c=0; c<2; ++c) {
183  if (m_box.size()[c]>=0) continue;
184  minPt[c]=m_box[1][c];
185  maxPt[c]=m_box[0][c];
186  }
187  return Box2f(minPt,maxPt);
188  }
189 
191  friend std::ostream &operator<<(std::ostream &o, Child const &ch)
192  {
193  switch (ch.m_type) {
194  case C_SubText:
195  o << "text,";
196  break;
197  case C_Zone:
198  o << "zone,";
199  break;
200  case C_Graphic:
201  o << "graphic,";
202  break;
203  case C_Unknown:
204  o << "#type,";
205  default:
206  break;
207  }
208  if (ch.m_id != -1) o << "id=" << ch.m_id << ",";
209  if (ch.m_posC != -1) o << "posC=" << ch.m_posC << ",";
210  if (ch.m_page>=0) o << "pg=" << ch.m_page << ",";
211  if (ch.m_box.size().x() > 0 || ch.m_box.size().y() > 0)
212  o << "box=" << ch.m_box << ",";
213  return o;
214  }
215 
219  int m_id;
221  long m_posC;
223  int m_page;
226  };
227 };
228 }
229 
230 #endif
231 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
int m_beginSelection
the begin of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:151
Box2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:86
int m_endSelection
the end of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:153
Definition: ClarisWksStruct.hxx:59
Box2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:178
bool isHeaderFooter() const
test if the zone is an header/footer
Definition: ClarisWksStruct.hxx:75
Box2f m_box
the bdbox
Definition: ClarisWksStruct.hxx:225
bool isSlide() const
test if the zone is a slide
Definition: ClarisWksStruct.hxx:81
Child()
constructor
Definition: ClarisWksStruct.hxx:174
virtual ~DSET()
virtual destructor
Definition: ClarisWksStruct.hxx:72
ChildType m_type
the type
Definition: ClarisWksStruct.hxx:217
std::set< int > m_fathersList
the list of fathers
Definition: ClarisWksStruct.hxx:148
structure used to define the child of a DSET structure
Definition: ClarisWksStruct.hxx:172
friend std::ostream & operator<<(std::ostream &o, Child const &ch)
operator<<
Definition: ClarisWksStruct.hxx:191
long m_size
the size of the DSET header
Definition: ClarisWksStruct.hxx:125
int m_page
the page (if known)
Definition: ClarisWksStruct.hxx:139
Definition: ClarisWksStruct.hxx:56
int m_flags[4]
some unknown flag
Definition: ClarisWksStruct.hxx:159
int m_internal
an internal variable used to do some computation
Definition: ClarisWksStruct.hxx:169
int getMaximumPage() const
returns the maximum page
Definition: ClarisWksStruct.hxx:98
Definition: ClarisWksStruct.hxx:55
long m_numData
the number of header
Definition: ClarisWksStruct.hxx:127
Box2< float > Box2f
Box2 of float.
Definition: libmwaw_internal.hxx:1044
int m_id
the zone identificator
Definition: ClarisWksStruct.hxx:146
int m_textType
the text type (header/footer,footnote, ...)
Definition: ClarisWksStruct.hxx:156
Definition: ClarisWksStruct.hxx:55
main structure which correspond to a document part
Definition: ClarisWksStruct.hxx:51
T y() const
second element
Definition: libmwaw_internal.hxx:518
Box2f m_box
the bounding box (if known)
Definition: ClarisWksStruct.hxx:141
std::vector< int > m_otherChilds
the list of other child
Definition: ClarisWksStruct.hxx:164
Definition: ClarisWksStruct.hxx:56
Definition: ClarisWksStruct.hxx:56
DSET()
constructor
Definition: ClarisWksStruct.hxx:62
bool m_parsed
a flag to know if the entry is sent or not to the listener
Definition: ClarisWksStruct.hxx:167
int m_page
the page if known
Definition: ClarisWksStruct.hxx:223
Definition: ClarisWksStruct.hxx:55
Box2i getUnionChildBox() const
returns the child box (ie. the union of the childs box)
Definition: ClarisWksStruct.cxx:51
T x() const
first element
Definition: libmwaw_internal.hxx:513
int m_fileType
the type ( 0: text, -1: graphic, ...)
Definition: ClarisWksStruct.hxx:136
friend std::ostream & operator<<(std::ostream &o, DSET const &doc)
operator<<
Definition: ClarisWksStruct.cxx:194
Definition: ClarisWksStruct.hxx:55
Definition: ClarisWksStruct.hxx:59
Definition: ClarisWksStruct.hxx:56
Position
the zone position
Definition: ClarisWksStruct.hxx:55
Definition: ClarisWksStruct.hxx:59
Position m_position
the zone type
Definition: ClarisWksStruct.hxx:134
Definition: ClarisWksStruct.hxx:59
virtual void removeChild(int cId, bool normalChild)
virtual function to remove a child from a list
Definition: ClarisWksStruct.cxx:72
namespace to store the main structure which appears in a Claris Works file
Definition: ClarisWksStruct.cxx:46
long m_dataSz
the data size
Definition: ClarisWksStruct.hxx:129
void updateChildPositions(Vec2f const &pageDim, int numHorizontalPages=1)
try to update the child page and bounding box
Definition: ClarisWksStruct.cxx:94
std::vector< Child > m_childs
the list of child zone
Definition: ClarisWksStruct.hxx:162
Vec2f m_pageDimension
the page dimension (if know)
Definition: ClarisWksStruct.hxx:143
Vec2< T > size() const
the box size
Definition: libmwaw_internal.hxx:909
ChildType
the different types of zone child
Definition: ClarisWksStruct.hxx:59
Definition: ClarisWksStruct.hxx:56
long m_posC
a position (used in text zone to store the character )
Definition: ClarisWksStruct.hxx:221
int m_id
the identificator
Definition: ClarisWksStruct.hxx:219
Definition: ClarisWksStruct.hxx:55
Definition: ClarisWksStruct.hxx:55
long m_headerSz
the header size
Definition: ClarisWksStruct.hxx:131

Generated on Mon Apr 10 2017 17:36:50 for libmwaw by doxygen 1.8.8