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
47class MWAWParserState;
48
50namespace ClarisWksStruct
51{
54bool readIntZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete, int fSz, std::vector<int> &res);
56bool readStructZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete);
58struct DSET {
59 struct Child;
60
65 };
68
70 DSET() : m_size(0), m_numData(0), m_dataSz(-1), m_headerSz(-1),
72 m_page(-1), m_box(), m_pageDimension(0,0), m_id(0), m_fathersList(),
75 {
76 for (int i = 0; i < 4; i++) m_flags[i] = 0;
77 }
78
80 virtual ~DSET() {}
81
83 bool isHeaderFooter() const
84 {
86 }
87
89 bool isSlide() const
90 {
92 }
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 {
109 return m_page;
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;
130
132 friend std::ostream &operator<<(std::ostream &o, DSET const &doc);
133
135 long m_size;
142
147
154
156 int m_id;
158 std::set<int> m_fathersList;
159
164
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 }
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
231 int m_id;
233 long m_posC;
238 };
239};
240}
241
242#endif
243// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
MWAWVec2< T > size() const
the box size
Definition: libmwaw_internal.hxx:1008
a class to define the parser state
Definition: MWAWParser.hxx:50
T y() const
second element
Definition: libmwaw_internal.hxx:620
T x() const
first element
Definition: libmwaw_internal.hxx:615
MWAWBox2< float > MWAWBox2f
MWAWBox2 of float.
Definition: libmwaw_internal.hxx:1134
namespace to store the main structure which appears in a ClarisDraw/ClarisWorks file
Definition: ClarisWksStruct.cxx:51
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
bool readStructZone(MWAWParserState &parserState, char const *zoneName, bool hasEntete)
try to read a structured zone with unknown content
Definition: ClarisWksStruct.cxx:129
structure used to define the child of a DSET structure
Definition: ClarisWksStruct.hxx:182
friend std::ostream & operator<<(std::ostream &o, Child const &ch)
operator<<
Definition: ClarisWksStruct.hxx:201
MWAWBox2f m_box
the bdbox
Definition: ClarisWksStruct.hxx:237
ChildType m_type
the type
Definition: ClarisWksStruct.hxx:229
long m_posC
a position (used in text zone to store the character )
Definition: ClarisWksStruct.hxx:233
Child()
constructor
Definition: ClarisWksStruct.hxx:184
MWAWBox2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:188
int m_id
the identificator
Definition: ClarisWksStruct.hxx:231
int m_page
the page if known
Definition: ClarisWksStruct.hxx:235
main structure which correspond to a document part
Definition: ClarisWksStruct.hxx:58
long m_size
the size of the DSET header
Definition: ClarisWksStruct.hxx:135
MWAWBox2i getUnionChildBox() const
returns the child box (ie. the union of the childs box)
Definition: ClarisWksStruct.cxx:205
Position
the zone position
Definition: ClarisWksStruct.hxx:62
@ P_Table
Definition: ClarisWksStruct.hxx:62
@ P_SlideThumbnail
Definition: ClarisWksStruct.hxx:64
@ P_Main
Definition: ClarisWksStruct.hxx:62
@ P_GraphicMaster
Definition: ClarisWksStruct.hxx:63
@ P_Slide
Definition: ClarisWksStruct.hxx:64
@ P_SlideMaster
Definition: ClarisWksStruct.hxx:64
@ P_Header
Definition: ClarisWksStruct.hxx:62
@ P_SlideNote
Definition: ClarisWksStruct.hxx:64
@ P_Footer
Definition: ClarisWksStruct.hxx:62
@ P_Frame
Definition: ClarisWksStruct.hxx:62
@ P_Unknown
Definition: ClarisWksStruct.hxx:64
@ P_Footnote
Definition: ClarisWksStruct.hxx:62
MWAWBox2f m_box
the bounding box (if known)
Definition: ClarisWksStruct.hxx:151
int getMaximumPage() const
returns the maximum page
Definition: ClarisWksStruct.hxx:106
void updateChildPositions(MWAWVec2f const &pageDim, float formLength, int numHorizontalPages=1)
try to update the child page and bounding box
Definition: ClarisWksStruct.cxx:248
bool isSlide() const
test if the zone is a slide
Definition: ClarisWksStruct.hxx:89
std::set< int > m_fathersList
the list of fathers
Definition: ClarisWksStruct.hxx:158
std::vector< int > m_otherChilds
the list of other child
Definition: ClarisWksStruct.hxx:174
virtual ~DSET()
virtual destructor
Definition: ClarisWksStruct.hxx:80
int m_flags[4]
some unknown flag
Definition: ClarisWksStruct.hxx:169
MWAWVec2f m_pageDimension
the page dimension (if know)
Definition: ClarisWksStruct.hxx:153
int m_textType
the text type (header/footer,footnote, ...)
Definition: ClarisWksStruct.hxx:166
long m_numData
the number of header
Definition: ClarisWksStruct.hxx:137
DSET()
constructor
Definition: ClarisWksStruct.hxx:70
virtual void removeChild(int cId, bool normalChild)
virtual function to remove a child from a list
Definition: ClarisWksStruct.cxx:226
bool m_parsed
a flag to know if the entry is sent or not to the listener
Definition: ClarisWksStruct.hxx:177
int m_beginSelection
the begin of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:161
void findForbiddenPagesBreaking(float pageDim, float formDim, int dim, std::set< int > &forbiddenPageBreak) const
find forbidden page break
Definition: ClarisWksStruct.cxx:350
std::vector< Child > m_childs
the list of child zone
Definition: ClarisWksStruct.hxx:172
int m_id
the zone identificator
Definition: ClarisWksStruct.hxx:156
int m_page
the page (if known)
Definition: ClarisWksStruct.hxx:149
Position m_position
the zone type
Definition: ClarisWksStruct.hxx:144
int m_fileType
the type ( 0: text, -1: graphic, ...)
Definition: ClarisWksStruct.hxx:146
int m_endSelection
the end of selection ( at least in text header)
Definition: ClarisWksStruct.hxx:163
ChildType
the different types of zone child
Definition: ClarisWksStruct.hxx:67
@ C_Zone
Definition: ClarisWksStruct.hxx:67
@ C_Unknown
Definition: ClarisWksStruct.hxx:67
@ C_SubText
Definition: ClarisWksStruct.hxx:67
@ C_Graphic
Definition: ClarisWksStruct.hxx:67
long m_headerSz
the header size
Definition: ClarisWksStruct.hxx:141
MWAWBox2f getBdBox() const
return the zone bdbox
Definition: ClarisWksStruct.hxx:94
int m_internal
an internal variable used to do some computation
Definition: ClarisWksStruct.hxx:179
long m_dataSz
the data size
Definition: ClarisWksStruct.hxx:139
bool isHeaderFooter() const
test if the zone is an header/footer
Definition: ClarisWksStruct.hxx:83
friend std::ostream & operator<<(std::ostream &o, DSET const &doc)
operator<<
Definition: ClarisWksStruct.cxx:391

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