IWORKCollector.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libetonyek project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef IWORKCOLLECTOR_H_INCLUDED
11 #define IWORKCOLLECTOR_H_INCLUDED
12 
13 #include <deque>
14 #include <memory>
15 #include <stack>
16 #include <string>
17 
18 #include <boost/optional.hpp>
19 
20 #include "libetonyek_utils.h"
21 #include "IWORKPath_fwd.h"
22 #include "IWORKShape.h"
23 #include "IWORKStyle.h"
24 #include "IWORKStyleStack.h"
25 #include "IWORKStylesheet.h"
26 #include "IWORKTransformation.h"
27 #include "IWORKTypes.h"
28 #include "IWORKOutputManager.h"
29 
30 namespace libetonyek
31 {
32 
33 class IWORKDocumentInterface;
34 class IWORKLanguageManager;
35 class IWORKPropertyMap;
36 class IWORKRecorder;
37 class IWORKTable;
38 class IWORKText;
39 struct IWORKSize;
40 
42 {
43 private:
44  struct Level
45  {
48  glm::dmat3 m_trafo;
49 
50  Level();
51  };
52 
53 public:
56 
57  void setRecorder(const std::shared_ptr<IWORKRecorder> &recorder);
58 
59  // collector functions
60 
61  void collectStyle(const IWORKStylePtr_t &style);
62 
64 
66 
67  void collectBezier(const IWORKPathPtr_t &path);
68  void collectImage(const IWORKImagePtr_t &image);
69  void collectLine(const IWORKLinePtr_t &line);
70  void collectShape();
71 
72  void collectBezierPath();
73  void collectPolygonPath(const IWORKSize &size, unsigned edges);
74  void collectRoundedRectanglePath(const IWORKSize &size, double radius);
75  void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided);
76  void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius);
77  void collectConnectionPath(const IWORKSize &size, double middleX, double middleY);
78  void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble);
79 
81 
83 
85 
86  void collectHeader(const std::string &name);
87  void collectFooter(const std::string &name);
88 
89  void collectTable(const std::shared_ptr<IWORKTable> &table);
90  void collectText(const std::shared_ptr<IWORKText> &text);
91 
92  void startDocument();
93  void endDocument();
94 
95  void startGroup();
96  void endGroup();
97 
98  void startLevel();
99  void endLevel();
100 
101  void pushStyle();
102  void popStyle();
103 
105  void popStylesheet();
107  {
108  if (m_stylesheetStack.empty())
109  return IWORKStylesheetPtr_t();
110  return m_stylesheetStack.top();
111  }
113 
114 public:
115  virtual std::shared_ptr<IWORKTable> createTable(const IWORKTableNameMapPtr_t &tableNameMap, const IWORKLanguageManager &langManager) const;
116  virtual std::shared_ptr<IWORKText> createText(const IWORKLanguageManager &langManager, bool discardEmptyContent = false) const;
117 
118 protected:
119  void fillMetadata(librevenge::RVNGPropertyList &props);
120 
121  static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props);
122 
123 private:
124  void pushStyle(const IWORKStylePtr_t &style);
125  void resolveStyle(IWORKStyle &style);
126 
128 
129  void drawMedia(const IWORKMediaPtr_t &media);
130  void drawShape(const IWORKShapePtr_t &shape);
131 
132  virtual void drawTable() = 0;
133  virtual void drawMedia(double x, double y, double w, double h, const std::string &mimetype, const librevenge::RVNGBinaryData &data) = 0;
134  virtual void fillShapeProperties(librevenge::RVNGPropertyList &props) = 0;
135  virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox) = 0;
136 
137 protected:
139  std::shared_ptr<IWORKRecorder> m_recorder;
140 
141  std::stack<Level> m_levelStack;
143  std::stack<IWORKStylesheetPtr_t> m_stylesheetStack;
145 
146  std::deque<IWORKStylePtr_t> m_newStyles;
147 
148  std::shared_ptr<IWORKTable> m_currentTable;
149  std::shared_ptr<IWORKText> m_currentText;
150 
153 
154 private:
161 
163 
165 };
166 
167 } // namespace libetonyek
168 
169 #endif // IWORKCOLLECTOR_H_INCLUDED
170 
171 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
virtual std::shared_ptr< IWORKTable > createTable(const IWORKTableNameMapPtr_t &tableNameMap, const IWORKLanguageManager &langManager) const
Definition: IWORKCollector.cpp:680
std::shared_ptr< IWORKGeometry > IWORKGeometryPtr_t
Definition: IWORKTypes_fwd.h:39
Definition: IWORKBezierElement.cpp:18
std::stack< IWORKStylesheetPtr_t > m_stylesheetStack
Definition: IWORKCollector.h:143
IWORKMediaContentPtr_t m_currentFiltered
Definition: IWORKCollector.h:158
Definition: IWORKToken.h:228
void collectTable(const std::shared_ptr< IWORKTable > &table)
Definition: IWORKCollector.cpp:614
IWORKCollector(IWORKDocumentInterface *document)
Definition: IWORKCollector.cpp:354
Definition: IWORKToken.h:271
Represents a hierarchical style.
Definition: IWORKStyle.h:28
void collectGeometry(const IWORKGeometryPtr_t &geometry)
Definition: IWORKCollector.cpp:411
IWORKMediaContentPtr_t m_currentLeveled
Definition: IWORKCollector.h:159
Definition: IWORKToken.h:203
double y
Definition: IWORKShape.cpp:43
virtual std::shared_ptr< IWORKText > createText(const IWORKLanguageManager &langManager, bool discardEmptyContent=false) const
Definition: IWORKCollector.cpp:685
A manager for output elements.
Definition: IWORKOutputManager.h:29
Definition: IWORKToken.h:187
IWORKStylePtr_t m_graphicStyle
Definition: IWORKCollector.h:47
Definition: IWORKToken.h:93
Representation of a dynamic inheritance of styles.
Definition: IWORKStyleStack.h:34
IWORKMediaContentPtr_t m_currentContent
Definition: IWORKCollector.h:160
void popStylesheet()
Definition: IWORKCollector.cpp:742
Definition: IWORKToken.h:253
std::shared_ptr< IWORKMedia > IWORKMediaPtr_t
Definition: IWORKTypes_fwd.h:62
virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox)=0
std::shared_ptr< IWORKRecorder > m_recorder
Definition: IWORKCollector.h:139
std::shared_ptr< IWORKStyle > IWORKStylePtr_t
Definition: IWORKStyle_fwd.h:21
Definition: IWORKToken.h:163
void collectBezier(const IWORKPathPtr_t &path)
Definition: IWORKCollector.cpp:425
void startGroup()
Definition: IWORKCollector.cpp:656
void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius)
Definition: IWORKCollector.cpp:535
Definition: IWORKToken.h:328
void drawMedia(const IWORKMediaPtr_t &media)
Definition: IWORKCollector.cpp:793
void collectStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:384
Definition: IWORKCollector.h:44
Definition: IWORKTypes.h:37
void resolveStyle(IWORKStyle &style)
Definition: IWORKCollector.cpp:755
Definition: IWORKToken.h:284
void popStyle()
Definition: IWORKCollector.cpp:726
void collectFooter(const std::string &name)
Definition: IWORKCollector.cpp:609
void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map)
Definition: IWORKCollector.cpp:761
Definition: IWORKDocumentInterface.h:18
double x
Definition: IWORKShape.cpp:42
virtual void drawTable()=0
void setGraphicStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:396
void collectMetadata(const IWORKMetadata &metadata)
Definition: IWORKCollector.cpp:599
IWORKHeaderFooterMap_t m_headers
Definition: IWORKCollector.h:151
std::shared_ptr< IWORKData > IWORKDataPtr_t
Definition: IWORKTypes_fwd.h:47
void collectText(const std::shared_ptr< IWORKText > &text)
Definition: IWORKCollector.cpp:628
~IWORKCollector()
Definition: IWORKCollector.cpp:369
void collectImage(const IWORKImagePtr_t &image)
Definition: IWORKCollector.cpp:433
std::unordered_map< std::string, IWORKOutputElements > IWORKHeaderFooterMap_t
Definition: IWORKTypes.h:33
Definition: IWORKToken.h:268
IWORKGeometryPtr_t m_geometry
Definition: IWORKCollector.h:46
void startDocument()
Definition: IWORKCollector.cpp:640
void endDocument()
Definition: IWORKCollector.cpp:645
IWORKPathPtr_t m_currentPath
Definition: IWORKCollector.h:155
Definition: IWORKCollector.h:41
void collectHeader(const std::string &name)
Definition: IWORKCollector.cpp:604
void collectConnectionPath(const IWORKSize &size, double middleX, double middleY)
Definition: IWORKCollector.cpp:544
void setRecorder(const std::shared_ptr< IWORKRecorder > &recorder)
Definition: IWORKCollector.cpp:379
std::stack< Level > m_levelStack
Definition: IWORKCollector.h:141
const char * name
Definition: IWORKToken.cpp:43
void collectStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:587
std::shared_ptr< IWORKText > IWORKTextPtr_t
Definition: IWORKText_fwd.h:18
Definition: IWORKToken.h:254
void collectBezierPath()
Definition: IWORKCollector.cpp:499
std::deque< IWORKStylePtr_t > m_newStyles
Definition: IWORKCollector.h:146
IWORKDocumentInterface * m_document
Definition: IWORKCollector.h:138
static void writeFill(const IWORKFill &fill, librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:858
boost::variant< IWORKColor, IWORKGradient, IWORKFillImage > IWORKFill
Definition: IWORKTypes.h:243
void collectMedia(const IWORKMediaContentPtr_t &content)
Definition: IWORKCollector.cpp:566
Level()
Definition: IWORKCollector.cpp:347
virtual void fillShapeProperties(librevenge::RVNGPropertyList &props)=0
IWORKOutputManager & getOutputManager()
Definition: IWORKCollector.cpp:788
std::shared_ptr< IWORKText > m_currentText
Definition: IWORKCollector.h:149
Definition: IWORKToken.h:373
IWORKStylesheetPtr_t getStylesheet() const
Definition: IWORKCollector.h:106
void drawShape(const IWORKShapePtr_t &shape)
Definition: IWORKCollector.cpp:829
IWORKMediaContentPtr_t m_currentUnfiltered
Definition: IWORKCollector.h:157
Definition: IWORKToken.h:148
void startLevel()
Definition: IWORKCollector.cpp:690
glm::dmat3 m_trafo
Definition: IWORKCollector.h:48
std::shared_ptr< IWORKTableNameMap_t > IWORKTableNameMapPtr_t
Definition: IWORKTypes_fwd.h:32
void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided)
Definition: IWORKCollector.cpp:522
std::shared_ptr< IWORKLine > IWORKLinePtr_t
Definition: IWORKTypes_fwd.h:43
void endLevel()
Definition: IWORKCollector.cpp:707
Definition: KEY1Token.h:156
Definition: IWORKToken.h:101
void endGroup()
Definition: IWORKCollector.cpp:667
Definition: IWORKLanguageManager.h:23
IWORKOutputManager m_outputManager
Definition: IWORKCollector.h:144
Definition: NUM1Token.h:34
std::shared_ptr< IWORKImage > IWORKImagePtr_t
Definition: IWORKTypes_fwd.h:57
IWORKHeaderFooterMap_t m_footers
Definition: IWORKCollector.h:152
Definition: IWORKToken.h:266
void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble)
Definition: IWORKCollector.cpp:553
IWORKMetadata m_metadata
Definition: IWORKCollector.h:162
void fillMetadata(librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:776
void collectLine(const IWORKLinePtr_t &line)
Definition: IWORKCollector.cpp:449
void collectShape()
Definition: IWORKCollector.cpp:465
std::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition: IWORKPath_fwd.h:20
IWORKStyleStack m_styleStack
Definition: IWORKCollector.h:142
std::shared_ptr< IWORKShape > IWORKShapePtr_t
Definition: IWORKShape.h:36
void pushStyle()
Definition: IWORKCollector.cpp:721
int m_groupLevel
Definition: IWORKCollector.h:164
void collectPolygonPath(const IWORKSize &size, unsigned edges)
Definition: IWORKCollector.cpp:504
void pushStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:731
Definition: IWORKToken.h:205
std::shared_ptr< IWORKTable > m_currentTable
Definition: IWORKCollector.h:148
Definition: IWORKToken.h:366
void collectRoundedRectanglePath(const IWORKSize &size, double radius)
Definition: IWORKCollector.cpp:513
std::shared_ptr< IWORKMediaContent > IWORKMediaContentPtr_t
Definition: IWORKTypes_fwd.h:52
Definition: IWORKTypes.h:255
Definition: IWORKToken.h:114
IWORKDataPtr_t m_currentData
Definition: IWORKCollector.h:156
std::shared_ptr< IWORKStylesheet > IWORKStylesheetPtr_t
Definition: IWORKStylesheet.h:19

Generated for libetonyek by doxygen 1.8.13