23 #ifndef LIBWPS_INTERNAL_H
24 #define LIBWPS_INTERNAL_H
37 #include <librevenge-stream/librevenge-stream.h>
38 #include <librevenge/librevenge.h>
41 #define M_PI 3.14159265358979323846
44 #if defined(_MSC_VER) || defined(__DJGPP__)
45 typedef signed char int8_t;
46 typedef unsigned char uint8_t;
47 typedef signed short int16_t;
48 typedef unsigned short uint16_t;
49 typedef signed int int32_t;
50 typedef unsigned int uint32_t;
52 # include <inttypes.h>
63 # define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
64 # define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0)
67 #if defined(SHAREDPTR_TR1)
69 using std::tr1::shared_ptr;
70 #elif defined(SHAREDPTR_STD)
72 using std::shared_ptr;
74 #include <boost/shared_ptr.hpp>
75 using boost::shared_ptr;
117 #if defined(__clang__) || defined(__GNUC__)
118 # define WPS_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((__format__(__printf__, fmt, arg)))
120 # define WPS_ATTRIBUTE_PRINTF(fmt, arg)
128 #define WPS_DEBUG_MSG(M) libwps::printDebugMsg M
130 #define WPS_DEBUG_MSG(M)
161 uint8_t
readU8(librevenge::RVNGInputStream *input);
162 uint16_t
readU16(librevenge::RVNGInputStream *input);
163 uint32_t
readU32(librevenge::RVNGInputStream *input);
165 int8_t
read8(librevenge::RVNGInputStream *input);
166 int16_t
read16(librevenge::RVNGInputStream *input);
167 int32_t
read32(librevenge::RVNGInputStream *input);
171 return readU8(input.get());
184 return read8(input.get());
188 return read16(input.get());
192 return read32(input.get());
210 #define WPS_LE_GET_GUINT16(p) \
211 (uint16_t)((((uint8_t const *)(p))[0] << 0) | \
212 (((uint8_t const *)(p))[1] << 8))
213 #define WPS_LE_GET_GUINT32(p) \
214 (uint32_t)((((uint8_t const *)(p))[0] << 0) | \
215 (((uint8_t const *)(p))[1] << 8) | \
216 (((uint8_t const *)(p))[2] << 16) | \
217 (((uint8_t const *)(p))[3] << 24))
249 WPSColor(
unsigned char r,
unsigned char g,
unsigned char b,
unsigned char a=255) :
250 m_value(uint32_t((a<<24)+(r<<16)+(g<<8)+b))
281 return (
unsigned char)((
m_value>>24)&0xFF);
286 return (
unsigned char)(
m_value&0xFF);
291 return (
unsigned char)((
m_value>>16)&0xFF);
296 return (
unsigned char)((
m_value>>8)&0xFF);
306 return (
m_value&0xFFFFFF)==0xFFFFFF;
341 std::string
str()
const;
362 bool addTo(librevenge::RVNGPropertyList &propList, std::string which=
"")
const;
415 #define WPS_EXTRA_LARGE_BIT 1
416 #define WPS_VERY_LARGE_BIT 2
417 #define WPS_LARGE_BIT 4
418 #define WPS_SMALL_PRINT_BIT 8
419 #define WPS_FINE_PRINT_BIT 0x10
420 #define WPS_SUPERSCRIPT_BIT 0x20
421 #define WPS_SUBSCRIPT_BIT 0x40
422 #define WPS_OUTLINE_BIT 0x80
423 #define WPS_ITALICS_BIT 0x100
424 #define WPS_SHADOW_BIT 0x200
425 #define WPS_REDLINE_BIT 0x400
426 #define WPS_DOUBLE_UNDERLINE_BIT 0x800
427 #define WPS_BOLD_BIT 0x1000
428 #define WPS_STRIKEOUT_BIT 0x2000
429 #define WPS_UNDERLINE_BIT 0x4000
430 #define WPS_SMALL_CAPS_BIT 0x8000
431 #define WPS_BLINK_BIT 0x10000L
432 #define WPS_REVERSEVIDEO_BIT 0x20000L
433 #define WPS_ALL_CAPS_BIT 0x40000L
434 #define WPS_EMBOSS_BIT 0x80000L
435 #define WPS_ENGRAVE_BIT 0x100000L
436 #define WPS_OVERLINE_BIT 0x400000L
437 #define WPS_HIDDEN_BIT 0x800000L
440 #define WPS_PAGE_BREAK 0x00
441 #define WPS_SOFT_PAGE_BREAK 0x01
442 #define WPS_COLUMN_BREAK 0x02
445 #define WPS_LEFT 0x00
446 #define WPS_RIGHT 0x01
447 #define WPS_CENTER 0x02
449 #define WPS_BOTTOM 0x04
477 return (c==0) ?
m_x :
m_y;
483 return (c==0) ?
m_x :
m_y;
564 bool operator<(Vec2<T>
const &p)
const
588 friend std::ostream &operator<< (std::ostream &o, Vec2<T>
const &f)
590 o << f.m_x <<
"x" << f.m_y;
602 return s1.
cmp(s2) < 0;
608 typedef std::map<Vec2<T>, T,
struct PosSizeLtX>
MapX;
618 return s1.
cmpY(s2) < 0;
624 typedef std::map<Vec2<T>, T,
struct PosSizeLtY>
MapY;
651 for (
int c=0; c < 2; c++)
m_pt[c] = p[c];
726 m_pt[0] = ctr - 0.5*sz;
727 m_pt[1] = ctr + (sz - 0.5*sz);
731 template <
class U>
void scale(U factor)
775 bool operator<(Box2<T>
const &p)
const
784 if (diff)
return diff;
786 if (diff)
return diff;
791 friend std::ostream &operator<< (std::ostream &o, Box2<T>
const &f)
793 o <<
"(" << f.m_pt[0] <<
"<->" << f.m_pt[1] <<
")";
805 return s1.
cmp(s2) < 0;
811 typedef std::map<Box2<T>, T,
struct PosSizeLt>
Map;
uint8_t readU8(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:39
Definition: libwps_internal.h:351
Definition: libwps_internal.h:405
shared_ptr< WPSContentListener > WPSContentListenerPtr
shared pointer to WPSContentListener
Definition: libwps_internal.h:106
bool readData(RVNGInputStreamPtr &input, unsigned long size, librevenge::RVNGBinaryData &data)
Definition: libwps_internal.cpp:331
Vec2< float > Vec2f
Vec2 of float.
Definition: libwps_internal.h:634
WPSColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a=255)
constructor from color
Definition: libwps_internal.h:249
void set(Vec2< T > const &x, Vec2< T > const &y)
resets the data to minimum x and maximum y
Definition: libwps_internal.h:696
void setY(T yy)
resets the second element
Definition: libwps_internal.h:498
static WPSColor barycenter(float alpha, WPSColor const &colA, float beta, WPSColor const &colB)
return alpha*colA+beta*colB
Definition: libwps_internal.cpp:385
a border list
Definition: libwps_internal.h:348
Definition: libwps_internal.h:351
Definition: libwps_internal.h:232
Definition: libwps_internal.h:152
T m_x
first element
Definition: libwps_internal.h:626
Definition: libwps_internal.h:353
Definition: libwps_internal.cpp:37
Vec2< T > const & operator[](int c) const
the two extremum points which defined the box
Definition: libwps_internal.h:679
Vec2< T > const & min() const
the minimum 2D point (in x and in y)
Definition: libwps_internal.h:655
shared_ptr< WPSSubDocument > WPSSubDocumentPtr
shared pointer to WPSSubDocument
Definition: libwps_internal.h:110
bool operator!=(Box2< T > const &p) const
comparison operator!=
Definition: libwps_internal.h:770
int cmp(Box2< T > const &p) const
comparison function : fist sorts min by Y,X values then max extremity
Definition: libwps_internal.h:781
Definition: libwps_internal.h:411
friend Vec2< T > operator-(Vec2< T > const &p1, Vec2< T > const &p2)
operator-
Definition: libwps_internal.h:540
Definition: libwps_internal.h:353
int32_t read32(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:84
T & operator[](int c)
operator[]
Definition: libwps_internal.h:480
Definition: libwps_internal.h:354
small class which defines a 2D Box
Definition: libwps_internal.h:639
Definition: libwps_internal.h:355
internal struct used to create sorted map, sorted first min then max
Definition: libwps_internal.h:800
define the font properties
Definition: WPSFont.h:36
bool operator==(WPSColor const &c) const
operator==
Definition: libwps_internal.h:309
void resizeFromMin(Vec2< T > const &sz)
resize the box keeping the minimum
Definition: libwps_internal.h:713
double m_leftGutter
Definition: libwps_internal.h:228
Definition: libwps_internal.h:351
#define WPS_ATTRIBUTE_PRINTF(fmt, arg)
Definition: libwps_internal.h:120
virtual class for content listener
Definition: WPSListener.h:36
internal struct used to create sorted map, sorted by X
Definition: libwps_internal.h:597
static WPSColor black()
return the back color
Definition: libwps_internal.h:260
std::map< Vec2< bool >, bool, struct PosSizeLtY > MapY
Definition: libwps_internal.h:624
int m_width
the border width
Definition: libwps_internal.h:392
static WPSColor white()
return the white color
Definition: libwps_internal.h:265
Definition: libwps_internal.h:407
Definition: libwps_internal.h:354
Vec2< T > & operator+=(Vec2< T > const &p)
operator+=
Definition: libwps_internal.h:511
Definition: libwps_internal.h:405
void set(T xx, T yy)
resets the two elements
Definition: libwps_internal.h:487
Definition: libwps_internal.h:405
void extend(T val)
extends the bdbox by (val, val) keeping the center
Definition: libwps_internal.h:738
Definition: libwps_internal.h:407
Definition: WPSContentListener.h:44
WPSColor & operator=(uint32_t argb)
operator=
Definition: libwps_internal.h:254
bool readDouble4(RVNGInputStreamPtr &input, double &res, bool &isNaN)
read a double store with 4 bytes: mantisse 2.5 bytes, exponent 1.5 bytes
Definition: libwps_internal.cpp:89
uint32_t m_attributes
Definition: libwps_internal.h:237
Definition: libwps_internal.h:407
unsigned char getRed() const
returns the red value
Definition: libwps_internal.h:289
friend std::ostream & operator<<(std::ostream &o, WPSColor const &c)
operator<< in the form #rrggbb
Definition: libwps_internal.cpp:400
Box2< int > Box2i
Box2 of int.
Definition: libwps_internal.h:819
bool isBlack() const
return true if the color is black
Definition: libwps_internal.h:299
bool operator<(WPSColor const &c) const
operator<
Definition: libwps_internal.h:319
bool operator>=(WPSColor const &c) const
operator>=
Definition: libwps_internal.h:334
Vec2< T > & max()
the maximum 2D point (in x and in y)
Definition: libwps_internal.h:670
a structure used to defined the cell position, and a format
Definition: WPSCell.h:251
double m_width
Definition: libwps_internal.h:227
Vec2< T > center() const
the box center
Definition: libwps_internal.h:690
Justification
Definition: libwps_internal.h:408
double m_rightGutter
Definition: libwps_internal.h:229
virtual class to define a sub document
Definition: WPSSubDocument.h:33
bool operator==(Vec2< T > const &p) const
comparison==
Definition: libwps_internal.h:554
Definition: libwps_internal.h:351
Definition: libwps_internal.h:405
bool readDouble10(RVNGInputStreamPtr &input, double &res, bool &isNaN)
read a double store with 10 bytes: mantisse 8 bytes, exponent 2 bytes
Definition: libwps_internal.cpp:223
shared_ptr< WPSHeader > WPSHeaderPtr
shared pointer to WPSHeader
Definition: libwps_internal.h:108
Definition: libwps_internal.h:354
Definition: libwps_internal.h:407
bool operator!=(Vec2< T > const &p) const
comparison!=
Definition: libwps_internal.h:559
T y() const
second element
Definition: libwps_internal.h:469
Vec2(T xx=0, T yy=0)
constructor
Definition: libwps_internal.h:459
Box2< float > Box2f
Box2 of float.
Definition: libwps_internal.h:821
shared_ptr< WPSListener > WPSListenerPtr
shared pointer to WPSListener
Definition: libwps_internal.h:104
void setX(T xx)
resets the first element
Definition: libwps_internal.h:493
Definition: libwps_internal.h:411
std::map< Box2< int >, int, struct PosSizeLt > Map
Definition: libwps_internal.h:811
WPSBorder()
constructor
Definition: libwps_internal.h:358
Definition: libwps_internal.h:354
SubDocumentType
Definition: libwps_internal.h:407
Definition: libwps_internal.h:405
Definition: libwps_internal.h:408
Definition: libwps_internal.h:407
Definition: libwps_internal.h:147
std::vector< double > m_widthsList
the different length used for each line/sep (if defined)
Definition: libwps_internal.h:396
Basic class used to store a spreadsheet sub document.
Definition: WKSSubDocument.h:35
Definition: libwps_internal.h:409
bool isWhite() const
return true if the color is white
Definition: libwps_internal.h:304
shared_ptr< WKSContentListener > WKSContentListenerPtr
shared pointer to WKSContentListener
Definition: libwps_internal.h:113
Vec2< T > const & max() const
the maximum 2D point (in x and in y)
Definition: libwps_internal.h:660
bool operator!=(WPSBorder const &orig) const
operator!=
Definition: libwps_internal.h:376
Definition: libwps_internal.h:407
Definition: libwps_internal.h:137
unsigned char getBlue() const
returns the green value
Definition: libwps_internal.h:284
Box2(Box2< U > const &p)
generic constructor
Definition: libwps_internal.h:649
uint32_t m_value
the argb color
Definition: libwps_internal.h:344
internal struct used to create sorted map, sorted by Y
Definition: libwps_internal.h:613
Vec2< T > m_pt[2]
the two extremities
Definition: libwps_internal.h:815
T x() const
first element
Definition: libwps_internal.h:464
void operator()(T *)
Definition: libwps_internal.h:82
Type
the line repetition
Definition: libwps_internal.h:353
int8_t read8(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:58
void add(T dx, T dy)
increases the actuals values by dx and dy
Definition: libwps_internal.h:504
uint8_t m_alignment
Definition: libwps_internal.h:238
Definition: libwps_internal.h:222
bool operator()(Vec2< T > const &s1, Vec2< T > const &s2) const
comparaison function
Definition: libwps_internal.h:616
bool isEmpty() const
returns true if the border is empty
Definition: libwps_internal.h:364
WPSColumnProperties()
Definition: libwps_internal.h:234
Vec2< T > & operator-=(Vec2< T > const &p)
operator-=
Definition: libwps_internal.h:518
WPSColor m_color
the border color
Definition: libwps_internal.h:398
Vec2< T > & operator*=(U scale)
generic operator*=
Definition: libwps_internal.h:526
NumberingType
Definition: libwps_internal.h:405
uint32_t value() const
return the rgba value
Definition: libwps_internal.h:274
bool operator!=(WPSColor const &c) const
operator!=
Definition: libwps_internal.h:314
Definition: libwps_internal.h:355
int cmpY(Vec2< T > const &p) const
a comparison function: which first compares y then x
Definition: libwps_internal.h:578
bool addTo(librevenge::RVNGPropertyList &propList, std::string which="") const
add the border property to proplist (if needed )
Definition: libwps_internal.cpp:441
std::map< Vec2< bool >, bool, struct PosSizeLtX > MapX
Definition: libwps_internal.h:608
int16_t read16(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:70
shared_ptr< librevenge::RVNGInputStream > RVNGInputStreamPtr
shared pointer to librevenge::RVNGInputStream
Definition: libwps_internal.h:87
bool readDouble4Inv(RVNGInputStreamPtr &input, double &res, bool &isNaN)
read a double store with 4 bytes: exponent 3.5 bytes, mantisse 0.5 bytes
Definition: libwps_internal.cpp:302
Vec2< int > Vec2i
Vec2 of int.
Definition: libwps_internal.h:632
the class to store a color
Definition: libwps_internal.h:242
friend std::ostream & operator<<(std::ostream &o, WPSBorder const &border)
operator<<
Definition: libwps_internal.cpp:543
Definition: libwps_internal.h:351
Pos
Definition: libwps_internal.h:354
Definition: libwps_internal.h:409
Vec2(Vec2< U > const &p)
generic copy constructor
Definition: libwps_internal.h:461
bool operator==(Box2< T > const &p) const
comparison operator==
Definition: libwps_internal.h:765
T operator[](int c) const
operator[]
Definition: libwps_internal.h:474
int compare(WPSBorder const &orig) const
compare two cell
Definition: libwps_internal.cpp:423
unsigned char getGreen() const
returns the green value
Definition: libwps_internal.h:294
void resizeFromMax(Vec2< T > const &sz)
resize the box keeping the maximum
Definition: libwps_internal.h:718
bool operator<=(WPSColor const &c) const
operator<=
Definition: libwps_internal.h:324
uint16_t readU16(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:63
bool readDataToEnd(RVNGInputStreamPtr &input, librevenge::RVNGBinaryData &data)
Definition: libwps_internal.cpp:345
void scale(U factor)
scales all points of the box by factor
Definition: libwps_internal.h:731
std::string numberingTypeToString(NumberingType type)
Definition: libwps_internal.cpp:356
bool operator>(WPSColor const &c) const
operator>
Definition: libwps_internal.h:329
void setMax(Vec2< T > const &y)
resets the maximum point
Definition: libwps_internal.h:707
Box2< T > getUnion(Box2< T > const &box) const
returns the union between this and box
Definition: libwps_internal.h:744
Style
the line style
Definition: libwps_internal.h:351
Definition: libwps_internal.h:353
bool operator==(WPSBorder const &orig) const
operator==
Definition: libwps_internal.h:370
void setMin(Vec2< T > const &x)
resets the minimum point
Definition: libwps_internal.h:702
uint32_t readU32(librevenge::RVNGInputStream *input)
Definition: libwps_internal.cpp:75
Box2(Vec2< T > minPt=Vec2< T >(), Vec2< T > maxPt=Vec2< T >())
constructor
Definition: libwps_internal.h:643
Definition: libwps_internal.h:142
Definition: libwps_internal.h:355
WPSColumnDefinition()
Definition: libwps_internal.h:224
Style m_style
the border style
Definition: libwps_internal.h:388
Definition: libwps_internal.h:408
Definition: libwps_internal.h:405
shared_ptr< WKSSubDocument > WKSSubDocumentPtr
shared pointer to WKSSubDocument
Definition: libwps_internal.h:115
bool readDouble8(RVNGInputStreamPtr &input, double &res, bool &isNaN)
read a double store with 8 bytes: mantisse 6.5 bytes, exponent 1.5 bytes
Definition: libwps_internal.cpp:172
Definition: libwps_internal.h:408
basic class to store an entry in a file This contained :
Definition: WPSEntry.h:37
small class which defines a vector with 2 elements
Definition: libwps_internal.h:455
bool operator()(Vec2< T > const &s1, Vec2< T > const &s2) const
comparaison function
Definition: libwps_internal.h:600
Definition: libwps_internal.h:405
friend Vec2< T > operator*(U scale, Vec2< T > const &p1)
generic operator*
Definition: libwps_internal.h:547
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: WPSPosition.h:39
Vec2< T > size() const
the box size
Definition: libwps_internal.h:685
std::string m_extra
extra data ( if needed)
Definition: libwps_internal.h:400
shared_ptr< WPSCell > WPSCellPtr
shared pointer to WPSCell
Definition: libwps_internal.h:99
bool readDouble2Inv(RVNGInputStreamPtr &input, double &res, bool &isNaN)
read a double store with 2 bytes: exponent 1.5 bytes, kind of mantisse 0.5 bytes
Definition: libwps_internal.cpp:272
Box2< T > getIntersection(Box2< T > const &box) const
returns the intersection between this and box
Definition: libwps_internal.h:754
WPSColor(uint32_t argb=0)
constructor
Definition: libwps_internal.h:245
T m_y
second element
Definition: libwps_internal.h:626
a noop deleter used to transform a librevenge pointer in a false shared_ptr
Definition: libwps_internal.h:80
bool operator()(Box2< T > const &s1, Box2< T > const &s2) const
comparaison function
Definition: libwps_internal.h:803
Type m_type
the border repetition
Definition: libwps_internal.h:390
Definition: WKSContentListener.h:50
int cmp(Vec2< T > const &p) const
a comparison function: which first compares x then y
Definition: libwps_internal.h:569
std::string str() const
print the color in the form #rrggbb
Definition: libwps_internal.cpp:412
Vec2< bool > Vec2b
Vec2 of bool.
Definition: libwps_internal.h:630
Definition: libwps_internal.h:355
unsigned char getAlpha() const
returns the alpha value
Definition: libwps_internal.h:279
void resizeFromCenter(Vec2< T > const &sz)
resize the box keeping the center
Definition: libwps_internal.h:723
Vec2< T > & min()
the minimum 2D point (in x and in y)
Definition: libwps_internal.h:665
friend Vec2< T > operator+(Vec2< T > const &p1, Vec2< T > const &p2)
operator+
Definition: libwps_internal.h:534