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 <stack>
15 #include <string>
16 
17 #include <boost/optional.hpp>
18 
19 #include <glm/glm.hpp>
20 
21 #include "libetonyek_utils.h"
22 #include "IWORKPath_fwd.h"
23 #include "IWORKShape.h"
24 #include "IWORKStyle.h"
25 #include "IWORKStyleStack.h"
26 #include "IWORKStylesheet.h"
27 #include "IWORKTable.h"
28 #include "IWORKText_fwd.h"
29 #include "IWORKTransformation.h"
30 #include "IWORKTypes.h"
31 #include "IWORKOutputManager.h"
32 
33 namespace libetonyek
34 {
35 
36 class IWORKDocumentInterface;
37 class IWORKPropertyMap;
38 struct IWORKSize;
39 
41 {
42 private:
43  struct Level
44  {
47  glm::dmat3 m_trafo;
48 
49  Level();
50  };
51 
52 public:
55 
56  // collector functions
57 
58  void collectStyle(const IWORKStylePtr_t &style);
59 
61 
63 
64  void collectBezier(const IWORKPathPtr_t &path);
65  void collectImage(const IWORKImagePtr_t &image);
66  void collectLine(const IWORKLinePtr_t &line);
67  void collectShape();
68 
69  void collectBezierPath();
70  void collectPolygonPath(const IWORKSize &size, unsigned edges);
71  void collectRoundedRectanglePath(const IWORKSize &size, double radius);
72  void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided);
73  void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius);
74  void collectConnectionPath(const IWORKSize &size, double middleX, double middleY);
75  void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble);
76 
78 
80 
81  void collectText(const std::string &text);
82  void collectTab();
83  void collectLineBreak();
84 
85  void collectTableSizes(const IWORKRowSizes_t &rowSizes, const IWORKColumnSizes_t &columnSizes);
86  void collectTableBorders(const IWORKGridLineList_t &verticalLines, const IWORKGridLineList_t &horizontalLines);
87  void collectTableCell(unsigned row, unsigned column, const boost::optional<std::string> &content, unsigned rowSpan, unsigned columnSpan);
88  void collectCoveredTableCell(unsigned row, unsigned column);
89  void collectTableRow();
90  void collectTable();
91 
93 
94  void collectHeader(const std::string &name);
95  void collectFooter(const std::string &name);
96 
97  void startDocument();
98  void endDocument();
99 
100  void startGroup();
101  void endGroup();
102 
103  void startLayout(const IWORKStylePtr_t &style);
104  void endLayout();
105  void startParagraph(const IWORKStylePtr_t &style);
106  void endParagraph();
107  void openSpan(const IWORKStylePtr_t &style);
108  void closeSpan();
109  void openLink(const std::string &url);
110  void closeLink();
111  void startText(bool discardEmptyContent = false);
112  void endText();
113 
114  void startLevel();
115  void endLevel();
116 
117  void pushStyle();
118  void popStyle();
119 
121  void popStylesheet();
122 
124 
125 protected:
126  void fillMetadata(librevenge::RVNGPropertyList &props);
127 
128 private:
129  void pushStyle(const IWORKStylePtr_t &style);
131 
133 
134  void drawMedia(const IWORKMediaPtr_t &media);
135  void drawShape(const IWORKShapePtr_t &shape);
136 
137  virtual void drawTable() = 0;
138  virtual void drawMedia(double x, double y, double w, double h, const std::string &mimetype, const librevenge::RVNGBinaryData &data) = 0;
139  virtual void fillShapeProperties(librevenge::RVNGPropertyList &props) = 0;
140  virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox) = 0;
141 
142 protected:
144 
145  std::stack<Level> m_levelStack;
147  std::stack<IWORKStylesheetPtr_t> m_stylesheetStack;
149 
150  std::deque<IWORKStylePtr_t> m_newStyles;
151 
152  std::stack<IWORKTextPtr_t> m_textStack;
154 
157 
158 private:
165 
167 
169 };
170 
171 } // namespace libetonyek
172 
173 #endif // IWORKCOLLECTOR_H_INCLUDED
174 
175 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
boost::shared_ptr< IWORKStylesheet > IWORKStylesheetPtr_t
Definition: IWORKStylesheet.h:19
Definition: IWORKBezierElement.cpp:18
std::stack< IWORKStylesheetPtr_t > m_stylesheetStack
Definition: IWORKCollector.h:147
IWORKMediaContentPtr_t m_currentFiltered
Definition: IWORKCollector.h:162
boost::shared_ptr< IWORKMediaContent > IWORKMediaContentPtr_t
Definition: IWORKTypes_fwd.h:46
IWORKCollector(IWORKDocumentInterface *document)
Definition: IWORKCollector.cpp:185
Represents a hierarchical style.
Definition: IWORKStyle.h:28
void collectGeometry(const IWORKGeometryPtr_t &geometry)
Definition: IWORKCollector.cpp:224
IWORKMediaContentPtr_t m_currentLeveled
Definition: IWORKCollector.h:163
double y
Definition: IWORKShape.cpp:43
void startText(bool discardEmptyContent=false)
Definition: IWORKCollector.cpp:528
A manager for output elements.
Definition: IWORKOutputManager.h:29
Definition: IWORKToken.h:122
boost::shared_ptr< IWORKStyle > IWORKStylePtr_t
Definition: IWORKStyle_fwd.h:21
boost::shared_ptr< IWORKShape > IWORKShapePtr_t
Definition: IWORKShape.h:36
void collectTable()
Definition: IWORKCollector.cpp:416
IWORKStylePtr_t m_graphicStyle
Definition: IWORKCollector.h:46
Representation of a dynamic inheritance of styles.
Definition: IWORKStyleStack.h:34
void collectTableBorders(const IWORKGridLineList_t &verticalLines, const IWORKGridLineList_t &horizontalLines)
Definition: IWORKCollector.cpp:377
IWORKMediaContentPtr_t m_currentContent
Definition: IWORKCollector.h:164
void collectTableRow()
Definition: IWORKCollector.cpp:411
void popStylesheet()
Definition: IWORKCollector.cpp:574
virtual void drawTextBox(const IWORKTextPtr_t &text, const glm::dmat3 &trafo, const IWORKGeometryPtr_t &boundingBox)=0
void collectBezier(const IWORKPathPtr_t &path)
Definition: IWORKCollector.cpp:232
void startGroup()
Definition: IWORKCollector.cpp:452
void collectStarPath(const IWORKSize &size, unsigned points, double innerRadius)
Definition: IWORKCollector.cpp:309
void drawMedia(const IWORKMediaPtr_t &media)
Definition: IWORKCollector.cpp:619
void collectStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:209
Definition: IWORKToken.h:177
Definition: IWORKCollector.h:43
boost::shared_ptr< IWORKGeometry > IWORKGeometryPtr_t
Definition: IWORKTypes_fwd.h:33
Definition: IWORKTypes.h:34
void endLayout()
Definition: IWORKCollector.cpp:472
void resolveStyle(IWORKStyle &style)
Definition: IWORKCollector.cpp:581
boost::shared_ptr< IWORKImage > IWORKImagePtr_t
Definition: IWORKTypes_fwd.h:51
Definition: IWORKToken.h:179
void popStyle()
Definition: IWORKCollector.cpp:564
void collectFooter(const std::string &name)
Definition: IWORKCollector.cpp:431
void openSpan(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:496
void collectHeaderFooter(const std::string &name, IWORKHeaderFooterMap_t &map)
Definition: IWORKCollector.cpp:587
Definition: IWORKDocumentInterface.h:18
double x
Definition: IWORKShape.cpp:42
virtual void drawTable()=0
void setGraphicStyle(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:215
void collectMetadata(const IWORKMetadata &metadata)
Definition: IWORKCollector.cpp:421
IWORKHeaderFooterMap_t m_headers
Definition: IWORKCollector.h:155
Definition: IWORKToken.h:194
Definition: IWORKToken.h:182
Definition: IWORKToken.h:67
~IWORKCollector()
Definition: IWORKCollector.cpp:199
void collectImage(const IWORKImagePtr_t &image)
Definition: IWORKCollector.cpp:237
void collectTableSizes(const IWORKRowSizes_t &rowSizes, const IWORKColumnSizes_t &columnSizes)
Definition: IWORKCollector.cpp:372
IWORKGeometryPtr_t m_geometry
Definition: IWORKCollector.h:45
void collectLineBreak()
Definition: IWORKCollector.cpp:364
void startDocument()
Definition: IWORKCollector.cpp:436
std::vector< IWORKGridLine_t > IWORKGridLineList_t
Definition: IWORKTypes.h:99
void endDocument()
Definition: IWORKCollector.cpp:441
Definition: IWORKToken.h:261
Definition: IWORKToken.h:105
void endText()
Definition: IWORKCollector.cpp:533
boost::shared_ptr< IWORKPath > IWORKPathPtr_t
Definition: IWORKPath_fwd.h:19
IWORKPathPtr_t m_currentPath
Definition: IWORKCollector.h:159
Definition: IWORKCollector.h:40
std::stack< IWORKTextPtr_t > m_textStack
Definition: IWORKCollector.h:152
void collectHeader(const std::string &name)
Definition: IWORKCollector.cpp:426
void collectConnectionPath(const IWORKSize &size, double middleX, double middleY)
Definition: IWORKCollector.cpp:314
std::stack< Level > m_levelStack
Definition: IWORKCollector.h:145
const char * name
Definition: IWORKToken.cpp:43
void collectCoveredTableCell(unsigned row, unsigned column)
Definition: IWORKCollector.cpp:406
void collectTab()
Definition: IWORKCollector.cpp:356
void collectStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:342
IWORKTable m_currentTable
Definition: IWORKCollector.h:153
boost::shared_ptr< IWORKData > IWORKDataPtr_t
Definition: IWORKTypes_fwd.h:41
void collectBezierPath()
Definition: IWORKCollector.cpp:286
void closeLink()
Definition: IWORKCollector.cpp:520
std::deque< IWORKStylePtr_t > m_newStyles
Definition: IWORKCollector.h:150
void openLink(const std::string &url)
Definition: IWORKCollector.cpp:512
void closeSpan()
Definition: IWORKCollector.cpp:504
IWORKDocumentInterface * m_document
Definition: IWORKCollector.h:143
void collectMedia(const IWORKMediaContentPtr_t &content)
Definition: IWORKCollector.cpp:327
Level()
Definition: IWORKCollector.cpp:178
virtual void fillShapeProperties(librevenge::RVNGPropertyList &props)=0
IWORKOutputManager & getOutputManager()
Definition: IWORKCollector.cpp:614
std::deque< double > IWORKColumnSizes_t
Definition: IWORKTypes_fwd.h:22
Definition: IWORKToken.h:229
Definition: IWORKToken.h:129
void drawShape(const IWORKShapePtr_t &shape)
Definition: IWORKCollector.cpp:655
std::deque< double > IWORKRowSizes_t
Definition: IWORKTypes_fwd.h:24
Definition: IWORKToken.h:148
IWORKMediaContentPtr_t m_currentUnfiltered
Definition: IWORKCollector.h:161
void startLevel()
Definition: IWORKCollector.cpp:540
glm::dmat3 m_trafo
Definition: IWORKCollector.h:47
void collectArrowPath(const IWORKSize &size, double headWidth, double stemRelYPos, bool doubleSided)
Definition: IWORKCollector.cpp:301
void endLevel()
Definition: IWORKCollector.cpp:551
boost::unordered_map< std::string, IWORKOutputElements > IWORKHeaderFooterMap_t
Definition: IWORKTypes.h:30
void endGroup()
Definition: IWORKCollector.cpp:457
void collectText(const std::string &text)
Definition: IWORKCollector.cpp:348
boost::shared_ptr< IWORKMedia > IWORKMediaPtr_t
Definition: IWORKTypes_fwd.h:56
IWORKOutputManager m_outputManager
Definition: IWORKCollector.h:148
IWORKHeaderFooterMap_t m_footers
Definition: IWORKCollector.h:156
Definition: IWORKToken.h:167
void collectCalloutPath(const IWORKSize &size, double radius, double tailSize, double tailX, double tailY, bool quoteBubble)
Definition: IWORKCollector.cpp:319
Definition: KEY1Token.h:156
IWORKMetadata m_metadata
Definition: IWORKCollector.h:166
Definition: IWORKToken.h:256
void fillMetadata(librevenge::RVNGPropertyList &props)
Definition: IWORKCollector.cpp:602
void collectLine(const IWORKLinePtr_t &line)
Definition: IWORKCollector.cpp:247
void collectShape()
Definition: IWORKCollector.cpp:257
boost::shared_ptr< IWORKLine > IWORKLinePtr_t
Definition: IWORKTypes_fwd.h:37
Definition: NUM1Token.h:34
Definition: IWORKToken.h:56
Definition: IWORKToken.h:130
IWORKStyleStack m_styleStack
Definition: IWORKCollector.h:146
Definition: IWORKTable.h:23
void pushStyle()
Definition: IWORKCollector.cpp:559
void startLayout(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:464
int m_groupLevel
Definition: IWORKCollector.h:168
boost::shared_ptr< IWORKText > IWORKTextPtr_t
Definition: IWORKText_fwd.h:18
void collectPolygonPath(const IWORKSize &size, unsigned edges)
Definition: IWORKCollector.cpp:291
void endParagraph()
Definition: IWORKCollector.cpp:488
void collectTableCell(unsigned row, unsigned column, const boost::optional< std::string > &content, unsigned rowSpan, unsigned columnSpan)
Definition: IWORKCollector.cpp:382
void startParagraph(const IWORKStylePtr_t &style)
Definition: IWORKCollector.cpp:480
void pushStylesheet(const IWORKStylesheetPtr_t &stylesheet)
Definition: IWORKCollector.cpp:569
Definition: IWORKToken.h:63
Definition: IWORKToken.h:166
Definition: IWORKToken.h:92
void collectRoundedRectanglePath(const IWORKSize &size, double radius)
Definition: IWORKCollector.cpp:296
Definition: IWORKTypes.h:207
IWORKDataPtr_t m_currentData
Definition: IWORKCollector.h:160

Generated for libetonyek by doxygen 1.8.9.1