libstaroffice_internal.hxx Source File documentation

libstaroffice_internal.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 /* libstaroffice
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 #ifndef LIBSTAROFFICE_INTERNAL_H
35 #define LIBSTAROFFICE_INTERNAL_H
36
37 #include <assert.h>
38 #include <math.h>
39 #ifdef DEBUG
40 #include <stdio.h>
41 #endif
42
43 #include <cmath>
44 #include <limits>
45 #include <map>
46 #include <memory>
47 #include <ostream>
48 #include <string>
49 #include <vector>
50
51 #ifndef M_PI
52 #define M_PI 3.14159265358979323846
53 #endif
54
55 #include <librevenge-stream/librevenge-stream.h>
56 #include <librevenge/librevenge.h>
57
58 #if defined(_MSC_VER) || defined(__DJGPP__)
59
60 typedef signed char int8_t;
61 typedef unsigned char uint8_t;
62 typedef signed short int16_t;
63 typedef unsigned short uint16_t;
64 typedef signed int int32_t;
65 typedef unsigned int uint32_t;
66 typedef unsigned __int64 uint64_t;
67 typedef __int64 int64_t;
68
69 #else /* !_MSC_VER && !__DJGPP__*/
70
71 # ifdef HAVE_CONFIG_H
72
73 # include <config.h>
74 # ifdef HAVE_STDINT_H
75 # include <stdint.h>
76 # endif
77 # ifdef HAVE_INTTYPES_H
78 # include <inttypes.h>
79 # endif
80
81 # else
82
83 // assume that the headers are there inside LibreOffice build when no HAVE_CONFIG_H is defined
84 # include <stdint.h>
85 # include <inttypes.h>
86
87 # endif
88
89 #endif /* _MSC_VER || __DJGPP__ */
90
91 // define gmtime_r and localtime_r on Windows, so that can use
92 // thread-safe functions on other environments
93 #ifdef _WIN32
94 # define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
95 # define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0)
96 #endif
97
99 template <class T>
100 struct STOFF_shared_ptr_noop_deleter {
101 void operator()(T *) {}
102 };
103
105 #if defined(HAVE_CLANG_ATTRIBUTE_FALLTHROUGH)
106 # define STOFF_FALLTHROUGH [[clang::fallthrough]]
107 #elif defined(HAVE_GCC_ATTRIBUTE_FALLTHROUGH)
108 # define STOFF_FALLTHROUGH __attribute__((fallthrough))
109 #else
110 # define STOFF_FALLTHROUGH ((void) 0)
111 #endif
112
113 #if defined(HAVE_FUNC_ATTRIBUTE_FORMAT)
114 # define LIBSTOFF_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg)))
115 #else
116 # define LIBSTOFF_ATTRIBUTE_PRINTF(fmt, arg)
117 #endif
118
119 #define STOFF_N_ELEMENTS(m) sizeof(m)/sizeof(m[0])
120
121 /* ---------- debug --------------- */
122 #ifdef DEBUG
123 namespace libstoff
124 {
125 void printDebugMsg(const char *format, ...) LIBSTOFF_ATTRIBUTE_PRINTF(1,2);
126 }
127 #define STOFF_DEBUG_MSG(M) libstoff::printDebugMsg M
128 #else
129 #define STOFF_DEBUG_MSG(M)
130 #endif
131
132 namespace libstoff
133 {
134 // Various exceptions:
135 class VersionException
136 {
137 };
138
139 class FileException
140 {
141 };
142
143 class ParseException
144 {
145 };
146
147 class GenericException
148 {
149 };
150
151 class WrongPasswordException
152 {
153 };
154 }
155
156 /* ---------- input ----------------- */
157 namespace libstoff
158 {
159 uint8_t readU8(librevenge::RVNGInputStream *input);
161 void appendUnicode(uint32_t val, librevenge::RVNGString &buffer);
163 librevenge::RVNGString getString(std::vector<uint32_t> const &unicode);
164
166 template<typename T>
167 bool checkAddOverflow(T x, T y)
168 {
169 return (x < 0 && y < std::numeric_limits<T>::min() - x)
170 || (x > 0 && y > std::numeric_limits<T>::max() - x);
171 }
172 }
173
174 /* ---------- small enum/class ------------- */
175 namespace libstoff
176 {
178 enum Position { Left = 0, Right = 1, Top = 2, Bottom = 3, HMiddle = 4, VMiddle = 5 };
180 enum { LeftBit = 0x01, RightBit = 0x02, TopBit=0x4, BottomBit = 0x08, HMiddleBit = 0x10, VMiddleBit = 0x20 };
181
182 enum NumberingType { NONE, BULLET, ARABIC, LOWERCASE, UPPERCASE, LOWERCASE_ROMAN, UPPERCASE_ROMAN };
183 std::string numberingTypeToString(NumberingType type);
184 std::string numberingValueToString(NumberingType type, int value);
185 enum SubDocumentType { DOC_NONE, DOC_CHART, DOC_CHART_ZONE, DOC_COMMENT_ANNOTATION, DOC_GRAPHIC_GROUP, DOC_HEADER_FOOTER_REGION, DOC_NOTE, DOC_SHEET, DOC_TABLE, DOC_TEXT_BOX };
186 }
187
189 struct STOFFColor {
191 explicit STOFFColor(uint32_t argb=0) : m_value(argb)
192 {
193 }
195 STOFFColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a=255) :
196 m_value(uint32_t((a<<24)+(r<<16)+(g<<8)+b))
197 {
198 }
200 STOFFColor &operator=(uint32_t argb)
201 {
202 m_value = argb;
203 return *this;
204 }
206 static STOFFColor colorFromCMYK(unsigned char c, unsigned char m, unsigned char y, unsigned char k)
207 {
208 double w=1.-double(k)/255.;
209 return STOFFColor
210 (static_cast<unsigned char>(255 * (1-double(c)/255) * w),
211 static_cast<unsigned char>(255 * (1-double(m)/255) * w),
212 static_cast<unsigned char>(255 * (1-double(y)/255) * w)
213 );
214 }
216 static STOFFColor colorFromHSL(unsigned char H, unsigned char S, unsigned char L)
217 {
218 double c=(1-((L>=128) ? (2*double(L)-255) : (255-2*double(L)))/255)*
219 double(S)/255;
220 double tmp=std::fmod((double(H)*6/255),2)-1;
221 double x=c*(1-(tmp>0 ? tmp : -tmp));
222 unsigned char C=static_cast<unsigned char>(255*c);
223 unsigned char M=static_cast<unsigned char>(double(L)-255*c/2);
224 unsigned char X=static_cast<unsigned char>(255*x);
225 if (H<=42) return STOFFColor(static_cast<unsigned char>(M+C),static_cast<unsigned char>(M+X),static_cast<unsigned char>(M));
226 if (H<=85) return STOFFColor(static_cast<unsigned char>(M+X),static_cast<unsigned char>(M+C),static_cast<unsigned char>(M));
227 if (H<=127) return STOFFColor(static_cast<unsigned char>(M),static_cast<unsigned char>(M+C),static_cast<unsigned char>(M+X));
228 if (H<=170) return STOFFColor(static_cast<unsigned char>(M),static_cast<unsigned char>(M+X),static_cast<unsigned char>(M+C));
229 if (H<=212) return STOFFColor(static_cast<unsigned char>(M+X),static_cast<unsigned char>(M),static_cast<unsigned char>(M+C));
230 return STOFFColor(static_cast<unsigned char>(M+C),static_cast<unsigned char>(M),static_cast<unsigned char>(M+X));
231 }
233 static STOFFColor black()
234 {
235 return STOFFColor(0,0,0);
236 }
238 static STOFFColor white()
239 {
240 return STOFFColor(255,255,255);
241 }
242
244 static STOFFColor barycenter(float alpha, STOFFColor const &colA,
245 float beta, STOFFColor const &colB);
247 uint32_t value() const
248 {
249 return m_value;
250 }
252 unsigned char getAlpha() const
253 {
254 return static_cast<unsigned char>((m_value>>24)&0xFF);
255 }
257 void setAlpha(unsigned char alpha)
258 {
259 m_value=(m_value&0xFFFFFF)|uint32_t(alpha<<24);
260 }
262 unsigned char getBlue() const
263 {
264 return static_cast<unsigned char>(m_value&0xFF);
265 }
267 unsigned char getRed() const
268 {
269 return static_cast<unsigned char>((m_value>>16)&0xFF);
270 }
272 unsigned char getGreen() const
273 {
274 return static_cast<unsigned char>((m_value>>8)&0xFF);
275 }
277 bool isBlack() const
278 {
279 return (m_value&0xFFFFFF)==0;
280 }
282 bool isWhite() const
283 {
284 return (m_value&0xFFFFFF)==0xFFFFFF;
285 }
287 bool operator==(STOFFColor const &c) const
288 {
289 return (c.m_value&0xFFFFFF)==(m_value&0xFFFFFF);
290 }
292 bool operator!=(STOFFColor const &c) const
293 {
294 return !operator==(c);
295 }
297 bool operator<(STOFFColor const &c) const
298 {
299 return (c.m_value&0xFFFFFF)<(m_value&0xFFFFFF);
300 }
302 bool operator<=(STOFFColor const &c) const
303 {
304 return (c.m_value&0xFFFFFF)<=(m_value&0xFFFFFF);
305 }
307 bool operator>(STOFFColor const &c) const
308 {
309 return !operator<=(c);
310 }
312 bool operator>=(STOFFColor const &c) const
313 {
314 return !operator<(c);
315 }
317 friend std::ostream &operator<< (std::ostream &o, STOFFColor const &c);
319 std::string str() const;
320 protected:
322 uint32_t m_value;
323 };
324
326 struct STOFFBorderLine {
328 STOFFBorderLine() : m_outWidth(0), m_inWidth(0), m_color(STOFFColor::black()), m_distance(0) { }
332 bool addTo(librevenge::RVNGPropertyList &propList, std::string which="") const;
334 bool isEmpty() const
335 {
336 return m_outWidth==0 && m_inWidth==0;
337 }
339 bool operator==(STOFFBorderLine const &orig) const
340 {
341 return !operator!=(orig);
342 }
344 bool operator!=(STOFFBorderLine const &orig) const
345 {
346 return m_outWidth != orig.m_outWidth || m_inWidth != orig.m_inWidth ||
347 m_distance != orig.m_distance || m_color != orig.m_color;
348 }
349
351 friend std::ostream &operator<< (std::ostream &o, STOFFBorderLine const &border);
353 int m_outWidth;
355 int m_inWidth;
357 STOFFColor m_color;
359 int m_distance;
360 };
361
363 struct STOFFField {
365 STOFFField() : m_propertyList()
366 {
367 }
369 void addTo(librevenge::RVNGPropertyList &propList) const;
371 librevenge::RVNGPropertyList m_propertyList;
372 };
373
375 struct STOFFLink {
377 STOFFLink() : m_HRef("")
378 {
379 }
380
382 bool addTo(librevenge::RVNGPropertyList &propList) const;
383
385 std::string m_HRef;
386 };
387
389 struct STOFFNote {
391 enum Type { FootNote, EndNote };
393 explicit STOFFNote(Type type) : m_type(type), m_label(""), m_number(-1)
394 {
395 }
397 Type m_type;
399 librevenge::RVNGString m_label;
401 int m_number;
402 };
403
408 struct STOFFEmbeddedObject {
410 STOFFEmbeddedObject() : m_dataList(), m_typeList(), m_filenameLink("")
411 {
412 }
414 STOFFEmbeddedObject(librevenge::RVNGBinaryData const &binaryData,
415 std::string type="image/pict") : m_dataList(), m_typeList(), m_filenameLink("")
416 {
417 add(binaryData, type);
418 }
420 ~STOFFEmbeddedObject();
422 bool isEmpty() const
423 {
424 if (!m_filenameLink.empty())
425 return false;
426 for (const auto &i : m_dataList) {
427 if (!i.empty())
428 return false;
429 }
430 return true;
431 }
433 void add(librevenge::RVNGBinaryData const &binaryData, std::string type="image/pict")
434 {
435 size_t pos=m_dataList.size();
436 if (pos<m_typeList.size()) pos=m_typeList.size();
437 m_dataList.resize(pos+1);
438 m_dataList[pos]=binaryData;
439 m_typeList.resize(pos+1);
440 m_typeList[pos]=type;
441 }
443 bool addTo(librevenge::RVNGPropertyList &propList) const;
445 bool addAsFillImageTo(librevenge::RVNGPropertyList &propList) const;
447 friend std::ostream &operator<<(std::ostream &o, STOFFEmbeddedObject const &pict);
449 int cmp(STOFFEmbeddedObject const &pict) const;
450
452 std::vector<librevenge::RVNGBinaryData> m_dataList;
454 std::vector<std::string> m_typeList;
456 librevenge::RVNGString m_filenameLink;
457 };
458
459 // forward declarations of basic classes and smart pointers
460 class STOFFFont;
461 class STOFFGraphicShape;
462 class STOFFGraphicStyle;
463 class STOFFList;
464 class STOFFParagraph;
465 class STOFFSection;
466 class STOFFPageSpan;
467
468 class STOFFEntry;
469 class STOFFHeader;
470 class STOFFParser;
471 class STOFFPosition;
472
473 class STOFFGraphicListener;
474 class STOFFInputStream;
475 class STOFFListener;
476 class STOFFListManager;
477 class STOFFParserState;
478 class STOFFSpreadsheetListener;
479 class STOFFSubDocument;
480 class STOFFTextListener;
482 typedef std::shared_ptr<STOFFGraphicListener> STOFFGraphicListenerPtr;
484 typedef std::shared_ptr<STOFFInputStream> STOFFInputStreamPtr;
486 typedef std::shared_ptr<STOFFListener> STOFFListenerPtr;
488 typedef std::shared_ptr<STOFFListManager> STOFFListManagerPtr;
490 typedef std::shared_ptr<STOFFParserState> STOFFParserStatePtr;
492 typedef std::shared_ptr<STOFFSpreadsheetListener> STOFFSpreadsheetListenerPtr;
494 typedef std::shared_ptr<STOFFSubDocument> STOFFSubDocumentPtr;
496 typedef std::shared_ptr<STOFFTextListener> STOFFTextListenerPtr;
497
504 template <class T> struct STOFFVariable {
506 STOFFVariable() : m_data(), m_set(false) {}
508 explicit STOFFVariable(T const &def) : m_data(def), m_set(false) {}
510 STOFFVariable(STOFFVariable const &orig) : m_data(orig.m_data), m_set(orig.m_set) {}
512 STOFFVariable &operator=(STOFFVariable const &orig)
513 {
514 if (this != &orig) {
515 m_data = orig.m_data;
516 m_set = orig.m_set;
517 }
518 return *this;
519 }
521 STOFFVariable &operator=(T const &val)
522 {
523 m_data = val;
524 m_set = true;
525 return *this;
526 }
528 void insert(STOFFVariable const &orig)
529 {
530 if (orig.m_set) {
531 m_data = orig.m_data;
532 m_set = orig.m_set;
533 }
534 }
536 T const *operator->() const
537 {
538 return &m_data;
539 }
541 T *operator->()
542 {
543 m_set = true;
544 return &m_data;
545 }
547 T const &operator*() const
548 {
549 return m_data;
550 }
552 T &operator*()
553 {
554 m_set = true;
555 return m_data;
556 }
558 T const &get() const
559 {
560 return m_data;
561 }
563 bool isSet() const
564 {
565 return m_set;
566 }
568 void setSet(bool newVal)
569 {
570 m_set=newVal;
571 }
572 protected:
574 T m_data;
576 bool m_set;
577 };
578
579 /* ---------- vec2/box2f ------------- */
583 template <class T> class STOFFVec2
584 {
585 public:
587 STOFFVec2(T xx=0,T yy=0) : m_x(xx), m_y(yy) { }
589 template <class U> STOFFVec2(STOFFVec2<U> const &p) : m_x(T(p.x())), m_y(T(p.y())) {}
590
592 T x() const
593 {
594 return m_x;
595 }
597 T y() const
598 {
599 return m_y;
600 }
602 T operator[](int c) const
603 {
604 if (c<0 || c>1) throw libstoff::GenericException();
605 return (c==0) ? m_x : m_y;
606 }
608 T &operator[](int c)
609 {
610 if (c<0 || c>1) throw libstoff::GenericException();
611 return (c==0) ? m_x : m_y;
612 }
613
615 void set(T xx, T yy)
616 {
617 m_x = xx;
618 m_y = yy;
619 }
621 void setX(T xx)
622 {
623 m_x = xx;
624 }
626 void setY(T yy)
627 {
628 m_y = yy;
629 }
630
632 void add(T dx, T dy)
633 {
634 if (libstoff::checkAddOverflow(m_x, dx) || libstoff::checkAddOverflow(m_y, dy))
635 throw libstoff::GenericException();
636 m_x += dx;
637 m_y += dy;
638 }
639
641 STOFFVec2<T> &operator+=(STOFFVec2<T> const &p)
642 {
643 add(p.m_x, p.m_y);
644 return *this;
645 }
647 STOFFVec2<T> &operator-=(STOFFVec2<T> const &p)
648 {
649 // check if negation of either of the coords will cause overflow
650 const T diff = std::numeric_limits<T>::min() + std::numeric_limits<T>::max();
651 if (libstoff::checkAddOverflow(p.m_x, diff) || libstoff::checkAddOverflow(p.m_y, diff))
652 throw libstoff::GenericException();
653 add(-p.m_x, -p.m_y);
654 return *this;
655 }
657 template <class U>
658 STOFFVec2<T> &operator*=(U scale)
659 {
660 m_x = T(m_x*scale);
661 m_y = T(m_y*scale);
662 return *this;
663 }
664
666 friend STOFFVec2<T> operator+(STOFFVec2<T> const &p1, STOFFVec2<T> const &p2)
667 {
668 STOFFVec2<T> p(p1);
669 return p+=p2;
670 }
672 friend STOFFVec2<T> operator-(STOFFVec2<T> const &p1, STOFFVec2<T> const &p2)
673 {
674 STOFFVec2<T> p(p1);
675 return p-=p2;
676 }
678 template <class U>
679 friend STOFFVec2<T> operator*(U scale, STOFFVec2<T> const &p1)
680 {
681 STOFFVec2<T> p(p1);
682 return p *= scale;
683 }
684
686 bool operator==(STOFFVec2<T> const &p) const
687 {
688 return cmpY(p) == 0;
689 }
691 bool operator!=(STOFFVec2<T> const &p) const
692 {
693 return cmpY(p) != 0;
694 }
696 bool operator<(STOFFVec2<T> const &p) const
697 {
698 return cmpY(p) < 0;
699 }
701 int cmp(STOFFVec2<T> const &p) const
702 {
703 if (m_x < p.m_x) return -1;
704 if (m_x > p.m_x) return 1;
705 if (m_y < p.m_y) return -1;
706 if (m_y > p.m_y) return 1;
707 return 0;
708 }
710 int cmpY(STOFFVec2<T> const &p) const
711 {
712 if (m_y < p.m_y) return -1;
713 if (m_y > p.m_y) return 1;
714 if (m_x < p.m_x) return -1;
715 if (m_x > p.m_x) return 1;
716 return 0;
717 }
718
720 friend std::ostream &operator<< (std::ostream &o, STOFFVec2<T> const &f)
721 {
722 o << f.m_x << "x" << f.m_y;
723 return o;
724 }
725
729 struct PosSizeLtX {
731 bool operator()(STOFFVec2<T> const &s1, STOFFVec2<T> const &s2) const
732 {
733 return s1.cmp(s2) < 0;
734 }
735 };
739 typedef std::map<STOFFVec2<T>, T,struct PosSizeLtX> MapX;
740
744 struct PosSizeLtY {
746 bool operator()(STOFFVec2<T> const &s1, STOFFVec2<T> const &s2) const
747 {
748 return s1.cmpY(s2) < 0;
749 }
750 };
754 typedef std::map<STOFFVec2<T>, T,struct PosSizeLtY> MapY;
755 protected:
756 T m_x, m_y;
757 };
758
760 typedef STOFFVec2<bool> STOFFVec2b;
762 typedef STOFFVec2<int> STOFFVec2i;
764 typedef STOFFVec2<long> STOFFVec2l;
766 typedef STOFFVec2<float> STOFFVec2f;
767
771 template <class T> class STOFFVec3
772 {
773 public:
775 STOFFVec3(T xx=0,T yy=0,T zz=0)
776 {
777 m_val[0] = xx;
778 m_val[1] = yy;
779 m_val[2] = zz;
780 }
782 template <class U> STOFFVec3(STOFFVec3<U> const &p)
783 {
784 for (int c = 0; c < 3; c++) m_val[c] = T(p[c]);
785 }
786
788 T x() const
789 {
790 return m_val[0];
791 }
793 T y() const
794 {
795 return m_val[1];
796 }
798 T z() const
799 {
800 return m_val[2];
801 }
803 T operator[](int c) const
804 {
805 if (c<0 || c>2) throw libstoff::GenericException();
806 return m_val[c];
807 }
809 T &operator[](int c)
810 {
811 if (c<0 || c>2) throw libstoff::GenericException();
812 return m_val[c];
813 }
814
816 void set(T xx, T yy, T zz)
817 {
818 m_val[0] = xx;
819 m_val[1] = yy;
820 m_val[2] = zz;
821 }
823 void setX(T xx)
824 {
825 m_val[0] = xx;
826 }
828 void setY(T yy)
829 {
830 m_val[1] = yy;
831 }
833 void setZ(T zz)
834 {
835 m_val[2] = zz;
836 }
837
839 void add(T dx, T dy, T dz)
840 {
841 m_val[0] += dx;
842 m_val[1] += dy;
843 m_val[2] += dz;
844 }
845
847 STOFFVec3<T> &operator+=(STOFFVec3<T> const &p)
848 {
849 for (int c = 0; c < 3; c++) m_val[c] = T(m_val[c]+p.m_val[c]);
850 return *this;
851 }
853 STOFFVec3<T> &operator-=(STOFFVec3<T> const &p)
854 {
855 for (int c = 0; c < 3; c++) m_val[c] = T(m_val[c]-p.m_val[c]);
856 return *this;
857 }
859 template <class U>
860 STOFFVec3<T> &operator*=(U scale)
861 {
862 for (auto &c : m_val) c = T(c*scale);
863 return *this;
864 }
865
867 friend STOFFVec3<T> operator+(STOFFVec3<T> const &p1, STOFFVec3<T> const &p2)
868 {
869 STOFFVec3<T> p(p1);
870 return p+=p2;
871 }
873 friend STOFFVec3<T> operator-(STOFFVec3<T> const &p1, STOFFVec3<T> const &p2)
874 {
875 STOFFVec3<T> p(p1);
876 return p-=p2;
877 }
879 template <class U>
880 friend STOFFVec3<T> operator*(U scale, STOFFVec3<T> const &p1)
881 {
882 STOFFVec3<T> p(p1);
883 return p *= scale;
884 }
885
887 bool operator==(STOFFVec3<T> const &p) const
888 {
889 return cmp(p) == 0;
890 }
892 bool operator!=(STOFFVec3<T> const &p) const
893 {
894 return cmp(p) != 0;
895 }
897 bool operator<(STOFFVec3<T> const &p) const
898 {
899 return cmp(p) < 0;
900 }
902 int cmp(STOFFVec3<T> const &p) const
903 {
904 for (int c = 0; c < 3; c++) {
905 if (m_val[c]<p.m_val[c]) return -1;
906 if (m_val[c]>p.m_val[c]) return 1;
907 }
908 return 0;
909 }
910
912 friend std::ostream &operator<< (std::ostream &o, STOFFVec3<T> const &f)
913 {
914 o << f.m_val[0] << "x" << f.m_val[1] << "x" << f.m_val[2];
915 return o;
916 }
917
921 struct PosSizeLt {
923 bool operator()(STOFFVec3<T> const &s1, STOFFVec3<T> const &s2) const
924 {
925 return s1.cmp(s2) < 0;
926 }
927 };
931 typedef std::map<STOFFVec3<T>, T,struct PosSizeLt> Map;
932
933 protected:
935 T m_val[3];
936 };
937
939 typedef STOFFVec3<bool> STOFFVec3b;
941 typedef STOFFVec3<unsigned char> STOFFVec3uc;
943 typedef STOFFVec3<int> STOFFVec3i;
945 typedef STOFFVec3<float> STOFFVec3f;
946
950 template <class T> class STOFFBox2
951 {
952 public:
954 STOFFBox2(STOFFVec2<T> minPt=STOFFVec2<T>(), STOFFVec2<T> maxPt=STOFFVec2<T>())
955 {
956 m_pt[0] = minPt;
957 m_pt[1] = maxPt;
958 }
960 template <class U> STOFFBox2(STOFFBox2<U> const &p)
961 {
962 for (int c=0; c < 2; c++) m_pt[c] = p[c];
963 }
964
966 STOFFVec2<T> const &min() const
967 {
968 return m_pt[0];
969 }
971 STOFFVec2<T> const &max() const
972 {
973 return m_pt[1];
974 }
976 STOFFVec2<T> &min()
977 {
978 return m_pt[0];
979 }
981 STOFFVec2<T> &max()
982 {
983 return m_pt[1];
984 }
988 STOFFVec2<T> const &operator[](int c) const
989 {
990 if (c<0 || c>1) throw libstoff::GenericException();
991 return m_pt[c];
992 }
994 STOFFVec2<T> size() const
995 {
996 return m_pt[1]-m_pt[0];
997 }
999 STOFFVec2<T> center() const
1000 {
1001 return STOFFVec2<T>((m_pt[0].x()+m_pt[1].x())/2,
1002 (m_pt[0].y()+m_pt[1].y())/2);
1003 }
1004
1006 void set(STOFFVec2<T> const &x, STOFFVec2<T> const &y)
1007 {
1008 m_pt[0] = x;
1009 m_pt[1] = y;
1010 }
1012 void setMin(STOFFVec2<T> const &x)
1013 {
1014 m_pt[0] = x;
1015 }
1017 void setMax(STOFFVec2<T> const &y)
1018 {
1019 m_pt[1] = y;
1020 }
1021
1023 void resizeFromMin(STOFFVec2<T> const &sz)
1024 {
1025 m_pt[1] = m_pt[0]+sz;
1026 }
1028 void resizeFromMax(STOFFVec2<T> const &sz)
1029 {
1030 m_pt[0] = m_pt[1]-sz;
1031 }
1033 void resizeFromCenter(STOFFVec2<T> const &sz)
1034 {
1035 STOFFVec2<T> centerPt = 0.5*(m_pt[0]+m_pt[1]);
1036 m_pt[0] = centerPt - 0.5*sz;
1037 m_pt[1] = centerPt + (sz - 0.5*sz);
1038 }
1039
1041 template <class U> void scale(U factor)
1042 {
1043 m_pt[0] *= factor;
1044 m_pt[1] *= factor;
1045 }
1046
1048 void extend(T val)
1049 {
1050 m_pt[0] -= STOFFVec2<T>(val/2,val/2);
1051 m_pt[1] += STOFFVec2<T>(val-(val/2),val-(val/2));
1052 }
1053
1055 STOFFBox2<T> getUnion(STOFFBox2<T> const &box) const
1056 {
1057 STOFFBox2<T> res;
1058 res.m_pt[0]=STOFFVec2<T>(m_pt[0][0]<box.m_pt[0][0]?m_pt[0][0] : box.m_pt[0][0],
1059 m_pt[0][1]<box.m_pt[0][1]?m_pt[0][1] : box.m_pt[0][1]);
1060 res.m_pt[1]=STOFFVec2<T>(m_pt[1][0]>box.m_pt[1][0]?m_pt[1][0] : box.m_pt[1][0],
1061 m_pt[1][1]>box.m_pt[1][1]?m_pt[1][1] : box.m_pt[1][1]);
1062 return res;
1063 }
1065 STOFFBox2<T> getIntersection(STOFFBox2<T> const &box) const
1066 {
1067 STOFFBox2<T> res;
1068 res.m_pt[0]=STOFFVec2<T>(m_pt[0][0]>box.m_pt[0][0]?m_pt[0][0] : box.m_pt[0][0],
1069 m_pt[0][1]>box.m_pt[0][1]?m_pt[0][1] : box.m_pt[0][1]);
1070 res.m_pt[1]=STOFFVec2<T>(m_pt[1][0]<box.m_pt[1][0]?m_pt[1][0] : box.m_pt[1][0],
1071 m_pt[1][1]<box.m_pt[1][1]?m_pt[1][1] : box.m_pt[1][1]);
1072 return res;
1073 }
1075 bool operator==(STOFFBox2<T> const &p) const
1076 {
1077 return cmp(p) == 0;
1078 }
1080 bool operator!=(STOFFBox2<T> const &p) const
1081 {
1082 return cmp(p) != 0;
1083 }
1085 bool operator<(STOFFBox2<T> const &p) const
1086 {
1087 return cmp(p) < 0;
1088 }
1089
1091 int cmp(STOFFBox2<T> const &p) const
1092 {
1093 int diff = m_pt[0].cmpY(p.m_pt[0]);
1094 if (diff) return diff;
1095 diff = m_pt[1].cmpY(p.m_pt[1]);
1096 if (diff) return diff;
1097 return 0;
1098 }
1099
1101 friend std::ostream &operator<< (std::ostream &o, STOFFBox2<T> const &f)
1102 {
1103 o << "(" << f.m_pt[0] << "<->" << f.m_pt[1] << ")";
1104 return o;
1105 }
1106
1110 struct PosSizeLt {
1112 bool operator()(STOFFBox2<T> const &s1, STOFFBox2<T> const &s2) const
1113 {
1114 return s1.cmp(s2) < 0;
1115 }
1116 };
1120 typedef std::map<STOFFBox2<T>, T,struct PosSizeLt> Map;
1121
1122 protected:
1124 STOFFVec2<T> m_pt[2];
1125 };
1126
1128 typedef STOFFBox2<int> STOFFBox2i;
1130 typedef STOFFBox2<float> STOFFBox2f;
1132 typedef STOFFBox2<long> STOFFBox2l;
1133
1134 namespace libstoff
1135 {
1136 // some conversion function
1138 template <class T>
1139 double convertMiniMToPoint(T const &value)
1140 {
1141 return 0.028346457*double(value);
1142 }
1144 template <class T>
1145 STOFFVec2f convertMiniMToPointVect(T const &value)
1146 {
1147 return 0.028346457f*STOFFVec2f(value);
1148 }
1150 bool convertToDateTime(uint32_t date, uint32_t time, std::string &dateTime);
1152 void splitString(librevenge::RVNGString const &string, librevenge::RVNGString const &delim,
1153 librevenge::RVNGString &string1, librevenge::RVNGString &string2);
1157 librevenge::RVNGString simplifyString(librevenge::RVNGString const &s);
1158 // some geometrical function
1160 float getScaleFactor(librevenge::RVNGUnit orig, librevenge::RVNGUnit dest);
1162 STOFFVec2f rotatePointAroundCenter(STOFFVec2f const &point, STOFFVec2f const &center, float angle);
1164 STOFFBox2f rotateBoxFromCenter(STOFFBox2f const &box, float angle);
1165 }
1166 #endif /* LIBSTAROFFICE_INTERNAL_H */
1167 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
libstoff::Right
Definition: libstaroffice_internal.hxx:178
STOFFVec3f
STOFFVec3< float > STOFFVec3f
STOFFVec3 of float.
Definition: libstaroffice_internal.hxx:945
STOFFEmbeddedObject::m_typeList
std::vector< std::string > m_typeList
the picture type: one type by representation
Definition: libstaroffice_internal.hxx:454
STOFFVec2::operator*
friend STOFFVec2< T > operator*(U scale, STOFFVec2< T > const &p1)
generic operator*
Definition: libstaroffice_internal.hxx:679
STOFFVec2::x
T x() const
first element
Definition: libstaroffice_internal.hxx:592
STOFFBox2::extend
void extend(T val)
extends the bdbox by (val, val) keeping the center
Definition: libstaroffice_internal.hxx:1048
STOFF_shared_ptr_noop_deleter
an noop deleter used to transform a libwpd pointer in a false std::shared_ptr
Definition: libstaroffice_internal.hxx:100
STOFFColor::operator<<
friend std::ostream & operator<<(std::ostream &o, STOFFColor const &c)
operator<< in the form #rrggbb
Definition: libstaroffice_internal.cxx:214
STOFFEmbeddedObject::isEmpty
bool isEmpty() const
return true if the picture contains no data
Definition: libstaroffice_internal.hxx:422
STOFFVec3::setZ
void setZ(T zz)
resets the third element
Definition: libstaroffice_internal.hxx:833
STOFFNote::m_type
Type m_type
the note type
Definition: libstaroffice_internal.hxx:397
STOFFVec3< bool >::Map
std::map< STOFFVec3< bool >, bool, struct PosSizeLt > Map
map of STOFFVec3
Definition: libstaroffice_internal.hxx:931
STOFFVec3::operator+=
STOFFVec3< T > & operator+=(STOFFVec3< T > const &p)
operator+=
Definition: libstaroffice_internal.hxx:847
libstoff::LeftBit
Definition: libstaroffice_internal.hxx:180
STOFFVec2::PosSizeLtX
internal struct used to create sorted map, sorted by X
Definition: libstaroffice_internal.hxx:729
STOFFEmbeddedObject::addTo
bool addTo(librevenge::RVNGPropertyList &propList) const
add the link property to proplist
Definition: libstaroffice_internal.cxx:309
libstoff::Top
Definition: libstaroffice_internal.hxx:178
STOFFColor::black
static STOFFColor black()
return the back color
Definition: libstaroffice_internal.hxx:233
STOFFBox2::getIntersection
STOFFBox2< T > getIntersection(STOFFBox2< T > const &box) const
returns the intersection between this and box
Definition: libstaroffice_internal.hxx:1065
STOFFColor::value
uint32_t value() const
return the rgba value
Definition: libstaroffice_internal.hxx:247
STOFFHeader
a function used by STOFFDocument to store the version of document
Definition: STOFFHeader.hxx:56
STOFFVec2::setX
void setX(T xx)
resets the first element
Definition: libstaroffice_internal.hxx:621
STOFFVec2::operator+
friend STOFFVec2< T > operator+(STOFFVec2< T > const &p1, STOFFVec2< T > const &p2)
operator+
Definition: libstaroffice_internal.hxx:666
STOFFVec2::operator[]
T & operator[](int c)
operator[]
Definition: libstaroffice_internal.hxx:608
STOFFVec2l
STOFFVec2< long > STOFFVec2l
STOFFVec2 of long.
Definition: libstaroffice_internal.hxx:764
libstoff::rotatePointAroundCenter
STOFFVec2f rotatePointAroundCenter(STOFFVec2f const &point, STOFFVec2f const &center, float angle)
rotate a point around center, angle is given in degree
Definition: libstaroffice_internal.cxx:456
STOFFBorderLine
a border line
Definition: libstaroffice_internal.hxx:326
STOFFVec2::operator-
friend STOFFVec2< T > operator-(STOFFVec2< T > const &p1, STOFFVec2< T > const &p2)
operator-
Definition: libstaroffice_internal.hxx:672
STOFFBorderLine::STOFFBorderLine
STOFFBorderLine()
constructor
Definition: libstaroffice_internal.hxx:328
libstoff::BULLET
Definition: libstaroffice_internal.hxx:182
libstoff::RightBit
Definition: libstaroffice_internal.hxx:180
STOFFBox2::max
STOFFVec2< T > & max()
the maximum 2D point (in x and in y)
Definition: libstaroffice_internal.hxx:981
libstoff::ParseException
Definition: libstaroffice_internal.hxx:143
STOFFEmbeddedObject::m_filenameLink
librevenge::RVNGString m_filenameLink
a picture link
Definition: libstaroffice_internal.hxx:456
STOFFVec3::x
T x() const
first element
Definition: libstaroffice_internal.hxx:788
libstoff::numberingValueToString
std::string numberingValueToString(NumberingType type, int value)
Definition: libstaroffice_internal.cxx:146
libstoff::convertMiniMToPointVect
STOFFVec2f convertMiniMToPointVect(T const &value)
convert 1/100th millimeter vector to point
Definition: libstaroffice_internal.hxx:1145
STOFFVariable::insert
void insert(STOFFVariable const &orig)
update the current value if orig is set
Definition: libstaroffice_internal.hxx:528
libstoff::VMiddleBit
Definition: libstaroffice_internal.hxx:180
STOFFVec2::operator[]
T operator[](int c) const
operator[]
Definition: libstaroffice_internal.hxx:602
libstoff::DOC_HEADER_FOOTER_REGION
Definition: libstaroffice_internal.hxx:185
STOFFVariable
a generic variable template: value + flag to know if the variable is set
Definition: libstaroffice_internal.hxx:504
libstoff::convertMiniMToPoint
double convertMiniMToPoint(T const &value)
convert 1/100th millimeter to point
Definition: libstaroffice_internal.hxx:1139
libstoff::ARABIC
Definition: libstaroffice_internal.hxx:182
STOFFTextListenerPtr
std::shared_ptr< STOFFTextListener > STOFFTextListenerPtr
a smart pointer of STOFFTextListener
Definition: libstaroffice_internal.hxx:496
STOFFBorderLine::isEmpty
bool isEmpty() const
returns true if the border is empty
Definition: libstaroffice_internal.hxx:334
STOFFBox2
small class which defines a 2D Box
Definition: libstaroffice_internal.hxx:950
STOFFVec2< bool >::MapX
std::map< STOFFVec2< bool >, bool, struct PosSizeLtX > MapX
map of STOFFVec2
Definition: libstaroffice_internal.hxx:739
STOFFVec2
small class which defines a vector with 2 elements
Definition: libstaroffice_internal.hxx:583
STOFFVec3b
STOFFVec3< bool > STOFFVec3b
STOFFVec3 of bool.
Definition: libstaroffice_internal.hxx:939
STOFFBox2::operator==
bool operator==(STOFFBox2< T > const &p) const
comparison operator==
Definition: libstaroffice_internal.hxx:1075
STOFFBox2::cmp
int cmp(STOFFBox2< T > const &p) const
comparison function : fist sorts min by Y,X values then max extremity
Definition: libstaroffice_internal.hxx:1091
libstoff::Bottom
Definition: libstaroffice_internal.hxx:178
STOFFVec3::z
T z() const
third element
Definition: libstaroffice_internal.hxx:798
STOFFBorderLine::m_outWidth
int m_outWidth
the outline width in TWIP
Definition: libstaroffice_internal.hxx:353
STOFFBox2::resizeFromCenter
void resizeFromCenter(STOFFVec2< T > const &sz)
resize the box keeping the center
Definition: libstaroffice_internal.hxx:1033
STOFFBox2::m_pt
STOFFVec2< T > m_pt[2]
the two extremities
Definition: libstaroffice_internal.hxx:1124
STOFFVec2::m_x
T m_x
first element
Definition: libstaroffice_internal.hxx:756
STOFFBox2::PosSizeLt::operator()
bool operator()(STOFFBox2< T > const &s1, STOFFBox2< T > const &s2) const
comparaison function
Definition: libstaroffice_internal.hxx:1112
STOFFColor::barycenter
static STOFFColor barycenter(float alpha, STOFFColor const &colA, float beta, STOFFColor const &colB)
return alpha*colA+beta*colB
Definition: libstaroffice_internal.cxx:200
STOFFBox2::size
STOFFVec2< T > size() const
the box size
Definition: libstaroffice_internal.hxx:994
STOFFColor::operator=
STOFFColor & operator=(uint32_t argb)
operator=
Definition: libstaroffice_internal.hxx:200
libstoff::DOC_COMMENT_ANNOTATION
Definition: libstaroffice_internal.hxx:185
STOFFVec2::PosSizeLtY::operator()
bool operator()(STOFFVec2< T > const &s1, STOFFVec2< T > const &s2) const
comparaison function
Definition: libstaroffice_internal.hxx:746
STOFFInputStreamPtr
std::shared_ptr< STOFFInputStream > STOFFInputStreamPtr
a smart pointer of STOFFInputStream
Definition: libstaroffice_internal.hxx:484
STOFFVariable::STOFFVariable
STOFFVariable()
constructor
Definition: libstaroffice_internal.hxx:506
STOFFColor::getRed
unsigned char getRed() const
returns the red value
Definition: libstaroffice_internal.hxx:267
STOFFBorderLine::m_color
STOFFColor m_color
the border color
Definition: libstaroffice_internal.hxx:357
STOFFBorderLine::m_inWidth
int m_inWidth
the inline width in TWIP
Definition: libstaroffice_internal.hxx:355
STOFFInputStream
Internal class used to read the file stream Internal class used to read the file stream, this class adds some usefull functions to the basic librevenge::RVNGInputStream:
Definition: STOFFInputStream.hxx:53
STOFFBox2l
STOFFBox2< long > STOFFBox2l
STOFFBox2 of long.
Definition: libstaroffice_internal.hxx:1132
libstoff::DOC_TABLE
Definition: libstaroffice_internal.hxx:185
STOFFLink
a link
Definition: libstaroffice_internal.hxx:375
STOFFColor::m_value
uint32_t m_value
the argb color
Definition: libstaroffice_internal.hxx:322
libstoff::NONE
Definition: libstaroffice_internal.hxx:182
STOFFVec3::m_val
T m_val[3]
the values
Definition: libstaroffice_internal.hxx:935
STOFFField::m_propertyList
librevenge::RVNGPropertyList m_propertyList
the property list
Definition: libstaroffice_internal.hxx:371
STOFFBorderLine::addTo
bool addTo(librevenge::RVNGPropertyList &propList, std::string which="") const
add the border property to proplist (if needed )
Definition: libstaroffice_internal.cxx:256
STOFFEmbeddedObject::~STOFFEmbeddedObject
~STOFFEmbeddedObject()
destructor
Definition: libstaroffice_internal.cxx:293
libstoff::LOWERCASE_ROMAN
Definition: libstaroffice_internal.hxx:182
STOFFNote::EndNote
Definition: libstaroffice_internal.hxx:391
STOFFColor::operator>=
bool operator>=(STOFFColor const &c) const
operator>=
Definition: libstaroffice_internal.hxx:312
STOFFVec3::y
T y() const
second element
Definition: libstaroffice_internal.hxx:793
libstoff::TopBit
Definition: libstaroffice_internal.hxx:180
STOFFBox2::STOFFBox2
STOFFBox2(STOFFBox2< U > const &p)
generic constructor
Definition: libstaroffice_internal.hxx:960
STOFFParserState
a class to define the parser state
Definition: STOFFParser.hxx:49
libstoff::splitString
void splitString(librevenge::RVNGString const &string, librevenge::RVNGString const &delim, librevenge::RVNGString &string1, librevenge::RVNGString &string2)
split a string in two. If the delimiter is not present, string1=string
Definition: libstaroffice_internal.cxx:414
STOFFBox2::min
STOFFVec2< T > const & min() const
the minimum 2D point (in x and in y)
Definition: libstaroffice_internal.hxx:966
STOFFParserStatePtr
std::shared_ptr< STOFFParserState > STOFFParserStatePtr
a smart pointer of STOFFParserState
Definition: libstaroffice_internal.hxx:490
STOFFVariable::operator=
STOFFVariable & operator=(STOFFVariable const &orig)
copy operator
Definition: libstaroffice_internal.hxx:512
libstoff::NumberingType
NumberingType
Definition: libstaroffice_internal.hxx:182
STOFFBox2::scale
void scale(U factor)
scales all points of the box by factor
Definition: libstaroffice_internal.hxx:1041
STOFFVec2::operator!=
bool operator!=(STOFFVec2< T > const &p) const
comparison!=
Definition: libstaroffice_internal.hxx:691
STOFFVec3::operator+
friend STOFFVec3< T > operator+(STOFFVec3< T > const &p1, STOFFVec3< T > const &p2)
operator+
Definition: libstaroffice_internal.hxx:867
STOFFColor::operator!=
bool operator!=(STOFFColor const &c) const
operator!=
Definition: libstaroffice_internal.hxx:292
STOFFBox2::getUnion
STOFFBox2< T > getUnion(STOFFBox2< T > const &box) const
returns the union between this and box
Definition: libstaroffice_internal.hxx:1055
STOFFBorderLine::operator==
bool operator==(STOFFBorderLine const &orig) const
operator==
Definition: libstaroffice_internal.hxx:339
STOFFColor::str
std::string str() const
print the color in the form #rrggbb
Definition: libstaroffice_internal.cxx:226
STOFFVec3::PosSizeLt
internal struct used to create sorted map, sorted by X, Y, Z
Definition: libstaroffice_internal.hxx:921
STOFFEmbeddedObject::add
void add(librevenge::RVNGBinaryData const &binaryData, std::string type="image/pict")
add a picture
Definition: libstaroffice_internal.hxx:433
STOFFColor::isWhite
bool isWhite() const
return true if the color is white
Definition: libstaroffice_internal.hxx:282
libstoff::UPPERCASE
Definition: libstaroffice_internal.hxx:182
libstoff::appendUnicode
void appendUnicode(uint32_t val, librevenge::RVNGString &buffer)
adds an unicode character to a string
Definition: libstaroffice_internal.cxx:81
STOFFVec2::STOFFVec2
STOFFVec2(T xx=0, T yy=0)
constructor
Definition: libstaroffice_internal.hxx:587
STOFFVec2::cmp
int cmp(STOFFVec2< T > const &p) const
a comparison function: which first compares x then y
Definition: libstaroffice_internal.hxx:701
STOFFVariable::operator=
STOFFVariable & operator=(T const &val)
set a value
Definition: libstaroffice_internal.hxx:521
STOFFVec2::cmpY
int cmpY(STOFFVec2< T > const &p) const
a comparison function: which first compares y then x
Definition: libstaroffice_internal.hxx:710
STOFFVariable::m_data
T m_data
the value
Definition: libstaroffice_internal.hxx:574
STOFFBox2i
STOFFBox2< int > STOFFBox2i
STOFFBox2 of int.
Definition: libstaroffice_internal.hxx:1128
STOFFColor::operator<
bool operator<(STOFFColor const &c) const
operator<
Definition: libstaroffice_internal.hxx:297
STOFFBox2::setMax
void setMax(STOFFVec2< T > const &y)
resets the maximum point
Definition: libstaroffice_internal.hxx:1017
STOFFNote
a note
Definition: libstaroffice_internal.hxx:389
STOFFVec3uc
STOFFVec3< unsigned char > STOFFVec3uc
STOFFVec3 of unsigned char.
Definition: libstaroffice_internal.hxx:941
STOFFBorderLine::operator!=
bool operator!=(STOFFBorderLine const &orig) const
operator!=
Definition: libstaroffice_internal.hxx:344
STOFFBox2::STOFFBox2
STOFFBox2(STOFFVec2< T > minPt=STOFFVec2< T >(), STOFFVec2< T > maxPt=STOFFVec2< T >())
constructor
Definition: libstaroffice_internal.hxx:954
libstoff::DOC_GRAPHIC_GROUP
Definition: libstaroffice_internal.hxx:185
STOFFVariable::operator->
T const * operator->() const
operator*
Definition: libstaroffice_internal.hxx:536
STOFFVec3i
STOFFVec3< int > STOFFVec3i
STOFFVec3 of int.
Definition: libstaroffice_internal.hxx:943
STOFFParagraph
class to store the paragraph properties
Definition: STOFFParagraph.hxx:47
libstoff::GenericException
Definition: libstaroffice_internal.hxx:147
libstoff::checkAddOverflow
bool checkAddOverflow(T x, T y)
checks whether addition of x and y would overflow
Definition: libstaroffice_internal.hxx:167
STOFFVec2::operator-=
STOFFVec2< T > & operator-=(STOFFVec2< T > const &p)
operator-=
Definition: libstaroffice_internal.hxx:647
libstoff::DOC_CHART_ZONE
Definition: libstaroffice_internal.hxx:185
libstoff::VersionException
Definition: libstaroffice_internal.hxx:135
STOFFBox2::resizeFromMax
void resizeFromMax(STOFFVec2< T > const &sz)
resize the box keeping the maximum
Definition: libstaroffice_internal.hxx:1028
STOFFVariable::operator*
T const & operator*() const
operator*
Definition: libstaroffice_internal.hxx:547
STOFFVec3::operator*
friend STOFFVec3< T > operator*(U scale, STOFFVec3< T > const &p1)
generic operator*
Definition: libstaroffice_internal.hxx:880
STOFFLink::m_HRef
std::string m_HRef
the href field
Definition: libstaroffice_internal.hxx:385
STOFFSpreadsheetListener
This class contents the main functions needed to create a spreadsheet processing Document.
Definition: STOFFSpreadsheetListener.hxx:64
STOFFSpreadsheetListenerPtr
std::shared_ptr< STOFFSpreadsheetListener > STOFFSpreadsheetListenerPtr
a smart pointer of STOFFSpreadsheetListener
Definition: libstaroffice_internal.hxx:492
STOFFColor::STOFFColor
STOFFColor(uint32_t argb=0)
constructor
Definition: libstaroffice_internal.hxx:191
libstoff::numberingTypeToString
std::string numberingTypeToString(NumberingType type)
Definition: libstaroffice_internal.cxx:124
libstoff::readU8
uint8_t readU8(librevenge::RVNGInputStream *input)
Definition: libstaroffice_internal.cxx:52
STOFFColor::setAlpha
void setAlpha(unsigned char alpha)
reset the alpha value
Definition: libstaroffice_internal.hxx:257
STOFFBox2::center
STOFFVec2< T > center() const
the box center
Definition: libstaroffice_internal.hxx:999
STOFFVariable::STOFFVariable
STOFFVariable(STOFFVariable const &orig)
copy constructor
Definition: libstaroffice_internal.hxx:510
STOFFVec2< bool >::MapY
std::map< STOFFVec2< bool >, bool, struct PosSizeLtY > MapY
map of STOFFVec2
Definition: libstaroffice_internal.hxx:754
STOFFSubDocumentPtr
std::shared_ptr< STOFFSubDocument > STOFFSubDocumentPtr
a smart pointer of STOFFSubDocument
Definition: libstaroffice_internal.hxx:494
LIBSTOFF_ATTRIBUTE_PRINTF
#define LIBSTOFF_ATTRIBUTE_PRINTF(fmt, arg)
Definition: libstaroffice_internal.hxx:116
STOFFColor::operator>
bool operator>(STOFFColor const &c) const
operator>
Definition: libstaroffice_internal.hxx:307
libstoff::DOC_NONE
Definition: libstaroffice_internal.hxx:185
STOFFColor::STOFFColor
STOFFColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a=255)
constructor from color
Definition: libstaroffice_internal.hxx:195
STOFFVec3
small class which defines a vector with 3 elements
Definition: libstaroffice_internal.hxx:771
STOFFBox2::setMin
void setMin(STOFFVec2< T > const &x)
resets the minimum point
Definition: libstaroffice_internal.hxx:1012
STOFFVec3::setY
void setY(T yy)
resets the second element
Definition: libstaroffice_internal.hxx:828
STOFFVec2b
STOFFVec2< bool > STOFFVec2b
STOFFVec2 of bool.
Definition: libstaroffice_internal.hxx:760
STOFFVec2::setY
void setY(T yy)
resets the second element
Definition: libstaroffice_internal.hxx:626
STOFFColor::operator<=
bool operator<=(STOFFColor const &c) const
operator<=
Definition: libstaroffice_internal.hxx:302
libstoff::HMiddleBit
Definition: libstaroffice_internal.hxx:180
STOFFVec2::operator+=
STOFFVec2< T > & operator+=(STOFFVec2< T > const &p)
operator+=
Definition: libstaroffice_internal.hxx:641
libstoff::SubDocumentType
SubDocumentType
Definition: libstaroffice_internal.hxx:185
STOFFBox2::resizeFromMin
void resizeFromMin(STOFFVec2< T > const &sz)
resize the box keeping the minimum
Definition: libstaroffice_internal.hxx:1023
libstoff::Left
Definition: libstaroffice_internal.hxx:178
STOFFNote::Type
Type
enum to define note type
Definition: libstaroffice_internal.hxx:391
STOFFField::STOFFField
STOFFField()
basic constructor
Definition: libstaroffice_internal.hxx:365
STOFFGraphicListener
This class contains the code needed to create Graphic document.
Definition: STOFFGraphicListener.hxx:59
STOFFSection
a class which stores section properties
Definition: STOFFSection.hxx:45
libstoff::getString
librevenge::RVNGString getString(std::vector< uint32_t > const &unicode)
transform a unicode string in a RNVGString
Definition: libstaroffice_internal.cxx:63
STOFFEmbeddedObject::m_dataList
std::vector< librevenge::RVNGBinaryData > m_dataList
the picture content: one data by representation
Definition: libstaroffice_internal.hxx:452
libstoff::VMiddle
Definition: libstaroffice_internal.hxx:178
STOFFList
a small structure used to store the informations about a list
Definition: STOFFList.hxx:105
STOFFField
a field
Definition: libstaroffice_internal.hxx:363
STOFFEmbeddedObject::cmp
int cmp(STOFFEmbeddedObject const &pict) const
a comparison function
Definition: libstaroffice_internal.cxx:347
STOFFGraphicShape
a structure used to define a picture shape
Definition: STOFFGraphicShape.hxx:45
libstoff
namespace used to regroup all libwpd functions, enumerations which we have redefined for internal usa...
Definition: libstaroffice_internal.cxx:50
STOFFEmbeddedObject
small class use to define a embedded object
Definition: libstaroffice_internal.hxx:408
libstoff::simplifyString
librevenge::RVNGString simplifyString(librevenge::RVNGString const &s)
returns a simplify version of a string.
Definition: libstaroffice_internal.cxx:430
STOFFColor::getGreen
unsigned char getGreen() const
returns the green value
Definition: libstaroffice_internal.hxx:272
STOFFVec3::operator[]
T & operator[](int c)
operator[]
Definition: libstaroffice_internal.hxx:809
STOFFVec3::STOFFVec3
STOFFVec3(STOFFVec3< U > const &p)
generic copy constructor
Definition: libstaroffice_internal.hxx:782
STOFFEmbeddedObject::operator<<
friend std::ostream & operator<<(std::ostream &o, STOFFEmbeddedObject const &pict)
operator<<
Definition: libstaroffice_internal.cxx:372
libstoff::rotateBoxFromCenter
STOFFBox2f rotateBoxFromCenter(STOFFBox2f const &box, float angle)
rotate a bdox and returns the final bdbox, angle is given in degree
Definition: libstaroffice_internal.cxx:464
STOFFVariable::operator*
T & operator*()
operator*
Definition: libstaroffice_internal.hxx:552
STOFFVec2::PosSizeLtY
internal struct used to create sorted map, sorted by Y
Definition: libstaroffice_internal.hxx:744
STOFFVec3::operator-
friend STOFFVec3< T > operator-(STOFFVec3< T > const &p1, STOFFVec3< T > const &p2)
operator-
Definition: libstaroffice_internal.hxx:873
STOFFTextListener
This class contains the code needed to create Text document.
Definition: STOFFTextListener.hxx:59
STOFFGraphicListenerPtr
std::shared_ptr< STOFFGraphicListener > STOFFGraphicListenerPtr
a smart pointer of STOFFGraphicListener
Definition: libstaroffice_internal.hxx:480
libstoff::WrongPasswordException
Definition: libstaroffice_internal.hxx:151
STOFFVec2i
STOFFVec2< int > STOFFVec2i
STOFFVec2 of int.
Definition: libstaroffice_internal.hxx:762
STOFFBorderLine::operator<<
friend std::ostream & operator<<(std::ostream &o, STOFFBorderLine const &border)
operator<<
Definition: libstaroffice_internal.cxx:282
STOFFLink::STOFFLink
STOFFLink()
basic constructor
Definition: libstaroffice_internal.hxx:377
STOFFVec3::operator*=
STOFFVec3< T > & operator*=(U scale)
generic operator*=
Definition: libstaroffice_internal.hxx:860
STOFFNote::m_number
int m_number
the note number if defined
Definition: libstaroffice_internal.hxx:401
libstoff::DOC_NOTE
Definition: libstaroffice_internal.hxx:185
STOFFVec2::add
void add(T dx, T dy)
increases the actuals values by dx and dy
Definition: libstaroffice_internal.hxx:632
STOFFBorderLine::m_distance
int m_distance
the border distance
Definition: libstaroffice_internal.hxx:359
STOFFVec2::STOFFVec2
STOFFVec2(STOFFVec2< U > const &p)
generic copy constructor
Definition: libstaroffice_internal.hxx:589
libstoff::DOC_CHART
Definition: libstaroffice_internal.hxx:185
STOFFVec2::y
T y() const
second element
Definition: libstaroffice_internal.hxx:597
STOFFColor
the class to store a color
Definition: libstaroffice_internal.hxx:189
STOFFFont
Class to store font.
Definition: STOFFFont.hxx:43
libstoff::Position
Position
basic position enum
Definition: libstaroffice_internal.hxx:178
STOFFBox2< int >::Map
std::map< STOFFBox2< int >, int, struct PosSizeLt > Map
map of STOFFBox2
Definition: libstaroffice_internal.hxx:1120
STOFFColor::operator==
bool operator==(STOFFColor const &c) const
operator==
Definition: libstaroffice_internal.hxx:287
STOFFVariable::setSet
void setSet(bool newVal)
define if the variable is set
Definition: libstaroffice_internal.hxx:568
STOFFSubDocument
abstract class used to store a subdocument (with a comparison function)
Definition: STOFFSubDocument.hxx:41
STOFFVariable::STOFFVariable
STOFFVariable(T const &def)
constructor with a default value
Definition: libstaroffice_internal.hxx:508
STOFFVec3::operator!=
bool operator!=(STOFFVec3< T > const &p) const
comparison!=
Definition: libstaroffice_internal.hxx:892
STOFFBox2::max
STOFFVec2< T > const & max() const
the maximum 2D point (in x and in y)
Definition: libstaroffice_internal.hxx:971
STOFFBox2::PosSizeLt
internal struct used to create sorted map, sorted first min then max
Definition: libstaroffice_internal.hxx:1110
STOFFVec3::operator-=
STOFFVec3< T > & operator-=(STOFFVec3< T > const &p)
operator-=
Definition: libstaroffice_internal.hxx:853
libstoff::DOC_SHEET
Definition: libstaroffice_internal.hxx:185
libstoff::FileException
Definition: libstaroffice_internal.hxx:139
STOFFNote::m_label
librevenge::RVNGString m_label
the note label
Definition: libstaroffice_internal.hxx:399
STOFFVariable::isSet
bool isSet() const
return true if the variable is set
Definition: libstaroffice_internal.hxx:563
libstoff::UPPERCASE_ROMAN
Definition: libstaroffice_internal.hxx:182
STOFFVec3::cmp
int cmp(STOFFVec3< T > const &p) const
a comparison function: which first compares x values, then y values then z values.
Definition: libstaroffice_internal.hxx:902
STOFFVec3::STOFFVec3
STOFFVec3(T xx=0, T yy=0, T zz=0)
constructor
Definition: libstaroffice_internal.hxx:775
STOFFColor::getAlpha
unsigned char getAlpha() const
returns the alpha value
Definition: libstaroffice_internal.hxx:252
STOFFLink::addTo
bool addTo(librevenge::RVNGPropertyList &propList) const
add the link property to proplist (if needed )
Definition: libstaroffice_internal.cxx:247
STOFFBox2::min
STOFFVec2< T > & min()
the minimum 2D point (in x and in y)
Definition: libstaroffice_internal.hxx:976
STOFFVec2::m_y
T m_y
second element
Definition: libstaroffice_internal.hxx:756
STOFFListenerPtr
std::shared_ptr< STOFFListener > STOFFListenerPtr
a smart pointer of STOFFListener
Definition: libstaroffice_internal.hxx:486
STOFFVec3::setX
void setX(T xx)
resets the first element
Definition: libstaroffice_internal.hxx:823
STOFFPageSpan
A class which defines the page properties.
Definition: STOFFPageSpan.hxx:75
STOFFNote::FootNote
Definition: libstaroffice_internal.hxx:391
libstoff::BottomBit
Definition: libstaroffice_internal.hxx:180
STOFFVec2::operator*=
STOFFVec2< T > & operator*=(U scale)
generic operator*=
Definition: libstaroffice_internal.hxx:658
STOFFVec2::operator==
bool operator==(STOFFVec2< T > const &p) const
comparison==
Definition: libstaroffice_internal.hxx:686
libstoff::convertToDateTime
bool convertToDateTime(uint32_t date, uint32_t time, std::string &dateTime)
convert a date/time in a date time format
Definition: libstaroffice_internal.cxx:389
STOFF_shared_ptr_noop_deleter::operator()
void operator()(T *)
Definition: libstaroffice_internal.hxx:101
STOFFEntry
basic class to store an entry in a file This contained :
Definition: STOFFEntry.hxx:46
libstoff::HMiddle
Definition: libstaroffice_internal.hxx:178
STOFFColor::colorFromHSL
static STOFFColor colorFromHSL(unsigned char H, unsigned char S, unsigned char L)
return a color from a hsl color (basic)
Definition: libstaroffice_internal.hxx:216
STOFFVec2f
STOFFVec2< float > STOFFVec2f
STOFFVec2 of float.
Definition: libstaroffice_internal.hxx:766
STOFFVec2::PosSizeLtX::operator()
bool operator()(STOFFVec2< T > const &s1, STOFFVec2< T > const &s2) const
comparaison function
Definition: libstaroffice_internal.hxx:731
STOFFListManagerPtr
std::shared_ptr< STOFFListManager > STOFFListManagerPtr
a smart pointer of STOFFListManager
Definition: libstaroffice_internal.hxx:488
STOFFColor::colorFromCMYK
static STOFFColor colorFromCMYK(unsigned char c, unsigned char m, unsigned char y, unsigned char k)
return a color from a cmyk color ( basic)
Definition: libstaroffice_internal.hxx:206
STOFFField::addTo
void addTo(librevenge::RVNGPropertyList &propList) const
add the link property to proplist (if possible)
Definition: libstaroffice_internal.cxx:234
STOFFParser
virtual class which defines the ancestor of all main zone parser
Definition: STOFFParser.hxx:89
STOFFEmbeddedObject::addAsFillImageTo
bool addAsFillImageTo(librevenge::RVNGPropertyList &propList) const
add the link property to a graph style as bitmap
Definition: libstaroffice_internal.cxx:297
STOFFVec3::operator==
bool operator==(STOFFVec3< T > const &p) const
comparison==
Definition: libstaroffice_internal.hxx:887
STOFFVariable::operator->
T * operator->()
operator*
Definition: libstaroffice_internal.hxx:541
STOFFListener
This class contains a virtual interface to all listener.
Definition: STOFFListener.hxx:50
STOFFColor::getBlue
unsigned char getBlue() const
returns the green value
Definition: libstaroffice_internal.hxx:262
STOFFGraphicStyle
Class to store a graphic style.
Definition: STOFFGraphicStyle.hxx:44
STOFFEmbeddedObject::STOFFEmbeddedObject
STOFFEmbeddedObject(librevenge::RVNGBinaryData const &binaryData, std::string type="image/pict")
constructor
Definition: libstaroffice_internal.hxx:414
STOFFBox2::operator[]
STOFFVec2< T > const & operator[](int c) const
the two extremum points which defined the box
Definition: libstaroffice_internal.hxx:988
STOFFBox2::operator!=
bool operator!=(STOFFBox2< T > const &p) const
comparison operator!=
Definition: libstaroffice_internal.hxx:1080
STOFFBox2f
STOFFBox2< float > STOFFBox2f
STOFFBox2 of float.
Definition: libstaroffice_internal.hxx:1130
STOFFColor::isBlack
bool isBlack() const
return true if the color is black
Definition: libstaroffice_internal.hxx:277
STOFFPosition
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: STOFFPosition.hxx:47
libstoff::LOWERCASE
Definition: libstaroffice_internal.hxx:182
libstoff::DOC_TEXT_BOX
Definition: libstaroffice_internal.hxx:185
STOFFVec3::operator[]
T operator[](int c) const
operator[]
Definition: libstaroffice_internal.hxx:803
STOFFNote::STOFFNote
STOFFNote(Type type)
constructor
Definition: libstaroffice_internal.hxx:393
STOFFVec3::PosSizeLt::operator()
bool operator()(STOFFVec3< T > const &s1, STOFFVec3< T > const &s2) const
comparaison function
Definition: libstaroffice_internal.hxx:923
STOFFColor::white
static STOFFColor white()
return the white color
Definition: libstaroffice_internal.hxx:238
STOFFVariable::m_set
bool m_set
a flag to know if the variable is set or not
Definition: libstaroffice_internal.hxx:576
STOFFListManager
a manager which manages the lists, keeps the different kind of lists, to assure the unicity of each l...
Definition: STOFFList.hxx:205
libstoff::getScaleFactor
float getScaleFactor(librevenge::RVNGUnit orig, librevenge::RVNGUnit dest)
factor to convert from one unit to other
Definition: libstaroffice_internal.cxx:484
STOFFEmbeddedObject::STOFFEmbeddedObject
STOFFEmbeddedObject()
empty constructor
Definition: libstaroffice_internal.hxx:410
STOFFVec3::add
void add(T dx, T dy, T dz)
increases the actuals values by dx, dy, dz
Definition: libstaroffice_internal.hxx:839