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
47 class MWAWParserState;
48
50 namespace ClarisWksStruct
51 {
54 bool readIntZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete, int fSz, std::vector<int> &res);
56 bool readStructZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete);
58 struct DSET {
59 struct Child;
60
62 enum Position { P_Main=0, P_Header, P_Footer, P_Frame, P_Footnote, P_Table,
63 P_GraphicMaster,
64 P_Slide, P_SlideNote, P_SlideThumbnail, P_SlideMaster, P_Unknown
65 };
67 enum ChildType { C_Zone, C_SubText, C_Graphic, C_Unknown };
68
70 DSET() : m_size(0), m_numData(0), m_dataSz(-1), m_headerSz(-1),
71 m_position(P_Unknown), m_fileType(-1),
72 m_page(-1), m_box(), m_pageDimension(0,0), m_id(0), m_fathersList(),
73 m_beginSelection(0), m_endSelection(-1), m_textType(0),
74 m_childs(), m_otherChilds(), m_parsed(false), m_internal(0)
75 {
76 for (int i = 0; i < 4; i++) m_flags[i] = 0;
77 }
78
80 virtual ~DSET() {}
81
83 bool isHeaderFooter() const
84 {
85 return m_position==P_Header||m_position==P_Footer;
86 }
87
89 bool isSlide() const
90 {
91 return m_position==P_Slide || m_position==P_SlideNote || m_position==P_SlideThumbnail || m_position==P_SlideMaster;
92 }
94 MWAWBox2f getBdBox() const
95 {
96 MWAWVec2f minPt(m_box[0][0], m_box[0][1]);
97 MWAWVec2f maxPt(m_box[1][0], m_box[1][1]);
98 for (int c=0; c<2; ++c) {
99 if (m_box.size()[c]>=0) continue;
100 minPt[c]=m_box[1][c];
101 maxPt[c]=m_box[0][c];
102 }
103 return MWAWBox2f(minPt,maxPt);
104 }
106 int getMaximumPage() const
107 {
108 if (m_position==ClarisWksStruct::DSET::P_Slide)
109 return m_page;
110 if (m_position!=ClarisWksStruct::DSET::P_Main)
111 return 0;
112 int nPages=m_page;
113 for (size_t b=0; b < m_childs.size(); b++) {
114 if (m_childs[b].m_page > nPages)
115 nPages=m_childs[b].m_page;
116 }
117 return nPages;
118 }
119
121 virtual void removeChild(int cId, bool normalChild);
123 virtual void removeChild(int cId);
125 void updateChildPositions(MWAWVec2f const &pageDim, float formLength, int numHorizontalPages=1);
127 void findForbiddenPagesBreaking(float pageDim, float formDim, int dim, std::set<int> &forbiddenPageBreak) const;
129 MWAWBox2i getUnionChildBox() const;
130
132 friend std::ostream &operator<<(std::ostream &o, DSET const &doc);
133
135 long m_size;
137 long m_numData;
139 long m_dataSz;
141 long m_headerSz;
142
144 Position m_position;
146 int m_fileType;
147
149 int m_page;
151 MWAWBox2f m_box;
153 MWAWVec2f m_pageDimension;
154
156 int m_id;
158 std::set<int> m_fathersList;
159
161 int m_beginSelection;
163 int m_endSelection;
164
166 int m_textType;
167
169 int m_flags[4];
170
172 std::vector<Child> m_childs;
174 std::vector<int> m_otherChilds;
175
177 mutable bool m_parsed;
179 mutable int m_internal;
180
182 struct Child {
184 Child() : m_type(C_Unknown), m_id(-1), m_posC(-1), m_page(-1), m_box()
185 {
186 }
188 MWAWBox2f getBdBox() const
189 {
190 MWAWVec2f minPt(m_box[0][0], m_box[0][1]);
191 MWAWVec2f maxPt(m_box[1][0], m_box[1][1]);
192 for (int c=0; c<2; ++c) {
193 if (m_box.size()[c]>=0) continue;
194 minPt[c]=m_box[1][c];
195 maxPt[c]=m_box[0][c];
196 }
197 return MWAWBox2f(minPt,maxPt);
198 }
199
201 friend std::ostream &operator<<(std::ostream &o, Child const &ch)
202 {
203 switch (ch.m_type) {
204 case C_SubText:
205 o << "text,";
206 break;
207 case C_Zone:
208 o << "zone,";
209 break;
210 case C_Graphic:
211 o << "graphic,";
212 break;
213 case C_Unknown:
214 o << "#type,";
215 #if !defined(__clang__)
216 default:
217 #endif
218 break;
219 }
220 if (ch.m_id != -1) o << "id=" << ch.m_id << ",";
221 if (ch.m_posC != -1) o << "posC=" << ch.m_posC << ",";
222 if (ch.m_page>=0) o << "pg=" << ch.m_page << ",";
223 if (ch.m_box.size().x() > 0 || ch.m_box.size().y() > 0)
224 o << "box=" << ch.m_box << ",";
225 return o;
226 }
227
229 ChildType m_type;
231 int m_id;
233 long m_posC;
235 int m_page;
237 MWAWBox2f m_box;
238 };
239 };
240 }
241
242 #endif
243 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
ClarisWksStruct::DSET::m_beginSelection
int m_beginSelection
the begin of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:161
ClarisWksStruct::DSET::m_endSelection
int m_endSelection
the end of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:163
ClarisWksStruct::DSET::C_Unknown
Definition: ClarisWksStruct.hxx:67
MWAWVec2::y
T y() const
second element
Definition: libmwaw_internal.hxx:634
ClarisWksStruct::DSET::Child::Child
Child()
constructor
Definition: ClarisWksStruct.hxx:184
ClarisWksStruct::DSET::~DSET
virtual ~DSET()
virtual destructor
Definition: ClarisWksStruct.hxx:80
ClarisWksStruct::DSET::Child::m_type
ChildType m_type
the type
Definition: ClarisWksStruct.hxx:229
ClarisWksStruct::DSET::updateChildPositions
void updateChildPositions(MWAWVec2f const &pageDim, float formLength, int numHorizontalPages=1)
try to update the child page and bounding box
Definition: ClarisWksStruct.cxx:248
libmwaw_internal.hxx
ClarisWksStruct::DSET::Child::m_box
MWAWBox2f m_box
the bdbox
Definition: ClarisWksStruct.hxx:237
ClarisWksStruct::DSET::m_fathersList
std::set< int > m_fathersList
the list of fathers
Definition: ClarisWksStruct.hxx:158
ClarisWksStruct::DSET::Child
structure used to define the child of a DSET structure
Definition: ClarisWksStruct.hxx:182
ClarisWksStruct::DSET::Child::operator<<
friend std::ostream & operator<<(std::ostream &o, Child const &ch)
operator<<
Definition: ClarisWksStruct.hxx:201
ClarisWksStruct::DSET::m_size
long m_size
the size of the DSET header
Definition: ClarisWksStruct.hxx:135
ClarisWksStruct::DSET::m_page
int m_page
the page (if known)
Definition: ClarisWksStruct.hxx:149
ClarisWksStruct::DSET::isSlide
bool isSlide() const
test if the zone is a slide
Definition: ClarisWksStruct.hxx:89
ClarisWksStruct::DSET::P_SlideThumbnail
Definition: ClarisWksStruct.hxx:64
ClarisWksStruct::DSET::m_flags
int m_flags[4]
some unknown flag
Definition: ClarisWksStruct.hxx:169
ClarisWksStruct::DSET::P_GraphicMaster
Definition: ClarisWksStruct.hxx:63
ClarisWksStruct::DSET::m_internal
int m_internal
an internal variable used to do some computation
Definition: ClarisWksStruct.hxx:179
ClarisWksStruct::DSET::P_Header
Definition: ClarisWksStruct.hxx:62
MWAWBox2::size
MWAWVec2< T > size() const
the box size
Definition: libmwaw_internal.hxx:1022
ClarisWksStruct::DSET::findForbiddenPagesBreaking
void findForbiddenPagesBreaking(float pageDim, float formDim, int dim, std::set< int > &forbiddenPageBreak) const
find forbidden page break
Definition: ClarisWksStruct.cxx:350
ClarisWksStruct::DSET::m_numData
long m_numData
the number of header
Definition: ClarisWksStruct.hxx:137
ClarisWksStruct::DSET::m_id
int m_id
the zone identificator
Definition: ClarisWksStruct.hxx:156
ClarisWksStruct::DSET::m_box
MWAWBox2f m_box
the bounding box (if known)
Definition: ClarisWksStruct.hxx:151
ClarisWksStruct::DSET::m_textType
int m_textType
the text type (header/footer,footnote, ...)
Definition: ClarisWksStruct.hxx:166
ClarisWksStruct::DSET::P_Frame
Definition: ClarisWksStruct.hxx:62
ClarisWksStruct::DSET
main structure which correspond to a document part
Definition: ClarisWksStruct.hxx:58
ClarisWksStruct::DSET::Child::getBdBox
MWAWBox2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:188
MWAWVec2::x
T x() const
first element
Definition: libmwaw_internal.hxx:629
ClarisWksStruct::DSET::m_otherChilds
std::vector< int > m_otherChilds
the list of other child
Definition: ClarisWksStruct.hxx:174
ClarisWksStruct::DSET::getBdBox
MWAWBox2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:94
ClarisWksStruct::DSET::P_Slide
Definition: ClarisWksStruct.hxx:64
MWAWBox2< float >
MWAWParserState
a class to define the parser state
Definition: MWAWParser.hxx:49
ClarisWksStruct::DSET::P_SlideMaster
Definition: ClarisWksStruct.hxx:64
ClarisWksStruct::DSET::DSET
DSET()
constructor
Definition: ClarisWksStruct.hxx:70
ClarisWksStruct::DSET::m_parsed
bool m_parsed
a flag to know if the entry is sent or not to the listener
Definition: ClarisWksStruct.hxx:177
ClarisWksStruct::DSET::Child::m_page
int m_page
the page if known
Definition: ClarisWksStruct.hxx:235
ClarisWksStruct::DSET::P_Footnote
Definition: ClarisWksStruct.hxx:62
ClarisWksStruct::DSET::m_fileType
int m_fileType
the type ( 0: text, -1: graphic, ...)
Definition: ClarisWksStruct.hxx:146
ClarisWksStruct::DSET::operator<<
friend std::ostream & operator<<(std::ostream &o, DSET const &doc)
operator<<
Definition: ClarisWksStruct.cxx:391
ClarisWksStruct::DSET::P_Table
Definition: ClarisWksStruct.hxx:62
ClarisWksStruct::DSET::getUnionChildBox
MWAWBox2i getUnionChildBox() const
returns the child box (ie. the union of the childs box)
Definition: ClarisWksStruct.cxx:205
ClarisWksStruct::DSET::C_Zone
Definition: ClarisWksStruct.hxx:67
ClarisWksStruct::DSET::P_Unknown
Definition: ClarisWksStruct.hxx:64
ClarisWksStruct::DSET::Position
Position
the zone position
Definition: ClarisWksStruct.hxx:62
MWAWBox2f
MWAWBox2< float > MWAWBox2f
MWAWBox2 of float.
Definition: libmwaw_internal.hxx:1148
ClarisWksStruct::DSET::C_Graphic
Definition: ClarisWksStruct.hxx:67
ClarisWksStruct::DSET::m_position
Position m_position
the zone type
Definition: ClarisWksStruct.hxx:144
ClarisWksStruct::DSET::C_SubText
Definition: ClarisWksStruct.hxx:67
ClarisWksStruct::DSET::removeChild
virtual void removeChild(int cId, bool normalChild)
virtual function to remove a child from a list
Definition: ClarisWksStruct.cxx:226
ClarisWksStruct
namespace to store the main structure which appears in a ClarisDraw/ClarisWorks file ...
Definition: ClarisWksStruct.cxx:50
ClarisWksStruct::DSET::m_dataSz
long m_dataSz
the data size
Definition: ClarisWksStruct.hxx:139
ClarisWksStruct::DSET::getMaximumPage
int getMaximumPage() const
returns the maximum page
Definition: ClarisWksStruct.hxx:106
ClarisWksStruct::DSET::m_childs
std::vector< Child > m_childs
the list of child zone
Definition: ClarisWksStruct.hxx:172
ClarisWksStruct::DSET::ChildType
ChildType
the different types of zone child
Definition: ClarisWksStruct.hxx:67
ClarisWksStruct::DSET::P_SlideNote
Definition: ClarisWksStruct.hxx:64
ClarisWksStruct::DSET::isHeaderFooter
bool isHeaderFooter() const
test if the zone is an header/footer
Definition: ClarisWksStruct.hxx:83
ClarisWksStruct::DSET::Child::m_posC
long m_posC
a position (used in text zone to store the character )
Definition: ClarisWksStruct.hxx:233
ClarisWksStruct::readIntZone
bool readIntZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete, int intSz, std::vector< int > &res)
try to read a int structured zone where fSz to the int size: 1(int8), 2(int16), 4(int32) ...
Definition: ClarisWksStruct.cxx:53
ClarisWksStruct::DSET::Child::m_id
int m_id
the identificator
Definition: ClarisWksStruct.hxx:231
ClarisWksStruct::DSET::P_Footer
Definition: ClarisWksStruct.hxx:62
ClarisWksStruct::DSET::P_Main
Definition: ClarisWksStruct.hxx:62
ClarisWksStruct::DSET::m_pageDimension
MWAWVec2f m_pageDimension
the page dimension (if know)
Definition: ClarisWksStruct.hxx:153
ClarisWksStruct::DSET::m_headerSz
long m_headerSz
the header size
Definition: ClarisWksStruct.hxx:141
MWAWVec2< float >
ClarisWksStruct::readStructZone
bool readStructZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete)
try to read a structured zone with unknown content
Definition: ClarisWksStruct.cxx:129