Main Page
Namespaces
Classes
Files
File List
File Members
MSWStruct.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
* Class to read/store the MSW structures
36
*/
37
38
#ifndef MSW_STRUCT
39
# define MSW_STRUCT
40
41
#include <iostream>
42
#include <string>
43
#include <vector>
44
45
#include "
libmwaw_internal.hxx
"
46
47
#include "MWAWFont.hxx"
48
#include "
MWAWParagraph.hxx
"
49
51
namespace
MSWStruct
52
{
54
MWAWBorder
getBorder
(
int
val, std::string &extra);
55
57
struct
Font
{
58
enum
{
NumFlags
=9 };
59
61
Font
():
m_font
(MWAWFont(-1,0)),
m_size
(0),
m_value
(0),
m_picturePos
(0),
m_unknown
(0),
m_extra
(
""
) {
62
for
(
int
i = 0; i < NumFlags; i++) m_flags[i]=Variable<int>(0);
63
}
64
66
void
insert
(
Font
const
&font,
Font
const
*styleFont=0);
67
69
void
updateFontToFinalState
(
Font
const
*styleFont=0);
70
72
friend
std::ostream &
operator<<
(std::ostream &o,
Font
const
&font);
73
75
int
cmp
(
Font
const
&oth)
const
{
76
int
diff =
m_font
.
get
().cmp(oth.
m_font
.
get
());
77
if
(diff)
return
diff;
78
if
(
m_size
.
get
() < oth.
m_size
.
get
())
return
-1;
79
if
(
m_size
.
get
() > oth.
m_size
.
get
())
return
1;
80
diff =
m_value
.
get
()-oth.
m_value
.
get
();
81
if
(diff)
return
diff;
82
for
(
int
i = 0; i <
NumFlags
; i++) {
83
diff =
m_flags
[i].
get
()-oth.
m_flags
[i].
get
();
84
if
(diff)
return
diff;
85
}
86
if
(
m_picturePos
.
get
()<oth.
m_picturePos
.
get
())
return
-1;
87
if
(
m_picturePos
.
get
()>oth.
m_picturePos
.
get
())
return
1;
88
diff =
m_unknown
.
get
()-oth.
m_unknown
.
get
();
89
if
(diff)
return
diff;
90
return
0;
91
}
93
Variable<MWAWFont>
m_font
;
95
Variable<float>
m_size
;
97
Variable<int>
m_value
;
99
Variable<int>
m_flags
[
NumFlags
];
101
Variable<long>
m_picturePos
;
103
Variable<int>
m_unknown
;
105
std::string
m_extra
;
106
};
107
109
struct
Section
{
111
Section
() :
m_id
(-1),
m_type
(0),
m_paragraphId
(-9999),
m_col
(1),
112
m_colSep
(0.5),
m_colBreak
(false),
m_flag
(0),
m_extra
(
""
) {
113
}
115
MWAWSection
getSection
(
double
pageWidth)
const
;
116
118
void
insert
(
Section
const
&sec) {
119
m_id
.
insert
(sec.
m_id
);
120
m_type
.
insert
(sec.
m_type
);
121
m_paragraphId
.
insert
(sec.
m_paragraphId
);
122
m_col
.
insert
(sec.
m_col
);
123
m_colSep
.
insert
(sec.
m_colSep
);
124
m_colBreak
.
insert
(sec.
m_colBreak
);
125
m_flag
.
insert
(sec.
m_flag
);
126
m_extra
+=sec.
m_extra
;
127
}
129
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
131
bool
readV3
(
MWAWInputStreamPtr
&input,
long
endPos);
132
134
friend
std::ostream &
operator<<
(std::ostream &o,
Section
const
§ion);
135
137
Variable<int>
m_id
;
139
Variable<int>
m_type
;
141
Variable<int>
m_paragraphId
;
143
Variable<int>
m_col
;
145
Variable<float>
m_colSep
;
147
Variable<bool>
m_colBreak
;
149
Variable<int>
m_flag
;
151
std::string
m_extra
;
152
};
153
155
struct
Table
{
156
struct
Cell
;
158
Table
() :
m_height
(0),
m_justify
(
MWAWParagraph
::JustificationLeft),
m_indent
(0),
159
m_columns
(),
m_columnsWidthMod
(),
m_cells
(),
m_extra
(
""
) {
160
}
162
void
insert
(
Table
const
&table);
164
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
166
Variable<Cell>
&
getCell
(
int
id
);
167
169
friend
std::ostream &
operator<<
(std::ostream &o,
Table
const
&table);
170
172
Variable<float>
m_height
;
174
Variable<MWAWParagraph::Justification>
m_justify
;
176
Variable<float>
m_indent
;
178
Variable<std::vector<float>
>
m_columns
;
180
Variable<std::vector<float>
>
m_columnsWidthMod
;
182
std::vector<Variable<Cell> >
m_cells
;
184
std::string
m_extra
;
185
187
struct
Cell
{
189
Cell
() :
m_borders
(),
m_backColor
(1.0f),
m_extra
(
""
) {
190
}
192
void
insert
(
Cell
const
&cell) {
193
size_t
cNumBorders = cell.
m_borders
.size();
194
if
(cNumBorders >
m_borders
.size())
195
m_borders
.resize(cNumBorders);
196
for
(
size_t
i=0; i < cNumBorders; i++)
197
if
(cell.
m_borders
[i].isSet())
m_borders
[i]=*cell.
m_borders
[i];
198
m_backColor
.
insert
(cell.
m_backColor
);
199
m_extra
+=cell.
m_extra
;
200
}
202
bool
hasBorders
()
const
{
203
for
(
size_t
i = 0; i <
m_borders
.size(); i++)
204
if
(
m_borders
[i].isSet() &&
m_borders
[i]->m_style !=
MWAWBorder::None
)
205
return
true
;
206
return
false
;
207
}
209
friend
std::ostream &
operator<<
(std::ostream &o,
Cell
const
&cell);
211
std::vector<Variable<MWAWBorder> >
m_borders
;
213
Variable<float>
m_backColor
;
215
std::string
m_extra
;
216
};
217
};
218
220
struct
ParagraphInfo
{
222
ParagraphInfo
() :
m_type
(0),
m_dim
(),
m_numLines
(-1),
m_error
(
""
) {
223
}
225
bool
isLineSet
()
const
{
226
return
*
m_numLines
!=0;
227
}
229
bool
isEmpty
()
const
{
230
if
(*
m_numLines
|| *
m_type
)
return
false
;
231
if
(!
m_dim
.isSet())
return
true
;
232
if
((*
m_dim
)[0] > 0 || (*m_dim)[1] > 0)
return
false
;
233
return
true
;
234
}
236
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos,
int
vers);
238
friend
std::ostream &
operator<<
(std::ostream &o,
ParagraphInfo
const
&pInfo) {
239
// find also pInfo.m_type&0x40 : ?
240
if
(*pInfo.
m_type
&0xd0) o <<
"type?="
<< ((*pInfo.
m_type
&0xd0)>>4) <<
","
;
241
if
(*pInfo.
m_type
&0x0f) o <<
"#unkn="
<< (*pInfo.
m_type
&0xf) <<
","
;
242
if
(pInfo.
m_dim
.isSet()) {
243
if
((*pInfo.
m_dim
)[0] > 0)
244
o <<
"width="
<< (*pInfo.
m_dim
)[0] <<
","
;
245
if
((*pInfo.
m_dim
)[1] > 0) {
246
o <<
"height="
<< (*pInfo.
m_dim
)[1];
247
if
(*pInfo.
m_type
&0x20)
248
o <<
"[total]"
;
249
o <<
","
;
250
}
251
}
252
if
(pInfo.
m_numLines
.
isSet
() && *pInfo.
m_numLines
!=-1 && *pInfo.
m_numLines
!=1)
253
o <<
"nLines="
<< *pInfo.
m_numLines
<<
","
;
254
if (pInfo.
m_error
.length()) o << pInfo.
m_error
<<
","
;
255
return
o;
256
}
258
void
insert
(
ParagraphInfo
const
&pInfo);
260
Variable<int>
m_type
;
262
Variable<Vec2f>
m_dim
;
264
Variable<int>
m_numLines
;
266
std::string
m_error
;
267
};
268
270
struct
Paragraph
:
public
MWAWParagraph
{
272
Paragraph
(
int
version) :
MWAWParagraph
(),
m_version
(version),
m_styleId
(-1000),
273
m_interline
(0),
m_deletedTabs
(),
m_info
(),
m_font
(),
m_modFont
(),
m_section
(),
274
m_bordersStyle
(),
m_inCell
(false),
m_tableDef
(false),
m_table
() {
275
m_tabsRelativeToLeftMargin
=
false
;
276
}
278
void
insert
(
Paragraph
const
¶,
bool
insertModif=
true
);
280
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
282
void
updateParagraphToFinalState
(
Paragraph
const
*style=0);
284
bool
getFont
(
Font
&font,
Font
const
*styleFont=0)
const
;
286
bool
inTable
()
const
{
287
return
m_inCell
.
get
();
288
}
290
friend
std::ostream &
operator<<
(std::ostream &o,
Paragraph
const
&ind);
291
293
void
print
(std::ostream &o,
MWAWFontConverterPtr
converter)
const
;
294
296
int
getNumLines
()
const
{
297
return
m_info
.get().m_numLines.get();
298
}
300
int
m_version
;
302
Variable<int>
m_styleId
;
304
Variable<double>
m_interline
;
306
std::vector<float>
m_deletedTabs
;
308
Variable<ParagraphInfo>
m_info
;
310
Variable<Font>
m_font
,
m_modFont
;
312
Variable<Section>
m_section
;
314
Variable<MWAWBorder>
m_bordersStyle
;
316
Variable<bool>
m_inCell
;
318
Variable<bool>
m_tableDef
;
320
Variable<Table>
m_table
;
321
};
322
}
323
#endif
324
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
Generated on Thu Apr 24 2014 14:47:42 for libmwaw by
doxygen
1.8.3.1