WKSContentListener.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* libwps
3  * Version: MPL 2.0 / LGPLv2.1+
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  * Major Contributor(s):
10  * Copyright (C) 2006, 2007 Andrew Ziem
11  * Copyright (C) 2006 Fridrich Strba (fridrich.strba@bluewin.ch)
12  * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
13  * Copyright (C) 2003 Marc Maurer (uwog@uwog.net)
14  *
15  * For minor contributions see the git repository.
16  *
17  * Alternatively, the contents of this file may be used under the terms
18  * of the GNU Lesser General Public License Version 2.1 or later
19  * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
20  * applicable instead of those above.
21  *
22  * For further information visit http://libwps.sourceforge.net
23  */
24 
25 #ifndef WKSCONTENTLISTENER_H
26 #define WKSCONTENTLISTENER_H
27 
28 #include <vector>
29 
30 #include <librevenge/librevenge.h>
31 
32 #include "libwps_internal.h"
33 
34 #include "WPSEntry.h"
35 #include "WPSGraphicStyle.h"
36 
37 #include "WPSListener.h"
38 
39 class WPSCellFormat;
40 class WKSChart;
41 struct WPSColumnFormat;
42 class WPSGraphicShape;
43 class WPSGraphicStyle;
44 class WPSList;
45 class WPSPageSpan;
46 struct WPSParagraph;
47 struct WPSRowFormat;
48 struct WPSTabStop;
49 
52 
53 class WKSContentListener final : public WPSListener
54 {
55 public:
58  {
62  : m_type(F_Text)
63  , m_content()
64  , m_longValue(0)
65  , m_doubleValue(0)
66  , m_fileName()
67  {
68  for (auto &pos : m_position) pos=Vec2i(0,0);
69  for (auto &pos : m_positionRelative) pos=Vec2b(false,false);
70  for (auto &id : m_sheetId) id=-1;
71  }
73  librevenge::RVNGPropertyList getPropertyList() const;
75  friend std::ostream &operator<<(std::ostream &o, FormulaInstruction const &inst);
79  std::string m_content;
81  double m_longValue;
83  double m_doubleValue;
89  librevenge::RVNGString m_sheetName[2];
94  int m_sheetId[2];
96  librevenge::RVNGString m_fileName;
97  };
99  struct CellContent
100  {
106  , m_value(0.0)
107  , m_valueSet(false)
108  , m_textEntry()
109  , m_formula() { }
113  friend std::ostream &operator<<(std::ostream &o, CellContent const &cell);
114 
116  bool empty() const
117  {
118  if (m_contentType == C_NUMBER) return false;
119  if (m_contentType == C_TEXT && !m_textEntry.valid()) return false;
120  if (m_contentType == C_FORMULA && (m_formula.size() || isValueSet())) return false;
121  return true;
122  }
124  void setValue(double value)
125  {
126  m_value = value;
127  m_valueSet = true;
128  }
130  bool isValueSet() const
131  {
132  return m_valueSet;
133  }
135  bool hasText() const
136  {
137  return m_textEntry.valid();
138  }
140  static bool double2Date(double val, int &Y, int &M, int &D);
142  static bool double2Time(double val, int &H, int &M, int &S);
143 
147  double m_value;
153  std::vector<FormulaInstruction> m_formula;
154  };
155 
156  WKSContentListener(std::vector<WPSPageSpan> const &pageList, librevenge::RVNGSpreadsheetInterface *documentInterface);
157  ~WKSContentListener() final;
158 
159  void setDocumentLanguage(int lcid) final;
160  void setMetaData(const librevenge::RVNGPropertyList &list);
161 
162  void startDocument();
163  void endDocument();
164  void handleSubDocument(WPSSubDocumentPtr &subDocument, libwps::SubDocumentType subDocumentType);
165 
166  // ------ text data -----------
167 
169  void insertCharacter(uint8_t character) final;
173  void insertUnicode(uint32_t character) final;
175  void insertUnicodeString(librevenge::RVNGString const &str) final;
176 
177  void insertTab() final;
178  void insertEOL(bool softBreak=false) final;
179  void insertBreak(const uint8_t breakType) final;
180 
181  // ------ text format -----------
183  void setFont(const WPSFont &font) final;
185  WPSFont const &getFont() const final;
186 
187  // ------ paragraph format -----------
189  bool isParagraphOpened() const final;
191  void setParagraph(const WPSParagraph &para) final;
193  WPSParagraph const &getParagraph() const final;
194 
195  // ------- fields ----------------
197  void insertField(WPSField const &field) final;
198 
199  // ------- subdocument -----------------
201  void insertComment(WPSSubDocumentPtr &subDocument);
203  void insertPicture(WPSPosition const &pos, const librevenge::RVNGBinaryData &binaryData,
204  std::string type="image/pict", WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle());
206  void insertObject(WPSPosition const &pos, const WPSEmbeddedObject &obj,
207  WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle());
209  void insertPicture(WPSPosition const &pos, WPSGraphicShape const &shape, WPSGraphicStyle const &style);
211  void insertTextBox(WPSPosition const &pos, WPSSubDocumentPtr subDocument,
212  WPSGraphicStyle const &frameStyle=WPSGraphicStyle::emptyStyle());
214  bool openGroup(WPSPosition const &pos) final;
216  void closeGroup() final;
217 
218  // ------- sheet -----------------
220  void openSheet(std::vector<WPSColumnFormat> const &columns, librevenge::RVNGString const &name="");
222  void closeSheet();
224  void openSheetRow(WPSRowFormat const &f, int numRepeated=1);
226  void closeSheetRow();
231  void openSheetCell(WPSCell const &cell, CellContent const &content, int numRepeated=1);
233  void closeSheetCell();
234 
235  // ------- chart -----------------
237  void insertChart(WPSPosition const &pos, WKSChart const &chart,
238  WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle());
239 protected:
240  void _openPageSpan();
241  void _closePageSpan();
242 
243  void _handleFrameParameters(librevenge::RVNGPropertyList &propList, WPSPosition const &pos);
244  bool _openFrame(WPSPosition const &pos, WPSGraphicStyle const &style);
245  void _closeFrame();
246 
247  void _startSubDocument();
248  void _endSubDocument();
249 
250  void _openParagraph();
251  void _closeParagraph();
252  void _appendParagraphProperties(librevenge::RVNGPropertyList &propList, const bool isListElement=false);
253  void _resetParagraphState(const bool isListElement=false);
254 
255  void _openSpan();
256  void _closeSpan();
257 
258  void _flushText();
259  void _flushDeferredTabs();
260 
261  void _insertBreakIfNecessary(librevenge::RVNGPropertyList &propList);
262 
266  std::shared_ptr<WKSContentParsingState> _pushParsingState();
268  void _popParsingState();
269 
270 protected:
271  std::shared_ptr<WKSDocumentParsingState> m_ds; // main parse state
272  std::shared_ptr<WKSContentParsingState> m_ps; // parse state
273  std::vector<std::shared_ptr<WKSContentParsingState> > m_psStack;
274  librevenge::RVNGSpreadsheetInterface *m_documentInterface;
275 
276 private:
277  WKSContentListener(const WKSContentListener &) = delete;
278  WKSContentListener &operator=(const WKSContentListener &) = delete;
279 };
280 
281 #endif
282 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
void setFont(const WPSFont &font) final
set the actual font
Definition: WKSContentListener.cpp:285
void insertCharacter(uint8_t character) final
adds a basic character, ..
Definition: WKSContentListener.cpp:192
void closeSheet()
closes this sheet
Definition: WKSContentListener.cpp:1034
CellContent()
constructor
Definition: WKSContentListener.h:104
bool _openFrame(WPSPosition const &pos, WPSGraphicStyle const &style)
Definition: WKSContentListener.cpp:726
void insertField(WPSField const &field) final
adds a field
Definition: WKSContentListener.cpp:325
std::vector< FormulaInstruction > m_formula
the formula list of instruction
Definition: WKSContentListener.h:153
bool valid(bool checkId=false) const
returns true if the zone length is positive
Definition: WPSEntry.h:85
class to store the paragraph properties
Definition: WPSParagraph.h:57
void insertTextBox(WPSPosition const &pos, WPSSubDocumentPtr subDocument, WPSGraphicStyle const &frameStyle=WPSGraphicStyle::emptyStyle())
adds a textbox in given position
Definition: WKSContentListener.cpp:607
librevenge::RVNGString m_sheetName[2]
the sheet name
Definition: WKSContentListener.h:89
Definition: WKSContentListener.h:59
What
Definition: WKSContentListener.h:59
Definition: WKSContentListener.h:102
Definition: libwps_internal.cpp:38
a class used to store a chart associated to a spreadsheet ....
Definition: WKSChart.h:45
bool hasText() const
returns true if the text is set
Definition: WKSContentListener.h:135
void endDocument()
Definition: WKSContentListener.cpp:381
librevenge::RVNGString m_fileName
the file name (external reference)
Definition: WKSContentListener.h:96
the spreadsheet state
Definition: WKSContentListener.cpp:86
What m_type
the type
Definition: WKSContentListener.h:77
double m_longValue
value ( if type==F_Long )
Definition: WKSContentListener.h:81
void closeSheetRow()
closes this row
Definition: WKSContentListener.cpp:1069
std::shared_ptr< WKSContentParsingState > _pushParsingState()
creates a new parsing state (copy of the actual state)
Definition: WKSContentListener.cpp:1279
Definition: WPSOLEStream.h:33
void setParagraph(const WPSParagraph &para) final
sets the actual paragraph
Definition: WKSContentListener.cpp:317
void insertUnicode(uint32_t character) final
adds an unicode character
Definition: WKSContentListener.cpp:204
void _handleFrameParameters(librevenge::RVNGPropertyList &propList, WPSPosition const &pos)
Definition: WKSContentListener.cpp:795
Definition: WKSContentListener.h:59
void _flushDeferredTabs()
Definition: WKSContentListener.cpp:488
define the font properties
Definition: WPSFont.h:36
void _appendParagraphProperties(librevenge::RVNGPropertyList &propList, const bool isListElement=false)
Definition: WKSContentListener.cpp:446
a field
Definition: libwps_internal.h:462
void openSheetRow(WPSRowFormat const &f, int numRepeated=1)
open a row
Definition: WKSContentListener.cpp:1049
Definition: WKSContentListener.h:102
virtual class for content listener
Definition: WPSListener.h:36
static bool double2Time(double val, int &H, int &M, int &S)
conversion beetween double: second since 0:00 and time
Definition: WKSContentListener.cpp:1465
std::vector< std::shared_ptr< WKSContentParsingState > > m_psStack
Definition: WKSContentListener.h:273
void handleSubDocument(WPSSubDocumentPtr &subDocument, libwps::SubDocumentType subDocumentType)
Definition: WKSContentListener.cpp:932
void _openParagraph()
Definition: WKSContentListener.cpp:403
Definition: WKSContentListener.h:102
a structure used to defined the cell format
Definition: WPSCell.h:40
std::shared_ptr< WPSSubDocument > WPSSubDocumentPtr
shared pointer to WPSSubDocument
Definition: libwps_internal.h:111
friend std::ostream & operator<<(std::ostream &o, FormulaInstruction const &inst)
operator<<
Definition: WKSContentListener.cpp:1371
void _openSpan()
Definition: WKSContentListener.cpp:456
bool openGroup(WPSPosition const &pos) final
open a group (not implemented)
Definition: WKSContentListener.cpp:690
WKSContentListener(std::vector< WPSPageSpan > const &pageList, librevenge::RVNGSpreadsheetInterface *documentInterface)
Definition: WKSContentListener.cpp:177
librevenge::RVNGPropertyList getPropertyList() const
return a proplist corresponding to a instruction
Definition: WKSContentListener.cpp:1312
a structure used to defined the cell position, and a format
Definition: WPSCell.h:288
void setMetaData(const librevenge::RVNGPropertyList &list)
Definition: WKSContentListener.cpp:355
double m_value
the cell value
Definition: WKSContentListener.h:147
bool isParagraphOpened() const final
returns true if a paragraph or a list is opened
Definition: WKSContentListener.cpp:307
void insertTab() final
adds an unicode character to a string ( with correct encoding ).
Definition: WKSContentListener.cpp:241
void _resetParagraphState(const bool isListElement=false)
Definition: WKSContentListener.cpp:439
Definition: WKSContentListener.h:59
std::string m_content
the content ( if type == F_Operator or type = F_Function or type==F_Text)
Definition: WKSContentListener.h:79
Definition: WKSContentListener.h:59
a structure used to define a picture style
Definition: WPSGraphicStyle.h:37
WPSParagraph const & getParagraph() const final
returns the actual paragraph
Definition: WKSContentListener.cpp:312
void _closeFrame()
Definition: WKSContentListener.cpp:783
a structure used to define a picture shape
Definition: WPSGraphicShape.h:34
bool m_valueSet
true if the value has been set
Definition: WKSContentListener.h:149
double m_doubleValue
value ( if type==F_Double )
Definition: WKSContentListener.h:83
void setDocumentLanguage(int lcid) final
Definition: WKSContentListener.cpp:347
SubDocumentType
Definition: libwps_internal.h:248
Definition: WKSContentListener.h:102
a small structure used to store the informations about a list
Definition: WPSList.h:36
std::string name(long id)
returns the name given Windows© id
Definition: libwps_tools_win.cpp:7299
Vec2b m_positionRelative[2]
relative cell position ( if type==F_Cell or F_CellList )
Definition: WKSContentListener.h:87
static bool double2Date(double val, int &Y, int &M, int &D)
conversion beetween double days since 1900 and date
Definition: WKSContentListener.cpp:1409
void closeSheetCell()
close a cell
Definition: WKSContentListener.cpp:1193
int m_sheetId[2]
the sheet id
Definition: WKSContentListener.h:94
~CellContent()
destructor
Definition: WKSContentListener.h:111
Definition: WKSContentListener.h:59
void insertPicture(WPSPosition const &pos, const librevenge::RVNGBinaryData &binaryData, std::string type="image/pict", WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle())
adds a picture in given position
Definition: WKSContentListener.cpp:620
void _openPageSpan()
Definition: WKSContentListener.cpp:1210
Definition: WKSContentListener.h:59
void _endSubDocument()
Definition: WKSContentListener.cpp:989
void closeGroup() final
close a group (not implemented)
Definition: WKSContentListener.cpp:714
void insertBreak(const uint8_t breakType) final
Definition: WKSContentListener.cpp:253
Vec2i m_position[2]
cell position ( if type==F_Cell or F_CellList )
Definition: WKSContentListener.h:85
Definition: WPSTable.h:39
~WKSContentListener() final
Definition: WKSContentListener.cpp:185
std::shared_ptr< WKSContentParsingState > m_ps
Definition: WKSContentListener.h:272
void _popParsingState()
resets the previous parsing state
Definition: WKSContentListener.cpp:1300
void setValue(double value)
sets the double value
Definition: WKSContentListener.h:124
void startDocument()
Definition: WKSContentListener.cpp:365
void _insertBreakIfNecessary(librevenge::RVNGPropertyList &propList)
Definition: WKSContentListener.cpp:272
the document state
Definition: WKSContentListener.cpp:49
Vec2< int > Vec2i
Vec2 of int.
Definition: libwps_internal.h:702
void insertObject(WPSPosition const &pos, const WPSEmbeddedObject &obj, WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle())
adds an object with replacement picture in given position
Definition: WKSContentListener.cpp:634
void openSheet(std::vector< WPSColumnFormat > const &columns, librevenge::RVNGString const &name="")
open a sheet
Definition: WKSContentListener.cpp:1000
librevenge::RVNGSpreadsheetInterface * m_documentInterface
Definition: WKSContentListener.h:274
void _closeParagraph()
Definition: WKSContentListener.cpp:425
small class use to define a sheet cell content
Definition: WKSContentListener.h:99
void _closePageSpan()
Definition: WKSContentListener.cpp:1262
void _flushText()
Definition: WKSContentListener.cpp:511
void _closeSpan()
Definition: WKSContentListener.cpp:475
WPSEntry m_textEntry
the cell string
Definition: WKSContentListener.h:151
bool isValueSet() const
returns true if the value has been setted
Definition: WKSContentListener.h:130
std::shared_ptr< WKSDocumentParsingState > m_ds
Definition: WKSContentListener.h:271
WPSFont const & getFont() const final
returns the actual font
Definition: WKSContentListener.cpp:299
Definition: WKSContentListener.h:102
small class use to define a embedded object
Definition: libwps_internal.h:1076
Definition: WPSParagraph.h:37
Definition: WPSPageSpan.h:38
void insertChart(WPSPosition const &pos, WKSChart const &chart, WPSGraphicStyle const &style=WPSGraphicStyle::emptyStyle())
adds a chart in given position
Definition: WKSContentListener.cpp:580
basic class to store an entry in a file This contained :
Definition: WPSEntry.h:38
void insertComment(WPSSubDocumentPtr &subDocument)
adds comment
Definition: WKSContentListener.cpp:545
friend std::ostream & operator<<(std::ostream &o, CellContent const &cell)
operator<<
Definition: WKSContentListener.cpp:1477
void insertUnicodeString(librevenge::RVNGString const &str) final
adds a unicode string
Definition: WKSContentListener.cpp:213
ContentType m_contentType
the content type ( by default unknown )
Definition: WKSContentListener.h:145
Class to define the position of an object (textbox, picture, ..) in the document. ...
Definition: WPSPosition.h:39
Definition: WKSContentListener.h:59
small class use to define a formula instruction
Definition: WKSContentListener.h:57
void _startSubDocument()
Definition: WKSContentListener.cpp:983
FormulaInstruction()
constructor
Definition: WKSContentListener.h:61
ContentType
the different types of cell&#39;s field
Definition: WKSContentListener.h:102
Definition: WKSContentListener.h:53
bool empty() const
returns true if the cell has no content
Definition: WKSContentListener.h:116
Vec2< bool > Vec2b
Vec2 of bool.
Definition: libwps_internal.h:700
void insertEOL(bool softBreak=false) final
Definition: WKSContentListener.cpp:220
Definition: WPSTable.h:100
void openSheetCell(WPSCell const &cell, CellContent const &content, int numRepeated=1)
low level function to define a cell.
Definition: WKSContentListener.cpp:1080

Generated on Fri May 27 2022 03:07:00 for libwps by doxygen 1.8.14