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 "WP6Listener.h"
32 #include "WPXContentListener.h"
33 #include "WP6FileStructure.h"
34 
35 #include <stack>
36 #include <map>
37 #include <vector>
38 
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);
94 
97 
99 
102 
106 
107  std::stack<unsigned> m_listLevelStack;
108  std::stack<WP6ListType> m_listTypeStack;
109  uint16_t m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
110  uint8_t m_oldListLevel;
114 
115  unsigned m_noteTextPID;
117 
119 
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 WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods,
143  const uint8_t tabBehaviourFlag);
144  void update(const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
145 
147  {
148  return m_listTypes[level];
149  }
150 
151 protected:
152  void _updateNumberingMethods(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods);
153 
154 private:
156 };
157 
159 {
160 public:
161  WP6ContentListener(std::list<WPXPageSpan> &pageList, WPXTableList tableList, WPXDocumentInterface *documentInterface);
163 
165  {
167  }
169  {
171  }
172  void setDate(const uint16_t type, const uint16_t year,
173  const uint8_t month, const uint8_t day,
174  const uint8_t hour, const uint8_t minute,
175  const uint8_t second, const uint8_t dayOfWeek,
176  const uint8_t timeZone, const uint8_t unused);
177  void setExtendedInformation(const uint16_t type, const WPXString &data);
178  void setAlignmentCharacter(const uint32_t character);
179  void setLeaderCharacter(const uint32_t character, const uint8_t numSpaces);
180  void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops,
181  const std::vector<bool> &usePreWP9LeaderMethods);
182  void insertCharacter(uint32_t character);
183  void insertTab(const uint8_t tabType, double tabPosition);
184  void handleLineBreak();
185  void insertEOL();
186  void insertBreak(const uint8_t breakType)
187  {
189  }
190  void lineSpacingChange(const double lineSpacing)
191  {
193  }
194  void justificationChange(const uint8_t justification)
195  {
197  }
198  void characterColorChange(const uint8_t red, const uint8_t green, const uint8_t blue);
199  void characterShadingChange(const uint8_t shading);
200  void highlightChange(const bool isOn, const RGBSColor &color);
201  void fontChange(const uint16_t matchedFontPointSize, const uint16_t fontPID, const WPXString &fontName);
202  void attributeChange(const bool isOn, const uint8_t attribute);
203  void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute);
204  void pageNumberingChange(const WPXPageNumberPosition /* page numbering position */, const uint16_t /* matchedFontPointSize */, const uint16_t /* fontPID */) {}
205  void pageMarginChange(const uint8_t /* side */, const uint16_t /* margin */) {}
206  void pageFormChange(const uint16_t /* length */, const uint16_t /* width */, const WPXFormOrientation /* orientation */) {}
207  void marginChange(const uint8_t side, const uint16_t margin);
208  void paragraphMarginChange(const uint8_t side, const int16_t margin);
209  void indentFirstLineChange(const int16_t offset);
210  void columnChange(const WPXTextColumnType columnType, const uint8_t numColumns, const std::vector<double> &columnWidth,
211  const std::vector<bool> &isFixedWidth);
212  void updateOutlineDefinition(const WP6OutlineLocation outlineLocation, const uint16_t outlineHash,
213  const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
214 
215  void paragraphNumberOn(const uint16_t outlineHash, const uint8_t level, const uint8_t flag);
216  void paragraphNumberOff();
217  void displayNumberReferenceGroupOn(const uint8_t subGroup, const uint8_t level);
218  void displayNumberReferenceGroupOff(const uint8_t subGroup);
219  void styleGroupOn(const uint8_t subGroup);
220  void styleGroupOff(const uint8_t subGroup);
221  void globalOn(const uint8_t systemStyle);
222  void globalOff();
223  void noteOn(const uint16_t textPID);
224  void noteOff(const WPXNoteType noteType);
225  void headerFooterGroup(const uint8_t /* headerFooterType */, const uint8_t /* occurenceBits */, const uint16_t /* textPID */) {}
226  void suppressPageCharacteristics(const uint8_t /* suppressCode */) {}
227  void setPageNumber(const uint16_t /* pageNumber */) {}
228  void setPageNumberingType(const WPXNumberingType pageNumberingType);
229  void endDocument()
230  {
232  }
234  {
236  }
237 
238  void defineTable(const uint8_t position, const uint16_t leftOffset);
239  void addTableColumnDefinition(const uint32_t width, const uint32_t leftGutter, const uint32_t rightGutter,
240  const uint32_t attributes, const uint8_t alignment);
241  void startTable();
242  void insertRow(const uint16_t rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
243  void insertCell(const uint8_t colSpan, const uint8_t rowSpan, const uint8_t borderBits,
244  const RGBSColor *cellFgColor, const RGBSColor *cellBgColor,
245  const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment,
246  const bool useCellAttributes, const uint32_t cellAttributes);
247  void endTable();
248  void boxOn(const uint8_t anchoringType, const uint8_t generalPositioningFlags, const uint8_t horizontalPositioningFlags,
249  const int16_t horizontalOffset, const uint8_t leftColumn, const uint8_t rightColumn,
250  const uint8_t verticalPositioningFlags, const int16_t verticalOffset, const uint8_t widthFlags, const uint16_t width,
251  const uint8_t heightFlags, const uint16_t height, const uint8_t boxContentType, const uint16_t nativeWidth,
252  const uint16_t nativeHeight);
253  void boxOff();
254  void insertGraphicsData(const uint16_t packetId);
255  void insertTextBox(const WP6SubDocument *subDocument);
256  void commentAnnotation(const uint16_t textPID);
257 
258  void undoChange(const uint8_t undoType, const uint16_t undoLevel);
259 
260 protected:
261  void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice = 0);
262 
263  //void _handleLineBreakElementBegin();
264  void _paragraphNumberOn(const uint16_t outlineHash, const uint8_t level);
265  void _flushText();
266  void _handleListChange(const uint16_t outlineHash);
267 
268  void _changeList();
269 
270 private:
274 
275  std::map<uint16_t,WP6OutlineDefinition *> m_outlineDefineHash;
276 };
277 
278 #endif /* WP6CONTENTLISTENER_H */
279 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
WPXNumberingType
Definition: libwpd_internal.h:93
Definition: WP6ContentListener.h:42
Definition: WPXString.h:32
Definition: WP6ContentListener.h:46
void displayNumberReferenceGroupOff(const uint8_t subGroup)
Definition: WP6ContentListener.cpp:1083
Definition: WP6Listener.h:42
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:44
WP6StyleStateSequence()
Definition: WP6ContentListener.h:56
void insertTab(const uint8_t tabType, double tabPosition)
Definition: WP6ContentListener.cpp:479
Definition: WPXTable.h:52
void setDate(const uint16_t type, const uint16_t year, const uint8_t month, const uint8_t day, const uint8_t hour, const uint8_t minute, const uint8_t second, const uint8_t dayOfWeek, const uint8_t timeZone, const uint8_t unused)
Definition: WP6ContentListener.cpp:173
void insertBreak(const uint8_t breakType)
Definition: WPXContentListener.cpp:1230
Definition: WP6ContentListener.h:45
void startSubDocument()
Definition: WPXContentListener.cpp:157
std::map< uint16_t, WP6OutlineDefinition * > m_outlineDefineHash
Definition: WP6ContentListener.h:275
void pageNumberingChange(const WPXPageNumberPosition, const uint16_t, const uint16_t)
Definition: WP6ContentListener.h:204
uint32_t m_leaderCharacter
Definition: WP6ContentListener.h:120
void endDocument()
Definition: WPXContentListener.cpp:163
bool m_isFrameOpened
Definition: WP6ContentListener.h:118
Definition: WP6ContentListener.h:50
void insertEOL()
Definition: WP6ContentListener.cpp:659
std::vector< bool > m_tempUsePreWP9LeaderMethod
Definition: WP6ContentListener.h:123
void setAlignmentCharacter(const uint32_t character)
Definition: WP6ContentListener.cpp:389
bool m_isListElementOpenAtLevel
Definition: WP6ContentListener.h:135
WPXTextColumnType
Definition: libwpd_internal.h:110
double m_paragraphMarginBottomRelative
Definition: WP6ContentListener.h:95
const int STATE_MEMORY
Definition: WP6ContentListener.h:52
Definition: WP6ContentListener.h:50
void justificationChange(const uint8_t justification)
Definition: WPXContentListener.cpp:1292
void pageFormChange(const uint16_t, const uint16_t, const WPXFormOrientation)
Definition: WP6ContentListener.h:206
WP6StyleState
Definition: WP6ContentListener.h:42
uint8_t m_leaderNumSpaces
Definition: WP6ContentListener.h:121
void justificationChange(const uint8_t justification)
Definition: WP6ContentListener.h:194
_WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice=0)
Definition: WP6ContentListener.cpp:105
void insertTextBox(const WP6SubDocument *subDocument)
Definition: WP6ContentListener.cpp:1712
WP6OutlineLocation
Definition: WP6Listener.h:40
void _paragraphNumberOn(const uint16_t outlineHash, const uint8_t level)
Definition: WP6ContentListener.cpp:1802
void characterColorChange(const uint8_t red, const uint8_t green, const uint8_t blue)
Definition: WP6ContentListener.cpp:673
void updateOutlineDefinition(const WP6OutlineLocation outlineLocation, const uint16_t outlineHash, const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag)
Definition: WP6ContentListener.cpp:1003
void paragraphNumberOff()
Definition: WP6ContentListener.cpp:1029
unsigned m_numListExtraTabs
Definition: WP6ContentListener.h:100
~_WP6ContentParsingState()
Definition: WP6ContentListener.cpp:150
WP6ContentListener(std::list< WPXPageSpan > &pageList, WPXTableList tableList, WPXDocumentInterface *documentInterface)
Definition: WP6ContentListener.cpp:155
WP6ListType
Definition: WP6ContentListener.h:50
Definition: WP6ContentListener.h:42
void undoChange(const uint8_t undoType, const uint16_t undoLevel)
Definition: WP6ContentListener.cpp:1988
void paragraphNumberOn(const uint16_t outlineHash, const uint8_t level, const uint8_t flag)
Definition: WP6ContentListener.cpp:1021
double m_paragraphMarginBottomAbsolute
Definition: WP6ContentListener.h:96
WPXSubDocumentType
Definition: libwpd_internal.h:112
void _changeList()
Definition: WP6ContentListener.cpp:1979
void suppressPageCharacteristics(const uint8_t)
Definition: WP6ContentListener.h:226
void globalOff()
Definition: WP6ContentListener.cpp:1206
void _handleListChange(const uint16_t outlineHash)
Definition: WP6ContentListener.cpp:1875
void columnChange(const WPXTextColumnType columnType, const uint8_t numColumns, const std::vector< double > &columnWidth, const std::vector< bool > &isFixedWidth)
Definition: WP6ContentListener.cpp:925
void startDocument()
Definition: WP6ContentListener.h:164
void setExtendedInformation(const uint16_t type, const WPXString &data)
Definition: WP6ContentListener.cpp:242
void insertGraphicsData(const uint16_t packetId)
Definition: WP6ContentListener.cpp:1698
Definition: libwpd_internal.h:168
void update(const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag)
Definition: WP6ContentListener.cpp:67
WPXString m_textAfterDisplayReference
Definition: WP6ContentListener.h:92
Definition: WPXContentListener.h:147
void pageMarginChange(const uint8_t, const uint16_t)
Definition: WP6ContentListener.h:205
Definition: WP6ContentListener.h:42
Definition: WPXTable.h:82
Definition: WP6ContentListener.h:53
unsigned m_numNestedNotes
Definition: WP6ContentListener.h:116
void insertRow(const uint16_t rowHeight, const bool isMinimumHeight, const bool isHeaderRow)
Definition: WP6ContentListener.cpp:1387
void commentAnnotation(const uint16_t textPID)
Definition: WP6ContentListener.cpp:1728
Definition: WP6SubDocument.h:33
void insertCell(const uint8_t colSpan, const uint8_t rowSpan, const uint8_t borderBits, const RGBSColor *cellFgColor, const RGBSColor *cellBgColor, const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment, const bool useCellAttributes, const uint32_t cellAttributes)
Definition: WP6ContentListener.cpp:1397
void setPageNumberingType(const WPXNumberingType pageNumberingType)
Definition: WP6ContentListener.cpp:1277
void setLeaderCharacter(const uint32_t character, const uint8_t numSpaces)
Definition: WP6ContentListener.cpp:397
void paragraphMarginChange(const uint8_t side, const int16_t margin)
Definition: WP6ContentListener.cpp:866
void lineSpacingChange(const double lineSpacing)
Definition: WP6ContentListener.h:190
std::stack< WP6ListType > m_listTypeStack
Definition: WP6ContentListener.h:108
void handleLineBreak()
Definition: WP6ContentListener.cpp:640
std::vector< WP6StyleState > m_stateSequence
Definition: WP6ContentListener.h:80
uint8_t m_oldListLevel
Definition: WP6ContentListener.h:110
void startTable()
Definition: WP6ContentListener.cpp:1360
WPXNumberingType getListType(int level)
Definition: WP6ContentListener.h:146
unsigned m_noteTextPID
Definition: WP6ContentListener.h:115
void globalOn(const uint8_t systemStyle)
Definition: WP6ContentListener.cpp:1197
WPXString m_bodyText
Definition: WP6ContentListener.h:88
void insertBreak(const uint8_t breakType)
Definition: WP6ContentListener.h:186
WPXString m_textAfterNumber
Definition: WP6ContentListener.h:93
void noteOff(const WPXNoteType noteType)
Definition: WP6ContentListener.cpp:1240
WP6StyleState getPreviousState() const
Definition: WP6ContentListener.h:69
WPXFormOrientation
Definition: libwpd_internal.h:106
Definition: WPXDocumentInterface.h:42
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:84
Definition: WP6ContentListener.h:138
bool m_putativeListElementHasParagraphNumber
Definition: WP6ContentListener.h:112
uint16_t m_currentOutlineHash
Definition: WP6ContentListener.h:109
void displayNumberReferenceGroupOn(const uint8_t subGroup, const uint8_t level)
Definition: WP6ContentListener.cpp:1043
bool m_isListReference
Definition: WP6ContentListener.h:101
bool m_putativeListElementHasDisplayReferenceNumber
Definition: WP6ContentListener.h:113
WP6ContentListener & operator=(const WP6ContentListener &)
Definition: WPXSubDocument.h:35
void setCurrentState(WP6StyleState state)
Definition: WP6ContentListener.h:60
void defineTable(const uint8_t position, const uint16_t leftOffset)
Definition: WP6ContentListener.cpp:1285
void characterShadingChange(const uint8_t shading)
Definition: WP6ContentListener.cpp:684
WP6StyleStateSequence m_styleStateSequence
Definition: WP6ContentListener.h:111
int m_level
Definition: WP6ContentListener.h:134
void noteOn(const uint16_t textPID)
Definition: WP6ContentListener.cpp:1215
WPXNumberingType m_listTypes[WP6_NUM_LIST_LEVELS]
Definition: WP6ContentListener.h:155
WPXString m_textBeforeDisplayReference
Definition: WP6ContentListener.h:90
WPXVerticalAlignment
Definition: libwpd_internal.h:108
void styleGroupOn(const uint8_t subGroup)
Definition: WP6ContentListener.cpp:1138
WPXTableList m_tableList
Definition: WP6ContentListener.h:103
void setPageNumber(const uint16_t)
Definition: WP6ContentListener.h:227
_WP6ContentParsingState & operator=(const _WP6ContentParsingState &)
#define WP6_NUM_LIST_LEVELS
Definition: WP6FileStructure.h:36
WPXNumberingType m_currentPageNumberingType
Definition: WP6ContentListener.h:125
void highlightChange(const bool isOn, const RGBSColor &color)
Definition: WP6ContentListener.cpp:693
void attributeChange(const bool isOn, const uint8_t attribute)
Definition: WP6ContentListener.cpp:730
void endSubDocument()
Definition: WPXContentListener.cpp:184
void addTableColumnDefinition(const uint32_t width, const uint32_t leftGutter, const uint32_t rightGutter, const uint32_t attributes, const uint8_t alignment)
Definition: WP6ContentListener.cpp:1335
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:1754
void _flushText()
Definition: WP6ContentListener.cpp:1813
void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute)
Definition: WP6ContentListener.cpp:803
void boxOff()
Definition: WP6ContentListener.cpp:1689
void _updateNumberingMethods(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods)
Definition: WP6ContentListener.cpp:72
std::vector< WPXTabStop > m_tempTabStops
Definition: WP6ContentListener.h:122
unsigned m_nextTableIndice
Definition: WP6ContentListener.h:105
WPXString m_numberText
Definition: WP6ContentListener.h:91
~WP6ContentListener()
Definition: WP6ContentListener.cpp:163
void styleGroupOff(const uint8_t subGroup)
Definition: WP6ContentListener.cpp:1173
WPXPageNumberPosition
Definition: libwpd_internal.h:98
void indentFirstLineChange(const int16_t offset)
Definition: WP6ContentListener.cpp:908
void endDocument()
Definition: WP6ContentListener.h:229
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:43
void boxOn(const uint8_t anchoringType, const uint8_t generalPositioningFlags, const uint8_t horizontalPositioningFlags, const int16_t horizontalOffset, const uint8_t leftColumn, const uint8_t rightColumn, const uint8_t verticalPositioningFlags, const int16_t verticalOffset, const uint8_t widthFlags, const uint16_t width, const uint8_t heightFlags, const uint16_t height, const uint8_t boxContentType, const uint16_t nativeWidth, const uint16_t nativeHeight)
Definition: WP6ContentListener.cpp:1457
void endTable()
Definition: WP6ContentListener.cpp:1445
void startDocument()
Definition: WPXContentListener.cpp:142
void defineTabStops(const bool isRelative, const std::vector< WPXTabStop > &tabStops, const std::vector< bool > &usePreWP9LeaderMethods)
Definition: WP6ContentListener.cpp:462
WP6ContentParsingState * m_parseState
Definition: WP6ContentListener.h:273
Definition: WP6ContentListener.h:158
void lineSpacingChange(const double lineSpacing)
Definition: WPXContentListener.cpp:1284
void insertCharacter(uint32_t character)
Definition: WP6ContentListener.cpp:417
WPXString m_textBeforeNumber
Definition: WP6ContentListener.h:89
Definition: WP6ContentListener.h:132
WP6StyleState getCurrentState() const
Definition: WP6ContentListener.h:65
WPXTable * m_currentTable
Definition: WP6ContentListener.h:104
void endSubDocument()
Definition: WP6ContentListener.h:233
void marginChange(const uint8_t side, const uint16_t margin)
Definition: WP6ContentListener.cpp:819
void clear()
Definition: WP6ContentListener.h:73
void headerFooterGroup(const uint8_t, const uint8_t, const uint16_t)
Definition: WP6ContentListener.h:225
WP6OutlineDefinition()
Definition: WP6ContentListener.cpp:54
void startSubDocument()
Definition: WP6ContentListener.h:168
WPXNoteType
Definition: libwpd_internal.h:94
void fontChange(const uint16_t matchedFontPointSize, const uint16_t fontPID, const WPXString &fontName)
Definition: WP6ContentListener.cpp:705

Generated for libwpd by doxygen 1.8.5