ABWContentCollector.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 libabw 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 __ABWCONTENTCOLLECTOR_H__
11 #define __ABWCONTENTCOLLECTOR_H__
12 
13 #include <vector>
14 #include <stack>
15 #include <set>
16 #include <libwpd/libwpd.h>
17 #include "ABWOutputElements.h"
18 #include "ABWCollector.h"
19 
20 namespace libabw
21 {
22 
24 {
28 };
29 
30 struct ABWStyle
31 {
33  ~ABWStyle() {}
34  std::string basedon;
35  std::string followedby;
36  std::map<std::string, std::string> properties;
37 };
38 
40 {
44 
45  std::map<std::string, std::string> m_currentTableProperties;
46  std::map<std::string, std::string> m_currentCellProperties;
47 
57 };
58 
60 {
64 
70 
75 
76  std::map<std::string, std::string> m_currentSectionStyle;
77  std::map<std::string, std::string> m_currentParagraphStyle;
78  std::map<std::string, std::string> m_currentCharacterStyle;
79 
80  double m_pageWidth;
81  double m_pageHeight;
97 
100 
101  bool m_isNote;
102 
106 
107  std::stack<ABWContentTableState> m_tableStates;
108  std::stack<std::pair<int, ABWListElement *> > m_listLevels;
109 };
110 
112 {
113 public:
114  ABWContentCollector(WPXDocumentInterface *iface, const std::map<int, int> &tableSizes,
115  const std::map<std::string, ABWData> &data,
116  const std::map<int, ABWListElement *> &listElements);
117  virtual ~ABWContentCollector();
118 
119  // collector functions
120 
121  void collectTextStyle(const char *name, const char *basedon, const char *followedby, const char *props);
122  void collectParagraphProperties(const char *level, const char *listid, const char *parentid, const char *style, const char *props);
123  void collectSectionProperties(const char *footer, const char *footerLeft, const char *footerFirst, const char *footerLast,
124  const char *header, const char *headerLeft, const char *headerFirst, const char *headerLast,
125  const char *props);
126  void collectCharacterProperties(const char *style, const char *props);
127  void collectPageSize(const char *width, const char *height, const char *units, const char *pageScale);
129  void closeSpan();
130  void openLink(const char *href);
131  void closeLink();
132  void openFoot(const char *id);
133  void closeFoot();
134  void openEndnote(const char *id);
135  void closeEndnote();
136  void endSection();
137  void startDocument();
138  void endDocument();
139  void insertLineBreak();
140  void insertColumnBreak();
141  void insertPageBreak();
142  void insertText(const char *text);
143  void insertImage(const char *dataid, const char *props);
144  void collectList(const char *, const char *, const char *, const char *, const char *, const char *) {}
145 
146  void collectData(const char *name, const char *mimeType, const WPXBinaryData &data);
147  void collectHeaderFooter(const char *id, const char *type);
148 
149  void openTable(const char *props);
150  void closeTable();
151  void openCell(const char *props);
152  void closeCell();
153 
154 
155 private:
158 
159  void _openPageSpan();
160  void _closePageSpan();
161 
162  void _openSection();
163  void _closeSection();
164 
165  void _openParagraph();
166  void _closeParagraph();
167 
168  void _openListElement();
169  void _closeListElement();
170 
171  void _handleListChange();
172  void _changeList();
173  void _recurseListLevels(int oldLevel, int newLevel, int listId);
174  void _writeOutDummyListLevels(int oldLevel, int newLevel);
175 
176  void _openSpan();
177  void _closeSpan();
178 
179  void _openTable();
180  void _closeTable();
181  void _openTableRow();
182  void _closeTableRow();
183  void _openTableCell();
184  void _closeTableCell();
185 
186  void _openHeader();
187  void _closeHeader();
188  void _openFooter();
189  void _closeFooter();
190 
191  void _recurseTextProperties(const char *name, std::map<std::string, std::string> &styleProps);
192  std::string _findParagraphProperty(const char *name);
193  std::string _findCharacterProperty(const char *name);
194  std::string _findTableProperty(const char *name);
195  std::string _findCellProperty(const char *name);
196  std::string _findSectionProperty(const char *name);
197 
198  void _fillParagraphProperties(WPXPropertyList &propList, WPXPropertyListVector &tabStops, bool isListElement);
199 
201  WPXDocumentInterface *m_iface;
202  std::stack<ABWContentParsingState *> m_parsingStates;
203  std::set<std::string> m_dontLoop;
204  std::map<std::string, ABWStyle> m_textStyles;
205 
206  const std::map<std::string, ABWData> &m_data;
207  const std::map<int, int> &m_tableSizes;
210  const std::map<int, ABWListElement *> &m_listElements;
211  std::vector<ABWListElement *> m_dummyListElements;
212 };
213 
214 } // namespace libabw
215 
216 #endif /* __ABWCOLLECTOR_H__ */
217 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
std::string _findSectionProperty(const char *name)
Definition: ABWContentCollector.cpp:464
void collectData(const char *name, const char *mimeType, const WPXBinaryData &data)
Definition: ABWContentCollector.cpp:1523
void collectHeaderFooter(const char *id, const char *type)
Definition: ABWContentCollector.cpp:638
std::map< std::string, std::string > m_currentCellProperties
Definition: ABWContentCollector.h:46
bool m_inParagraphOrListElement
Definition: ABWContentCollector.h:74
void collectPageSize(const char *width, const char *height, const char *units, const char *pageScale)
Definition: ABWContentCollector.cpp:667
void _closePageSpan()
Definition: ABWContentCollector.cpp:855
ABWContentParsingState()
Definition: ABWContentCollector.cpp:282
void openFoot(const char *id)
Definition: ABWContentCollector.cpp:1381
std::stack< ABWContentParsingState * > m_parsingStates
Definition: ABWContentCollector.h:202
void openTable(const char *props)
Definition: ABWContentCollector.cpp:1449
bool m_isSpanOpened
Definition: ABWContentCollector.h:71
bool m_isRowWithoutCell
Definition: ABWContentCollector.h:56
ABWContentCollector & operator=(const ABWContentCollector &)
Definition: ABWContentCollector.h:30
void _openParagraph()
Definition: ABWContentCollector.cpp:1015
void closeLink()
Definition: ABWContentCollector.cpp:779
std::map< std::string, std::string > m_currentSectionStyle
Definition: ABWContentCollector.h:76
bool m_isCellWithoutParagraph
Definition: ABWContentCollector.h:55
int m_currentListId
Definition: ABWContentCollector.h:104
~ABWContentTableState()
Definition: ABWContentCollector.cpp:278
void _changeList()
Definition: ABWContentCollector.cpp:1625
void _closeFooter()
Definition: ABWContentCollector.cpp:1195
bool m_isFooterOpened
Definition: ABWContentCollector.h:69
std::map< std::string, ABWStyle > m_textStyles
Definition: ABWContentCollector.h:204
void insertColumnBreak()
Definition: ABWContentCollector.cpp:800
bool m_deferredColumnBreak
Definition: ABWContentCollector.h:99
std::vector< ABWListElement * > m_dummyListElements
Definition: ABWContentCollector.h:211
void _openListElement()
Definition: ABWContentCollector.cpp:1056
int m_footerLeftId
Definition: ABWContentCollector.h:87
void endDocument()
Definition: ABWContentCollector.cpp:711
void _recurseTextProperties(const char *name, std::map< std::string, std::string > &styleProps)
Definition: ABWContentCollector.cpp:416
void closeParagraphOrListElement()
Definition: ABWContentCollector.cpp:748
void openEndnote(const char *id)
Definition: ABWContentCollector.cpp:1415
Definition: ABWContentCollector.h:111
void endSection()
Definition: ABWContentCollector.cpp:739
void closeEndnote()
Definition: ABWContentCollector.cpp:1432
const std::map< int, ABWListElement * > & m_listElements
Definition: ABWContentCollector.h:210
bool m_isPageSpanOpened
Definition: ABWContentCollector.h:66
void collectParagraphProperties(const char *level, const char *listid, const char *parentid, const char *style, const char *props)
Definition: ABWContentCollector.cpp:487
void insertImage(const char *dataid, const char *props)
Definition: ABWContentCollector.cpp:1527
bool m_isTableRowOpened
Definition: ABWContentCollector.h:52
int m_currentTableCol
Definition: ABWContentCollector.h:48
ABWOutputElements m_outputElements
Definition: ABWContentCollector.h:209
int m_tableCounter
Definition: ABWContentCollector.h:208
void _openPageSpan()
Definition: ABWContentCollector.cpp:829
void collectTextStyle(const char *name, const char *basedon, const char *followedby, const char *props)
Definition: ABWContentCollector.cpp:405
Definition: ABWContentCollector.h:27
Definition: ABWContentCollector.h:25
void _closeSection()
Definition: ABWContentCollector.cpp:1157
void _closeTableRow()
Definition: ABWContentCollector.cpp:1322
void insertPageBreak()
Definition: ABWContentCollector.cpp:807
Definition: ABWOutputElements.h:22
int m_currentTableRow
Definition: ABWContentCollector.h:49
Definition: ABWContentCollector.h:59
bool m_isHeaderOpened
Definition: ABWContentCollector.h:68
std::map< std::string, std::string > m_currentTableProperties
Definition: ABWContentCollector.h:45
const std::map< std::string, ABWData > & m_data
Definition: ABWContentCollector.h:206
void _closeTableCell()
Definition: ABWContentCollector.cpp:1365
ABWContentTableState()
Definition: ABWContentCollector.cpp:246
bool m_deferredPageBreak
Definition: ABWContentCollector.h:98
WPXDocumentInterface * m_iface
Definition: ABWContentCollector.h:201
void closeTable()
Definition: ABWContentCollector.cpp:1484
int m_headerId
Definition: ABWContentCollector.h:90
int m_footerId
Definition: ABWContentCollector.h:86
void _openTableCell()
Definition: ABWContentCollector.cpp:1339
void _openTableRow()
Definition: ABWContentCollector.cpp:1307
std::map< std::string, std::string > m_currentCharacterStyle
Definition: ABWContentCollector.h:78
void startDocument()
Definition: ABWContentCollector.cpp:684
int m_headerFirstId
Definition: ABWContentCollector.h:92
Definition: ABWContentCollector.h:26
double m_pageMarginRight
Definition: ABWContentCollector.h:85
void _closeHeader()
Definition: ABWContentCollector.cpp:1175
double m_pageMarginTop
Definition: ABWContentCollector.h:82
void _recurseListLevels(int oldLevel, int newLevel, int listId)
Definition: ABWContentCollector.cpp:1604
int m_footerLastId
Definition: ABWContentCollector.h:89
std::string _findTableProperty(const char *name)
Definition: ABWContentCollector.cpp:444
void closeSpan()
Definition: ABWContentCollector.cpp:786
virtual ~ABWContentCollector()
Definition: ABWContentCollector.cpp:397
double m_pageHeight
Definition: ABWContentCollector.h:81
void closeFoot()
Definition: ABWContentCollector.cpp:1398
void _openSpan()
Definition: ABWContentCollector.cpp:1095
void _closeTable()
Definition: ABWContentCollector.cpp:1294
void insertLineBreak()
Definition: ABWContentCollector.cpp:792
void _fillParagraphProperties(WPXPropertyList &propList, WPXPropertyListVector &tabStops, bool isListElement)
Definition: ABWContentCollector.cpp:938
std::string basedon
Definition: ABWContentCollector.h:34
std::string _findCharacterProperty(const char *name)
Definition: ABWContentCollector.cpp:474
bool m_isTableCellOpened
Definition: ABWContentCollector.h:54
void _handleListChange()
Definition: ABWContentCollector.cpp:1563
void closeCell()
Definition: ABWContentCollector.cpp:1514
std::string followedby
Definition: ABWContentCollector.h:35
double m_pageWidth
Definition: ABWContentCollector.h:80
void openLink(const char *href)
Definition: ABWContentCollector.cpp:759
~ABWStyle()
Definition: ABWContentCollector.h:33
int m_currentListLevel
Definition: ABWContentCollector.h:103
~ABWContentParsingState()
Definition: ABWContentCollector.cpp:376
double m_pageMarginBottom
Definition: ABWContentCollector.h:83
bool m_isTableColumnOpened
Definition: ABWContentCollector.h:53
void _openTable()
Definition: ABWContentCollector.cpp:1235
void _openFooter()
Definition: ABWContentCollector.cpp:914
void _closeListElement()
Definition: ABWContentCollector.cpp:1632
std::set< std::string > m_dontLoop
Definition: ABWContentCollector.h:203
Definition: ABWCollector.h:101
int m_currentHeaderFooterId
Definition: ABWContentCollector.h:94
bool m_isDocumentStarted
Definition: ABWContentCollector.h:65
int m_headerLastId
Definition: ABWContentCollector.h:93
void openCell(const char *props)
Definition: ABWContentCollector.cpp:1493
void collectList(const char *, const char *, const char *, const char *, const char *, const char *)
Definition: ABWContentCollector.h:144
void _openHeader()
Definition: ABWContentCollector.cpp:926
ABWContext
Definition: ABWContentCollector.h:23
double m_pageMarginLeft
Definition: ABWContentCollector.h:84
std::stack< ABWContentTableState > m_tableStates
Definition: ABWContentCollector.h:107
int m_footerFirstId
Definition: ABWContentCollector.h:88
void _openSection()
Definition: ABWContentCollector.cpp:868
int m_currentTableCellNumberInRow
Definition: ABWContentCollector.h:50
void collectSectionProperties(const char *footer, const char *footerLeft, const char *footerFirst, const char *footerLast, const char *header, const char *headerLeft, const char *headerFirst, const char *headerLast, const char *props)
Definition: ABWContentCollector.cpp:523
void _writeOutDummyListLevels(int oldLevel, int newLevel)
Definition: ABWContentCollector.cpp:1591
WPXString m_currentHeaderFooterOccurrence
Definition: ABWContentCollector.h:95
bool m_isNote
Definition: ABWContentCollector.h:101
std::stack< std::pair< int, ABWListElement * > > m_listLevels
Definition: ABWContentCollector.h:108
ABWContentCollector(WPXDocumentInterface *iface, const std::map< int, int > &tableSizes, const std::map< std::string, ABWData > &data, const std::map< int, ABWListElement * > &listElements)
Definition: ABWContentCollector.cpp:380
ABWStyle()
Definition: ABWContentCollector.h:32
bool m_isListElementOpened
Definition: ABWContentCollector.h:73
void _closeSpan()
Definition: ABWContentCollector.cpp:1227
void insertText(const char *text)
Definition: ABWContentCollector.cpp:814
Definition: ABWContentCollector.h:39
void collectCharacterProperties(const char *style, const char *props)
Definition: ABWContentCollector.cpp:510
std::string _findParagraphProperty(const char *name)
Definition: ABWContentCollector.cpp:434
void _closeParagraph()
Definition: ABWContentCollector.cpp:1215
std::string _findCellProperty(const char *name)
Definition: ABWContentCollector.cpp:454
bool m_isParagraphOpened
Definition: ABWContentCollector.h:72
std::map< std::string, std::string > m_currentParagraphStyle
Definition: ABWContentCollector.h:77
int m_headerLeftId
Definition: ABWContentCollector.h:91
ABWContentParsingState * m_ps
Definition: ABWContentCollector.h:200
ABWContext m_parsingContext
Definition: ABWContentCollector.h:96
int m_currentTableId
Definition: ABWContentCollector.h:51
bool m_isFirstTextInListElement
Definition: ABWContentCollector.h:105
const std::map< int, int > & m_tableSizes
Definition: ABWContentCollector.h:207
bool m_isSectionOpened
Definition: ABWContentCollector.h:67
std::map< std::string, std::string > properties
Definition: ABWContentCollector.h:36

Generated for libwpd by doxygen 1.8.5