Main Page
Namespaces
Classes
Files
File List
File Members
MsWrdStruct.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 MsWrd structures
36
*/
37
38
#ifndef MS_WRD_STRUCT
39
# define MS_WRD_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
MsWrdStruct
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
{
63
for
(
int
i = 0; i < NumFlags; i++) m_flags[i]=MWAWVariable<int>(0);
64
}
65
67
void
insert
(
Font
const
&font,
Font
const
*styleFont=0);
68
70
void
updateFontToFinalState
(
Font
const
*styleFont=0);
71
73
friend
std::ostream &
operator<<
(std::ostream &o,
Font
const
&font);
74
76
int
cmp
(
Font
const
&oth)
const
77
{
78
int
diff =
m_font
.
get
().cmp(oth.
m_font
.
get
());
79
if
(diff)
return
diff;
80
if
(
m_size
.
get
() < oth.
m_size
.
get
())
return
-1;
81
if
(
m_size
.
get
() > oth.
m_size
.
get
())
return
1;
82
diff =
m_value
.
get
()-oth.
m_value
.
get
();
83
if
(diff)
return
diff;
84
for
(
int
i = 0; i <
NumFlags
; i++) {
85
diff =
m_flags
[i].
get
()-oth.
m_flags
[i].
get
();
86
if
(diff)
return
diff;
87
}
88
if
(
m_picturePos
.
get
()<oth.
m_picturePos
.
get
())
return
-1;
89
if
(
m_picturePos
.
get
()>oth.
m_picturePos
.
get
())
return
1;
90
diff =
m_unknown
.
get
()-oth.
m_unknown
.
get
();
91
if
(diff)
return
diff;
92
return
0;
93
}
95
MWAWVariable<MWAWFont>
m_font
;
97
MWAWVariable<float>
m_size
;
99
MWAWVariable<int>
m_value
;
101
MWAWVariable<int>
m_flags
[
NumFlags
];
103
MWAWVariable<long>
m_picturePos
;
105
MWAWVariable<int>
m_unknown
;
107
std::string
m_extra
;
108
};
109
111
struct
Section
{
113
Section
() :
m_id
(-1),
m_type
(0),
m_paragraphId
(-9999),
m_col
(1),
114
m_colSep
(0.5),
m_colBreak
(false),
m_flag
(0),
m_extra
(
""
)
115
{
116
}
118
MWAWSection
getSection
(
double
pageWidth)
const
;
119
121
void
insert
(
Section
const
&sec)
122
{
123
m_id
.
insert
(sec.
m_id
);
124
m_type
.
insert
(sec.
m_type
);
125
m_paragraphId
.
insert
(sec.
m_paragraphId
);
126
m_col
.
insert
(sec.
m_col
);
127
m_colSep
.
insert
(sec.
m_colSep
);
128
m_colBreak
.
insert
(sec.
m_colBreak
);
129
m_flag
.
insert
(sec.
m_flag
);
130
m_extra
+=sec.
m_extra
;
131
}
133
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
135
bool
readV3
(
MWAWInputStreamPtr
&input,
long
endPos);
136
138
friend
std::ostream &
operator<<
(std::ostream &o,
Section
const
§ion);
139
141
MWAWVariable<int>
m_id
;
143
MWAWVariable<int>
m_type
;
145
MWAWVariable<int>
m_paragraphId
;
147
MWAWVariable<int>
m_col
;
149
MWAWVariable<float>
m_colSep
;
151
MWAWVariable<bool>
m_colBreak
;
153
MWAWVariable<int>
m_flag
;
155
std::string
m_extra
;
156
};
157
159
struct
Table
{
160
struct
Cell
;
162
Table
() :
m_height
(0),
m_justify
(
MWAWParagraph
::JustificationLeft),
m_indent
(0),
163
m_columns
(),
m_columnsWidthMod
(),
m_cells
(),
m_extra
(
""
)
164
{
165
}
167
void
insert
(
Table
const
&table);
169
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
171
MWAWVariable<Cell>
&
getCell
(
int
id
);
172
174
friend
std::ostream &
operator<<
(std::ostream &o,
Table
const
&table);
175
177
MWAWVariable<float>
m_height
;
179
MWAWVariable<MWAWParagraph::Justification>
m_justify
;
181
MWAWVariable<float>
m_indent
;
183
MWAWVariable<std::vector<float>
>
m_columns
;
185
MWAWVariable<std::vector<float>
>
m_columnsWidthMod
;
187
std::vector<MWAWVariable<Cell> >
m_cells
;
189
std::string
m_extra
;
190
192
struct
Cell
{
194
Cell
() :
m_borders
(),
m_backColor
(1.0f),
m_extra
(
""
)
195
{
196
}
198
void
insert
(
Cell
const
&cell)
199
{
200
size_t
cNumBorders = cell.
m_borders
.size();
201
if
(cNumBorders >
m_borders
.size())
202
m_borders
.resize(cNumBorders);
203
for
(
size_t
i=0; i < cNumBorders; i++)
204
if
(cell.
m_borders
[i].isSet())
m_borders
[i]=*cell.
m_borders
[i];
205
m_backColor
.
insert
(cell.
m_backColor
);
206
m_extra
+=cell.
m_extra
;
207
}
209
bool
hasBorders
()
const
210
{
211
for
(
size_t
i = 0; i <
m_borders
.size(); i++)
212
if
(
m_borders
[i].isSet() &&
m_borders
[i]->m_style !=
MWAWBorder::None
)
213
return
true
;
214
return
false
;
215
}
217
friend
std::ostream &
operator<<
(std::ostream &o,
Cell
const
&cell);
219
std::vector<MWAWVariable<MWAWBorder> >
m_borders
;
221
MWAWVariable<float>
m_backColor
;
223
std::string
m_extra
;
224
};
225
};
226
228
struct
ParagraphInfo
{
230
ParagraphInfo
() :
m_type
(0),
m_dim
(),
m_numLines
(-1),
m_error
(
""
)
231
{
232
}
234
bool
isLineSet
()
const
235
{
236
return
*
m_numLines
!=0;
237
}
239
bool
isEmpty
()
const
240
{
241
if
(*
m_numLines
|| *
m_type
)
return
false
;
242
if
(!
m_dim
.isSet())
return
true
;
243
if
((*
m_dim
)[0] > 0 || (*m_dim)[1] > 0)
return
false
;
244
return
true
;
245
}
247
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos,
int
vers);
249
friend
std::ostream &
operator<<
(std::ostream &o,
ParagraphInfo
const
&pInfo)
250
{
251
// find also pInfo.m_type&0x40 : ?
252
if
(*pInfo.
m_type
&0xd0) o <<
"type?="
<< ((*pInfo.
m_type
&0xd0)>>4) <<
","
;
253
if
(*pInfo.
m_type
&0x0f) o <<
"#unkn="
<< (*pInfo.
m_type
&0xf) <<
","
;
254
if
(pInfo.
m_dim
.isSet()) {
255
if
((*pInfo.
m_dim
)[0] > 0)
256
o <<
"width="
<< (*pInfo.
m_dim
)[0] <<
","
;
257
if
((*pInfo.
m_dim
)[1] > 0) {
258
o <<
"height="
<< (*pInfo.
m_dim
)[1];
259
if
(*pInfo.
m_type
&0x20)
260
o <<
"[total]"
;
261
o <<
","
;
262
}
263
}
264
if
(pInfo.
m_numLines
.
isSet
() && *pInfo.
m_numLines
!=-1 && *pInfo.
m_numLines
!=1)
265
o <<
"nLines="
<< *pInfo.
m_numLines
<<
","
;
266
if (pInfo.
m_error
.length()) o << pInfo.
m_error
<<
","
;
267
return
o;
268
}
270
void
insert
(
ParagraphInfo
const
&pInfo);
272
MWAWVariable<int>
m_type
;
274
MWAWVariable<MWAWVec2f>
m_dim
;
276
MWAWVariable<int>
m_numLines
;
278
std::string
m_error
;
279
};
280
282
struct
Paragraph
:
public
MWAWParagraph
{
284
explicit
Paragraph
(
int
version) :
MWAWParagraph
(),
m_version
(version),
m_styleId
(-1000),
285
m_interline
(0),
m_deletedTabs
(),
m_info
(),
m_font
(),
m_modFont
(),
m_section
(),
286
m_bordersStyle
(),
m_inCell
(false),
m_tableDef
(false),
m_table
()
287
{
288
m_tabsRelativeToLeftMargin
=
false
;
289
}
291
void
insert
(
Paragraph
const
¶,
bool
insertModif=
true
);
293
bool
read
(
MWAWInputStreamPtr
&input,
long
endPos);
295
void
updateParagraphToFinalState
(
Paragraph
const
*style=0);
297
bool
getFont
(
Font
&font,
Font
const
*styleFont=0)
const
;
299
bool
inTable
()
const
300
{
301
return
m_inCell
.
get
();
302
}
304
friend
std::ostream &
operator<<
(std::ostream &o,
Paragraph
const
&ind);
305
307
void
print
(std::ostream &o,
MWAWFontConverterPtr
converter)
const
;
308
310
int
getNumLines
()
const
311
{
312
return
m_info
.get().m_numLines.get();
313
}
315
int
m_version
;
317
MWAWVariable<int>
m_styleId
;
319
MWAWVariable<double>
m_interline
;
321
std::vector<float>
m_deletedTabs
;
323
MWAWVariable<ParagraphInfo>
m_info
;
325
MWAWVariable<Font>
m_font
,
m_modFont
;
327
MWAWVariable<Section>
m_section
;
329
MWAWVariable<MWAWBorder>
m_bordersStyle
;
331
MWAWVariable<bool>
m_inCell
;
333
MWAWVariable<bool>
m_tableDef
;
335
MWAWVariable<Table>
m_table
;
336
};
337
}
338
#endif
339
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
Generated on Tue Mar 1 2016 23:42:50 for libmwaw by
doxygen
1.8.4