WP6ContentListener.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* libwpd
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) 2002 William Lachance (wrlach@gmail.com)
11  * Copyright (C) 2002 Marc Maurer (uwog@uwog.net)
12  * Copyright (C) 2005-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
13  *
14  * For minor contributions see the git repository.
15  *
16  * Alternatively, the contents of this file may be used under the terms
17  * of the GNU Lesser General Public License Version 2.1 or later
18  * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
19  * applicable instead of those above.
20  *
21  * For further information visit http://libwpd.sourceforge.net
22  */
23 
24 /* "This product is not manufactured, approved, or supported by
25  * Corel Corporation or Corel Corporation Limited."
26  */
27 
28 #ifndef WP6CONTENTLISTENER_H
29 #define WP6CONTENTLISTENER_H
30 
31 #include <librevenge/librevenge.h>
32 #include "WP6Listener.h"
33 #include "WPXContentListener.h"
34 #include "WP6FileStructure.h"
35 
36 #include <stack>
37 #include <map>
38 #include <vector>
39 
40 class WPXTable;
41 
48  };
49 
51 
52 const int STATE_MEMORY = 3;
54 {
55 public:
57  {
58  clear();
59  }
61  {
62  for (unsigned i=(STATE_MEMORY-1); i>0; i--) m_stateSequence[i] = m_stateSequence[i-1];
63  m_stateSequence[0]=state;
64  }
66  {
67  return m_stateSequence[0];
68  }
70  {
71  return m_stateSequence[1];
72  }
73  void clear()
74  {
75  m_stateSequence.clear();
76  for (int i=0; i<STATE_MEMORY; i++) m_stateSequence.push_back(NORMAL);
77  }
78 
79 private:
80  std::vector<WP6StyleState> m_stateSequence;
81 };
82 
85 {
86  _WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice = 0);
88  librevenge::RVNGString m_bodyText;
89  librevenge::RVNGString m_textBeforeNumber;
90  librevenge::RVNGString m_textBeforeDisplayReference;
91  librevenge::RVNGString m_numberText;
92  librevenge::RVNGString m_textAfterDisplayReference;
93  librevenge::RVNGString m_textAfterNumber;
94 
97 
99 
102 
106 
107  std::stack<unsigned> m_listLevelStack;
108  std::stack<WP6ListType> m_listTypeStack;
109  unsigned short m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
110  unsigned char m_oldListLevel;
114 
115  unsigned m_noteTextPID;
117 
119 
121  unsigned char m_leaderNumSpaces;
122  std::vector<WPXTabStop> m_tempTabStops;
123  std::vector<bool> m_tempUsePreWP9LeaderMethod;
124 
126 
127 private:
130 };
131 
133 {
134  int m_level;
136 };
137 
139 {
140 public:
142  WP6OutlineDefinition(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
143  void update(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
144 
146  {
147  return m_listTypes[level];
148  }
149 
150 protected:
151  void _updateNumberingMethods(const unsigned char *numberingMethods);
152 
153 private:
155 };
156 
158 {
159 public:
160  WP6ContentListener(std::list<WPXPageSpan> &pageList, WPXTableList tableList, librevenge::RVNGTextInterface *documentInterface);
162 
164  {
166  }
168  {
170  }
171  void setDate(const unsigned short type, const unsigned short year,
172  const unsigned char month, const unsigned char day,
173  const unsigned char hour, const unsigned char minute,
174  const unsigned char second, const unsigned char dayOfWeek,
175  const unsigned char timeZone, const unsigned char unused);
176  void setExtendedInformation(const unsigned short type, const librevenge::RVNGString &data);
177  void setAlignmentCharacter(const unsigned character);
178  void setLeaderCharacter(const unsigned character, const unsigned char numSpaces);
179  void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops,
180  const std::vector<bool> &usePreWP9LeaderMethods);
181  void insertCharacter(unsigned character);
182  void insertTab(const unsigned char tabType, double tabPosition);
183  void handleLineBreak();
184  void insertEOL();
185  void insertBreak(const unsigned char breakType)
186  {
188  }
189  void lineSpacingChange(const double lineSpacing)
190  {
192  }
193  void justificationChange(const unsigned char justification)
194  {
196  }
197  void characterColorChange(const unsigned char red, const unsigned char green, const unsigned char blue);
198  void characterShadingChange(const unsigned char shading);
199  void highlightChange(const bool isOn, const RGBSColor &color);
200  void fontChange(const unsigned short matchedFontPointSize, const unsigned short fontPID, const librevenge::RVNGString &fontName);
201  void attributeChange(const bool isOn, const unsigned char attribute);
202  void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute);
203  void pageNumberingChange(const WPXPageNumberPosition /* page numbering position */, const unsigned short /* matchedFontPointSize */, const unsigned short /* fontPID */) {}
204  void pageMarginChange(const unsigned char /* side */, const unsigned short /* margin */) {}
205  void pageFormChange(const unsigned short /* length */, const unsigned short /* width */, const WPXFormOrientation /* orientation */) {}
206  void marginChange(const unsigned char side, const unsigned short margin);
207  void paragraphMarginChange(const unsigned char side, const signed short margin);
208  void indentFirstLineChange(const signed short offset);
209  void columnChange(const WPXTextColumnType columnType, const unsigned char numColumns, const std::vector<double> &columnWidth,
210  const std::vector<bool> &isFixedWidth);
211  void updateOutlineDefinition(const unsigned short outlineHash, const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
212 
213  void paragraphNumberOn(const unsigned short outlineHash, const unsigned char level, const unsigned char flag);
214  void paragraphNumberOff();
215  void displayNumberReferenceGroupOn(const unsigned char subGroup, const unsigned char level);
216  void displayNumberReferenceGroupOff(const unsigned char subGroup);
217  void styleGroupOn(const unsigned char subGroup);
218  void styleGroupOff(const unsigned char subGroup);
219  void globalOn(const unsigned char systemStyle);
220  void globalOff();
221  void noteOn(const unsigned short textPID);
222  void noteOff(const WPXNoteType noteType);
223  void headerFooterGroup(const unsigned char /* headerFooterType */, const unsigned char /* occurrenceBits */, const unsigned short /* textPID */) {}
224  void suppressPageCharacteristics(const unsigned char /* suppressCode */) {}
225  void setPageNumber(const unsigned short /* pageNumber */) {}
226  void setPageNumberingType(const WPXNumberingType pageNumberingType);
227  void endDocument()
228  {
230  }
232  {
234  }
235 
236  void defineTable(const unsigned char position, const unsigned short leftOffset);
237  void addTableColumnDefinition(const unsigned width, const unsigned leftGutter, const unsigned rightGutter,
238  const unsigned attributes, const unsigned char alignment);
239  void startTable();
240  void insertRow(const unsigned short rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
241  void insertCell(const unsigned char colSpan, const unsigned char rowSpan, const unsigned char borderBits,
242  const RGBSColor *cellFgColor, const RGBSColor *cellBgColor,
243  const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment,
244  const bool useCellAttributes, const unsigned cellAttributes);
245  void endTable();
246  void boxOn(const unsigned char anchoringType, const unsigned char generalPositioningFlags, const unsigned char horizontalPositioningFlags,
247  const signed short horizontalOffset, const unsigned char leftColumn, const unsigned char rightColumn,
248  const unsigned char verticalPositioningFlags, const signed short verticalOffset, const unsigned char widthFlags, const unsigned short width,
249  const unsigned char heightFlags, const unsigned short height, const unsigned char boxContentType, const unsigned short nativeWidth,
250  const unsigned short nativeHeight);
251  void boxOff();
252  void insertGraphicsData(const unsigned short packetId);
253  void insertTextBox(const WP6SubDocument *subDocument);
254  void commentAnnotation(const unsigned short textPID);
255 
256  void undoChange(const unsigned char undoType, const unsigned short undoLevel);
257 
258 protected:
259  void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice = 0);
260 
261  //void _handleLineBreakElementBegin();
262  void _paragraphNumberOn(const unsigned short outlineHash, const unsigned char level);
263  void _flushText();
264  void _handleListChange(const unsigned short outlineHash);
265 
266  void _changeList();
267 
268 private:
272 
273  std::map<unsigned short,WP6OutlineDefinition> m_outlineDefineHash;
274  std::map<unsigned, librevenge::RVNGPropertyList> m_listDefinitions;
275 };
276 
277 #endif /* WP6CONTENTLISTENER_H */
278 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
WPXNumberingType
Definition: libwpd_internal.h:92
unsigned char m_oldListLevel
Definition: WP6ContentListener.h:110
Definition: WP6ContentListener.h:42
librevenge::RVNGString m_textAfterNumber
Definition: WP6ContentListener.h:93
void setLeaderCharacter(const unsigned character, const unsigned char numSpaces)
Definition: WP6ContentListener.cpp:392
Definition: WP6ContentListener.h:46
void defineTable(const unsigned char position, const unsigned short leftOffset)
Definition: WP6ContentListener.cpp:1272
Definition: WP6Listener.h:40
Definition: WP6ContentListener.h:47
librevenge::RVNGString m_textBeforeNumber
Definition: WP6ContentListener.h:89
Definition: WP6ContentListener.h:44
WP6StyleStateSequence()
Definition: WP6ContentListener.h:56
void paragraphNumberOn(const unsigned short outlineHash, const unsigned char level, const unsigned char flag)
Definition: WP6ContentListener.cpp:1006
Definition: WPXTable.h:51
void marginChange(const unsigned char side, const unsigned short margin)
Definition: WP6ContentListener.cpp:814
void justificationChange(const unsigned char justification)
Definition: WPXContentListener.cpp:1309
Definition: WP6ContentListener.h:45
void startSubDocument()
Definition: WPXContentListener.cpp:157
unsigned short m_currentOutlineHash
Definition: WP6ContentListener.h:109
librevenge::RVNGString m_textBeforeDisplayReference
Definition: WP6ContentListener.h:90
std::map< unsigned short, WP6OutlineDefinition > m_outlineDefineHash
Definition: WP6ContentListener.h:273
void endDocument()
Definition: WPXContentListener.cpp:163
bool m_isFrameOpened
Definition: WP6ContentListener.h:118
Definition: WP6ContentListener.h:50
void insertEOL()
Definition: WP6ContentListener.cpp:654
std::vector< bool > m_tempUsePreWP9LeaderMethod
Definition: WP6ContentListener.h:123
bool m_isListElementOpenAtLevel
Definition: WP6ContentListener.h:135
WPXTextColumnType
Definition: libwpd_internal.h:109
void insertCell(const unsigned char colSpan, const unsigned char rowSpan, const unsigned char borderBits, const RGBSColor *cellFgColor, const RGBSColor *cellBgColor, const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment, const bool useCellAttributes, const unsigned cellAttributes)
Definition: WP6ContentListener.cpp:1384
librevenge::RVNGString m_bodyText
Definition: WP6ContentListener.h:88
double m_paragraphMarginBottomRelative
Definition: WP6ContentListener.h:95
void noteOn(const unsigned short textPID)
Definition: WP6ContentListener.cpp:1202
void addTableColumnDefinition(const unsigned width, const unsigned leftGutter, const unsigned rightGutter, const unsigned attributes, const unsigned char alignment)
Definition: WP6ContentListener.cpp:1322
void columnChange(const WPXTextColumnType columnType, const unsigned char numColumns, const std::vector< double > &columnWidth, const std::vector< bool > &isFixedWidth)
Definition: WP6ContentListener.cpp:920
void insertBreak(const unsigned char breakType)
Definition: WP6ContentListener.h:185
const int STATE_MEMORY
Definition: WP6ContentListener.h:52
Definition: WP6ContentListener.h:50
void insertRow(const unsigned short rowHeight, const bool isMinimumHeight, const bool isHeaderRow)
Definition: WP6ContentListener.cpp:1374
WP6StyleState
Definition: WP6ContentListener.h:42
unsigned char m_leaderNumSpaces
Definition: WP6ContentListener.h:121
_WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice=0)
Definition: WP6ContentListener.cpp:105
void insertBreak(const unsigned char breakType)
Definition: WPXContentListener.cpp:1247
void insertTextBox(const WP6SubDocument *subDocument)
Definition: WP6ContentListener.cpp:1702
void paragraphNumberOff()
Definition: WP6ContentListener.cpp:1014
void insertGraphicsData(const unsigned short packetId)
Definition: WP6ContentListener.cpp:1685
unsigned m_numListExtraTabs
Definition: WP6ContentListener.h:100
~_WP6ContentParsingState()
Definition: WP6ContentListener.cpp:150
void undoChange(const unsigned char undoType, const unsigned short undoLevel)
Definition: WP6ContentListener.cpp:1962
WP6ListType
Definition: WP6ContentListener.h:50
Definition: WP6ContentListener.h:42
double m_paragraphMarginBottomAbsolute
Definition: WP6ContentListener.h:96
WPXSubDocumentType
Definition: libwpd_internal.h:111
void characterShadingChange(const unsigned char shading)
Definition: WP6ContentListener.cpp:679
void _changeList()
Definition: WP6ContentListener.cpp:1953
void globalOff()
Definition: WP6ContentListener.cpp:1193
void justificationChange(const unsigned char justification)
Definition: WP6ContentListener.h:193
void startDocument()
Definition: WP6ContentListener.h:163
Definition: libwpd_internal.h:167
Definition: WPXContentListener.h:147
Definition: WP6ContentListener.h:42
void displayNumberReferenceGroupOn(const unsigned char subGroup, const unsigned char level)
Definition: WP6ContentListener.cpp:1028
Definition: WPXTable.h:81
Definition: WP6ContentListener.h:53
unsigned m_numNestedNotes
Definition: WP6ContentListener.h:116
Definition: WP6SubDocument.h:33
void boxOn(const unsigned char anchoringType, const unsigned char generalPositioningFlags, const unsigned char horizontalPositioningFlags, const signed short horizontalOffset, const unsigned char leftColumn, const unsigned char rightColumn, const unsigned char verticalPositioningFlags, const signed short verticalOffset, const unsigned char widthFlags, const unsigned short width, const unsigned char heightFlags, const unsigned short height, const unsigned char boxContentType, const unsigned short nativeWidth, const unsigned short nativeHeight)
Definition: WP6ContentListener.cpp:1444
void setPageNumberingType(const WPXNumberingType pageNumberingType)
Definition: WP6ContentListener.cpp:1264
void lineSpacingChange(const double lineSpacing)
Definition: WP6ContentListener.h:189
std::stack< WP6ListType > m_listTypeStack
Definition: WP6ContentListener.h:108
void fontChange(const unsigned short matchedFontPointSize, const unsigned short fontPID, const librevenge::RVNGString &fontName)
Definition: WP6ContentListener.cpp:700
void handleLineBreak()
Definition: WP6ContentListener.cpp:635
void characterColorChange(const unsigned char red, const unsigned char green, const unsigned char blue)
Definition: WP6ContentListener.cpp:668
std::vector< WP6StyleState > m_stateSequence
Definition: WP6ContentListener.h:80
void styleGroupOn(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1125
void startTable()
Definition: WP6ContentListener.cpp:1347
WPXNumberingType getListType(int level)
Definition: WP6ContentListener.h:145
void commentAnnotation(const unsigned short textPID)
Definition: WP6ContentListener.cpp:1718
unsigned m_noteTextPID
Definition: WP6ContentListener.h:115
void paragraphMarginChange(const unsigned char side, const signed short margin)
Definition: WP6ContentListener.cpp:861
void update(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag)
Definition: WP6ContentListener.cpp:67
void noteOff(const WPXNoteType noteType)
Definition: WP6ContentListener.cpp:1227
WP6StyleState getPreviousState() const
Definition: WP6ContentListener.h:69
WPXFormOrientation
Definition: libwpd_internal.h:105
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:84
Definition: WP6ContentListener.h:138
void attributeChange(const bool isOn, const unsigned char attribute)
Definition: WP6ContentListener.cpp:725
bool m_putativeListElementHasParagraphNumber
Definition: WP6ContentListener.h:112
bool m_isListReference
Definition: WP6ContentListener.h:101
bool m_putativeListElementHasDisplayReferenceNumber
Definition: WP6ContentListener.h:113
void updateOutlineDefinition(const unsigned short outlineHash, const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag)
Definition: WP6ContentListener.cpp:998
void setAlignmentCharacter(const unsigned character)
Definition: WP6ContentListener.cpp:384
WP6ContentListener & operator=(const WP6ContentListener &)
Definition: WPXSubDocument.h:34
void setCurrentState(WP6StyleState state)
Definition: WP6ContentListener.h:60
WP6StyleStateSequence m_styleStateSequence
Definition: WP6ContentListener.h:111
int m_level
Definition: WP6ContentListener.h:134
WPXNumberingType m_listTypes[WP6_NUM_LIST_LEVELS]
Definition: WP6ContentListener.h:154
WPXVerticalAlignment
Definition: libwpd_internal.h:107
void pageFormChange(const unsigned short, const unsigned short, const WPXFormOrientation)
Definition: WP6ContentListener.h:205
WPXTableList m_tableList
Definition: WP6ContentListener.h:103
_WP6ContentParsingState & operator=(const _WP6ContentParsingState &)
#define WP6_NUM_LIST_LEVELS
Definition: WP6FileStructure.h:36
void _paragraphNumberOn(const unsigned short outlineHash, const unsigned char level)
Definition: WP6ContentListener.cpp:1792
WPXNumberingType m_currentPageNumberingType
Definition: WP6ContentListener.h:125
void highlightChange(const bool isOn, const RGBSColor &color)
Definition: WP6ContentListener.cpp:688
void _updateNumberingMethods(const unsigned char *numberingMethods)
Definition: WP6ContentListener.cpp:72
void setPageNumber(const unsigned short)
Definition: WP6ContentListener.h:225
void endSubDocument()
Definition: WPXContentListener.cpp:184
std::stack< unsigned > m_listLevelStack
Definition: WP6ContentListener.h:107
unsigned m_numRemovedParagraphBreaks
Definition: WP6ContentListener.h:98
void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice=0)
Definition: WP6ContentListener.cpp:1744
void styleGroupOff(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1160
void _flushText()
Definition: WP6ContentListener.cpp:1803
void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute)
Definition: WP6ContentListener.cpp:798
void boxOff()
Definition: WP6ContentListener.cpp:1676
std::vector< WPXTabStop > m_tempTabStops
Definition: WP6ContentListener.h:122
void displayNumberReferenceGroupOff(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1068
unsigned m_nextTableIndice
Definition: WP6ContentListener.h:105
void _handleListChange(const unsigned short outlineHash)
Definition: WP6ContentListener.cpp:1865
unsigned m_leaderCharacter
Definition: WP6ContentListener.h:120
~WP6ContentListener()
Definition: WP6ContentListener.cpp:163
void pageNumberingChange(const WPXPageNumberPosition, const unsigned short, const unsigned short)
Definition: WP6ContentListener.h:203
void globalOn(const unsigned char systemStyle)
Definition: WP6ContentListener.cpp:1184
void insertCharacter(unsigned character)
Definition: WP6ContentListener.cpp:412
void indentFirstLineChange(const signed short offset)
Definition: WP6ContentListener.cpp:903
WPXPageNumberPosition
Definition: libwpd_internal.h:97
void endDocument()
Definition: WP6ContentListener.h:227
std::map< unsigned, librevenge::RVNGPropertyList > m_listDefinitions
Definition: WP6ContentListener.h:274
void pageMarginChange(const unsigned char, const unsigned short)
Definition: WP6ContentListener.h:204
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:43
void headerFooterGroup(const unsigned char, const unsigned char, const unsigned short)
Definition: WP6ContentListener.h:223
void suppressPageCharacteristics(const unsigned char)
Definition: WP6ContentListener.h:224
librevenge::RVNGString m_textAfterDisplayReference
Definition: WP6ContentListener.h:92
void endTable()
Definition: WP6ContentListener.cpp:1432
WP6ContentListener(std::list< WPXPageSpan > &pageList, WPXTableList tableList, librevenge::RVNGTextInterface *documentInterface)
Definition: WP6ContentListener.cpp:155
void startDocument()
Definition: WPXContentListener.cpp:142
void defineTabStops(const bool isRelative, const std::vector< WPXTabStop > &tabStops, const std::vector< bool > &usePreWP9LeaderMethods)
Definition: WP6ContentListener.cpp:457
WP6ContentParsingState * m_parseState
Definition: WP6ContentListener.h:271
Definition: WP6ContentListener.h:157
void insertTab(const unsigned char tabType, double tabPosition)
Definition: WP6ContentListener.cpp:474
void lineSpacingChange(const double lineSpacing)
Definition: WPXContentListener.cpp:1301
void setExtendedInformation(const unsigned short type, const librevenge::RVNGString &data)
Definition: WP6ContentListener.cpp:237
librevenge::RVNGString m_numberText
Definition: WP6ContentListener.h:91
Definition: WP6ContentListener.h:132
void setDate(const unsigned short type, const unsigned short year, const unsigned char month, const unsigned char day, const unsigned char hour, const unsigned char minute, const unsigned char second, const unsigned char dayOfWeek, const unsigned char timeZone, const unsigned char unused)
Definition: WP6ContentListener.cpp:168
WP6StyleState getCurrentState() const
Definition: WP6ContentListener.h:65
WPXTable * m_currentTable
Definition: WP6ContentListener.h:104
void endSubDocument()
Definition: WP6ContentListener.h:231
void clear()
Definition: WP6ContentListener.h:73
WP6OutlineDefinition()
Definition: WP6ContentListener.cpp:54
void startSubDocument()
Definition: WP6ContentListener.h:167
WPXNoteType
Definition: libwpd_internal.h:93

Generated for libwpd by doxygen 1.8.8