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 <memory>
14 #include <vector>
15 #include <stack>
16 #include <set>
17 
18 #include <librevenge/librevenge.h>
19 #include "ABWOutputElements.h"
20 #include "ABWCollector.h"
21 
22 namespace libabw
23 {
24 
26 {
33 };
34 
35 struct ABWStyle
36 {
38  ~ABWStyle() {}
39  std::string basedon;
40  std::string followedby;
42 };
43 
45 {
49 
52 
62 };
63 
65 {
69 
75 
77 
82 
86 
87  double m_pageWidth;
88  double m_pageHeight;
102  librevenge::RVNGString m_currentHeaderFooterOccurrence;
104 
107 
108  bool m_isNote;
109 
113 
114  std::stack<ABWContentTableState> m_tableStates;
115  std::stack<std::pair<int, std::shared_ptr<ABWListElement>>> m_listLevels;
116 };
117 
119 {
120 public:
121  ABWContentCollector(librevenge::RVNGTextInterface *iface, const std::map<int, int> &tableSizes,
122  const std::map<std::string, ABWData> &data,
123  const std::map<int, std::shared_ptr<ABWListElement>> &listElements);
124  ~ABWContentCollector() override;
125 
126  // collector functions
127 
128  void collectTextStyle(const char *name, const char *basedon, const char *followedby, const char *props) override;
129  void collectDocumentProperties(const char *props) override;
130  void collectParagraphProperties(const char *level, const char *listid, const char *parentid, const char *style, const char *props) override;
131  void collectSectionProperties(const char *footer, const char *footerLeft, const char *footerFirst, const char *footerLast,
132  const char *header, const char *headerLeft, const char *headerFirst, const char *headerLast,
133  const char *props) override;
134  void collectCharacterProperties(const char *style, const char *props) override;
135  void collectPageSize(const char *width, const char *height, const char *units, const char *pageScale) override;
136  void closeParagraphOrListElement() override;
137  void closeSpan() override;
138  void openLink(const char *href) override;
139  void closeLink() override;
140  void openFoot(const char *id) override;
141  void closeFoot() override;
142  void openEndnote(const char *id) override;
143  void closeEndnote() override;
144  void openField(const char *type, const char *id) override;
145  void closeField() override;
146  void endSection() override;
147  void startDocument() override;
148  void endDocument() override;
149  void insertLineBreak() override;
150  void insertColumnBreak() override;
151  void insertPageBreak() override;
152  void insertText(const char *text) override;
153  void insertImage(const char *dataid, const char *props) override;
154  void collectList(const char *, const char *, const char *, const char *, const char *, const char *) override {}
155 
156  void collectData(const char *name, const char *mimeType, const librevenge::RVNGBinaryData &data) override;
157  void collectHeaderFooter(const char *id, const char *type) override;
158 
159  void openTable(const char *props) override;
160  void closeTable() override;
161  void openCell(const char *props) override;
162  void closeCell() override;
163 
164  void openFrame(const char *props, const char *imageId, const char *title, const char *alt) override;
165  void closeFrame(ABWOutputElements *(&elements), bool &pageFrame) override;
166  void addFrameElements(ABWOutputElements &elements, bool pageFrame) override;
167 
168  void addMetadataEntry(const char *name, const char *value) override;
169 
170 private:
173 
174  void _setMetadata();
175 
176  void _addBorderProperties(const std::map<std::string, std::string> &map, librevenge::RVNGPropertyList &propList, const std::string &defaultUndefBorderProp="");
177 
178  void _openPageSpan();
179  void _closePageSpan();
180 
181  void _openSection();
182  void _closeSection();
183 
185  void _openBlock();
187  void _closeBlock();
188 
189  void _openParagraph();
190  void _closeParagraph();
191 
192  void _openListElement();
193  void _closeListElement();
194 
195  void _handleListChange();
196  void _changeList();
197  void _recurseListLevels(int oldLevel, int newLevel, int listId);
198  void _writeOutDummyListLevels(int oldLevel, int newLevel);
199 
200  void _openSpan();
201  void _closeSpan();
202 
203  void _openTable();
204  void _closeTable();
205  void _openTableRow();
206  void _closeTableRow();
207  void _openTableCell();
208  void _closeTableCell();
209 
210  void _openHeader();
211  void _closeHeader();
212  void _openFooter();
213  void _closeFooter();
214 
215  void _recurseTextProperties(const char *name, ABWPropertyMap &styleProps);
216  std::string _findDocumentProperty(const char *name);
217  std::string _findParagraphProperty(const char *name);
218  std::string _findCharacterProperty(const char *name);
219  std::string _findTableProperty(const char *name);
220  std::string _findCellProperty(const char *name);
221  std::string _findSectionProperty(const char *name);
222  std::string _findMetadataEntry(const char *name);
223 
224  void _fillParagraphProperties(librevenge::RVNGPropertyList &propList, bool isListElement);
225  bool _convertFieldDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propVect);
226 
227  int getCellPos(const char *startProp, const char *endProp, int defStart);
228 
229  std::shared_ptr<ABWContentParsingState> m_ps;
230  librevenge::RVNGTextInterface *m_iface;
231  std::stack<std::shared_ptr<ABWContentParsingState> > m_parsingStates;
232  std::set<std::string> m_dontLoop;
233  std::map<std::string, ABWStyle> m_textStyles;
234 
237 
238  const std::map<std::string, ABWData> &m_data;
239  const std::map<int, int> &m_tableSizes;
243  const std::map<int, std::shared_ptr<ABWListElement>> &m_listElements;
244  std::vector<std::shared_ptr<ABWListElement>> m_dummyListElements;
245 };
246 
247 } // namespace libabw
248 
249 #endif /* __ABWCOLLECTOR_H__ */
250 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
Definition: ABWCollector.h:108
Definition: ABWContentCollector.h:119
void _openTableRow()
Definition: ABWContentCollector.cpp:1508
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) override
Definition: ABWContentCollector.cpp:625
const std::map< int, std::shared_ptr< ABWListElement > > & m_listElements
Definition: ABWContentCollector.h:243
const std::map< int, int > & m_tableSizes
Definition: ABWContentCollector.h:239
void startDocument() override
Definition: ABWContentCollector.cpp:786
void _closePageSpan()
Definition: ABWContentCollector.cpp:972
void _closeBlock()
close the current paragraph or list element
Definition: ABWContentCollector.cpp:1157
void _recurseListLevels(int oldLevel, int newLevel, int listId)
Definition: ABWContentCollector.cpp:2329
void collectDocumentProperties(const char *props) override
Definition: ABWContentCollector.cpp:530
void _fillParagraphProperties(librevenge::RVNGPropertyList &propList, bool isListElement)
Definition: ABWContentCollector.cpp:1058
librevenge::RVNGTextInterface * m_iface
Definition: ABWContentCollector.h:230
void _openPageSpan()
Definition: ABWContentCollector.cpp:945
std::stack< std::shared_ptr< ABWContentParsingState > > m_parsingStates
Definition: ABWContentCollector.h:231
void collectList(const char *, const char *, const char *, const char *, const char *, const char *) override
Definition: ABWContentCollector.h:154
ABWContentCollector(librevenge::RVNGTextInterface *iface, const std::map< int, int > &tableSizes, const std::map< std::string, ABWData > &data, const std::map< int, std::shared_ptr< ABWListElement >> &listElements)
Definition: ABWContentCollector.cpp:424
void _closeParagraph()
Definition: ABWContentCollector.cpp:1410
void openEndnote(const char *id) override
Definition: ABWContentCollector.cpp:1615
void _openParagraph()
Definition: ABWContentCollector.cpp:1169
ABWOutputElements m_outputElements
Definition: ABWContentCollector.h:241
void _closeHeader()
Definition: ABWContentCollector.cpp:1372
std::string _findTableProperty(const char *name)
Definition: ABWContentCollector.cpp:500
std::string _findSectionProperty(const char *name)
Definition: ABWContentCollector.cpp:512
void openField(const char *type, const char *id) override
Definition: ABWContentCollector.cpp:1647
void _openTable()
Definition: ABWContentCollector.cpp:1430
void _setMetadata()
Definition: ABWContentCollector.cpp:829
bool _convertFieldDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propVect)
Definition: ABWContentCollector.cpp:1862
void closeSpan() override
Definition: ABWContentCollector.cpp:902
void openCell(const char *props) override
Definition: ABWContentCollector.cpp:2015
std::string _findCellProperty(const char *name)
Definition: ABWContentCollector.cpp:506
void _openListElement()
Definition: ABWContentCollector.cpp:1216
std::string _findDocumentProperty(const char *name)
Definition: ABWContentCollector.cpp:490
void openFrame(const char *props, const char *imageId, const char *title, const char *alt) override
Definition: ABWContentCollector.cpp:2078
void _openTableCell()
Definition: ABWContentCollector.cpp:1540
void collectCharacterProperties(const char *style, const char *props) override
Definition: ABWContentCollector.cpp:607
void _closeFooter()
Definition: ABWContentCollector.cpp:1391
std::string _findCharacterProperty(const char *name)
Definition: ABWContentCollector.cpp:517
void _openSection()
Definition: ABWContentCollector.cpp:985
void closeParagraphOrListElement() override
Definition: ABWContentCollector.cpp:872
~ABWContentCollector() override
Definition: ABWContentCollector.cpp:444
std::vector< std::shared_ptr< ABWListElement > > m_dummyListElements
Definition: ABWContentCollector.h:244
void _closeTableRow()
Definition: ABWContentCollector.cpp:1523
void openFoot(const char *id) override
Definition: ABWContentCollector.cpp:1583
void _handleListChange()
Definition: ABWContentCollector.cpp:2287
void endDocument() override
Definition: ABWContentCollector.cpp:801
std::string _findParagraphProperty(const char *name)
Definition: ABWContentCollector.cpp:495
std::shared_ptr< ABWContentParsingState > m_ps
Definition: ABWContentCollector.h:229
std::map< std::string, ABWStyle > m_textStyles
Definition: ABWContentCollector.h:233
void collectTextStyle(const char *name, const char *basedon, const char *followedby, const char *props) override
Definition: ABWContentCollector.cpp:448
void _closeTable()
Definition: ABWContentCollector.cpp:1495
void closeLink() override
Definition: ABWContentCollector.cpp:895
const std::map< std::string, ABWData > & m_data
Definition: ABWContentCollector.h:238
void _openFooter()
Definition: ABWContentCollector.cpp:1034
ABWContentCollector & operator=(const ABWContentCollector &)
ABWPropertyMap m_documentStyle
Definition: ABWContentCollector.h:235
void collectData(const char *name, const char *mimeType, const librevenge::RVNGBinaryData &data) override
Definition: ABWContentCollector.cpp:2243
ABWPropertyMap m_metadata
Definition: ABWContentCollector.h:236
void insertPageBreak() override
Definition: ABWContentCollector.cpp:922
void _closeSection()
Definition: ABWContentCollector.cpp:1355
void insertText(const char *text) override
Definition: ABWContentCollector.cpp:928
void openTable(const char *props) override
Definition: ABWContentCollector.cpp:1969
void _recurseTextProperties(const char *name, ABWPropertyMap &styleProps)
Definition: ABWContentCollector.cpp:459
void insertLineBreak() override
Definition: ABWContentCollector.cpp:908
void insertImage(const char *dataid, const char *props) override
Definition: ABWContentCollector.cpp:2247
void closeFoot() override
Definition: ABWContentCollector.cpp:1600
std::string _findMetadataEntry(const char *name)
Definition: ABWContentCollector.cpp:525
ABWOutputElements m_pageOutputElements
Definition: ABWContentCollector.h:242
ABWContentCollector(const ABWContentCollector &)
void insertColumnBreak() override
Definition: ABWContentCollector.cpp:916
void addFrameElements(ABWOutputElements &elements, bool pageFrame) override
Definition: ABWContentCollector.cpp:2232
void addMetadataEntry(const char *name, const char *value) override
Definition: ABWContentCollector.cpp:2372
void _openBlock()
open a paragraph or a list element (depend on m_currentListLevel)
Definition: ABWContentCollector.cpp:1147
void _closeListElement()
Definition: ABWContentCollector.cpp:2359
void _openHeader()
Definition: ABWContentCollector.cpp:1046
void _openSpan()
Definition: ABWContentCollector.cpp:1261
void _addBorderProperties(const std::map< std::string, std::string > &map, librevenge::RVNGPropertyList &propList, const std::string &defaultUndefBorderProp="")
Definition: ABWContentCollector.cpp:536
std::set< std::string > m_dontLoop
Definition: ABWContentCollector.h:232
void _closeTableCell()
Definition: ABWContentCollector.cpp:1568
int getCellPos(const char *startProp, const char *endProp, int defStart)
Definition: ABWContentCollector.cpp:2035
void collectParagraphProperties(const char *level, const char *listid, const char *parentid, const char *style, const char *props) override
Definition: ABWContentCollector.cpp:583
void openLink(const char *href) override
Definition: ABWContentCollector.cpp:882
void closeTable() override
Definition: ABWContentCollector.cpp:2007
void collectPageSize(const char *width, const char *height, const char *units, const char *pageScale) override
Definition: ABWContentCollector.cpp:769
void closeEndnote() override
Definition: ABWContentCollector.cpp:1632
int m_tableCounter
Definition: ABWContentCollector.h:240
void _writeOutDummyListLevels(int oldLevel, int newLevel)
Definition: ABWContentCollector.cpp:2315
void closeField() override
Definition: ABWContentCollector.cpp:1965
void collectHeaderFooter(const char *id, const char *type) override
Definition: ABWContentCollector.cpp:740
void closeFrame(ABWOutputElements *(&elements), bool &pageFrame) override
Definition: ABWContentCollector.cpp:2207
void closeCell() override
Definition: ABWContentCollector.cpp:2069
void endSection() override
Definition: ABWContentCollector.cpp:863
void _closeSpan()
Definition: ABWContentCollector.cpp:1422
void _changeList()
Definition: ABWContentCollector.cpp:2353
Definition: ABWOutputElements.h:25
Definition: AbiDocument.cpp:17
std::map< std::string, std::string > ABWPropertyMap
Definition: ABWCollector.h:39
ABWContext
Definition: ABWContentCollector.h:26
@ ABW_SECTION
Definition: ABWContentCollector.h:27
@ ABW_FRAME_IMAGE
Definition: ABWContentCollector.h:30
@ ABW_HEADER
Definition: ABWContentCollector.h:28
@ ABW_FRAME_TEXTBOX
Definition: ABWContentCollector.h:31
@ ABW_FOOTER
Definition: ABWContentCollector.h:29
@ ABW_FRAME_UNKNOWN
Definition: ABWContentCollector.h:32
Definition: ABWContentCollector.h:65
double m_pageMarginTop
Definition: ABWContentCollector.h:89
double m_pageWidth
Definition: ABWContentCollector.h:87
int m_footerFirstId
Definition: ABWContentCollector.h:95
double m_pageMarginRight
Definition: ABWContentCollector.h:92
ABWContentParsingState()
Definition: ABWContentCollector.cpp:322
bool m_deferredPageBreak
Definition: ABWContentCollector.h:105
bool m_isParagraphOpened
Definition: ABWContentCollector.h:79
ABWPropertyMap m_currentParagraphStyle
Definition: ABWContentCollector.h:84
bool m_isPageSpanOpened
Definition: ABWContentCollector.h:71
ABWPropertyMap m_currentSectionStyle
Definition: ABWContentCollector.h:83
bool m_isDocumentStarted
Definition: ABWContentCollector.h:70
double m_pageHeight
Definition: ABWContentCollector.h:88
int m_headerId
Definition: ABWContentCollector.h:97
bool m_isFooterOpened
Definition: ABWContentCollector.h:74
int m_headerFirstId
Definition: ABWContentCollector.h:99
int m_headerLeftId
Definition: ABWContentCollector.h:98
bool m_isListElementOpened
Definition: ABWContentCollector.h:80
bool m_isSpanOpened
Definition: ABWContentCollector.h:78
int m_footerId
Definition: ABWContentCollector.h:93
bool m_isSectionOpened
Definition: ABWContentCollector.h:72
int m_currentListLevel
Definition: ABWContentCollector.h:110
bool m_isHeaderOpened
Definition: ABWContentCollector.h:73
librevenge::RVNGString m_currentHeaderFooterOccurrence
Definition: ABWContentCollector.h:102
bool m_inParagraphOrListElement
Definition: ABWContentCollector.h:81
ABWContext m_parsingContext
Definition: ABWContentCollector.h:103
~ABWContentParsingState()
Definition: ABWContentCollector.cpp:420
int m_currentListId
Definition: ABWContentCollector.h:111
double m_pageMarginBottom
Definition: ABWContentCollector.h:90
bool m_isNote
Definition: ABWContentCollector.h:108
int m_footerLeftId
Definition: ABWContentCollector.h:94
ABWPropertyMap m_currentCharacterStyle
Definition: ABWContentCollector.h:85
bool m_isPageFrame
Definition: ABWContentCollector.h:76
double m_pageMarginLeft
Definition: ABWContentCollector.h:91
int m_footerLastId
Definition: ABWContentCollector.h:96
std::stack< std::pair< int, std::shared_ptr< ABWListElement > > > m_listLevels
Definition: ABWContentCollector.h:115
int m_currentHeaderFooterId
Definition: ABWContentCollector.h:101
bool m_deferredColumnBreak
Definition: ABWContentCollector.h:106
std::stack< ABWContentTableState > m_tableStates
Definition: ABWContentCollector.h:114
bool m_isFirstTextInListElement
Definition: ABWContentCollector.h:112
int m_headerLastId
Definition: ABWContentCollector.h:100
Definition: ABWContentCollector.h:45
ABWContentTableState()
Definition: ABWContentCollector.cpp:286
bool m_isTableRowOpened
Definition: ABWContentCollector.h:57
int m_currentTableRow
Definition: ABWContentCollector.h:54
int m_currentTableId
Definition: ABWContentCollector.h:56
bool m_isRowWithoutCell
Definition: ABWContentCollector.h:61
bool m_isTableCellOpened
Definition: ABWContentCollector.h:59
bool m_isTableColumnOpened
Definition: ABWContentCollector.h:58
bool m_isCellWithoutParagraph
Definition: ABWContentCollector.h:60
int m_currentTableCellNumberInRow
Definition: ABWContentCollector.h:55
~ABWContentTableState()
Definition: ABWContentCollector.cpp:318
ABWPropertyMap m_currentTableProperties
Definition: ABWContentCollector.h:50
int m_currentTableCol
Definition: ABWContentCollector.h:53
ABWPropertyMap m_currentCellProperties
Definition: ABWContentCollector.h:51
Definition: ABWContentCollector.h:36
ABWStyle()
Definition: ABWContentCollector.h:37
ABWPropertyMap properties
Definition: ABWContentCollector.h:41
std::string followedby
Definition: ABWContentCollector.h:40
std::string basedon
Definition: ABWContentCollector.h:39
~ABWStyle()
Definition: ABWContentCollector.h:38

Generated for libwpd by doxygen 1.9.1