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 
84 {
85  WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice = 0);
87  librevenge::RVNGString m_bodyText;
88  librevenge::RVNGString m_textBeforeNumber;
89  librevenge::RVNGString m_textBeforeDisplayReference;
90  librevenge::RVNGString m_numberText;
91  librevenge::RVNGString m_textAfterDisplayReference;
92  librevenge::RVNGString m_textAfterNumber;
93 
96 
98 
101 
105 
106  std::stack<unsigned> m_listLevelStack;
107  std::stack<WP6ListType> m_listTypeStack;
108  unsigned short m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
109  unsigned char m_oldListLevel;
113 
114  unsigned m_noteTextPID;
116 
118 
120 
122  unsigned char m_leaderNumSpaces;
123  std::vector<WPXTabStop> m_tempTabStops;
124  std::vector<bool> m_tempUsePreWP9LeaderMethod;
125 
127 
128 private:
131 };
132 
134 {
135  int m_level;
137 };
138 
140 {
141 public:
143  WP6OutlineDefinition(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
144  void update(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
145 
147  {
148  if (level >= 0 && unsigned(level) < WPD_NUM_ELEMENTS(m_listTypes))
149  return m_listTypes[level];
150  return WPXNumberingType();
151  }
152 
153 protected:
154  void _updateNumberingMethods(const unsigned char *numberingMethods);
155 
156 private:
158 };
159 
161 {
162 public:
163  WP6ContentListener(std::list<WPXPageSpan> &pageList, WPXTableList tableList, librevenge::RVNGTextInterface *documentInterface);
165 
167  {
169  }
171  {
173  }
174  void setDate(const unsigned short type, const unsigned short year,
175  const unsigned char month, const unsigned char day,
176  const unsigned char hour, const unsigned char minute,
177  const unsigned char second, const unsigned char dayOfWeek,
178  const unsigned char timeZone, const unsigned char unused);
179  void setExtendedInformation(const unsigned short type, const librevenge::RVNGString &data);
180  void setAlignmentCharacter(const unsigned character);
181  void setLeaderCharacter(const unsigned character, const unsigned char numSpaces);
182  void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops,
183  const std::vector<bool> &usePreWP9LeaderMethods);
184  void insertCharacter(unsigned character);
185  void insertTab(const unsigned char tabType, double tabPosition);
186  void handleLineBreak();
187  void insertEOL();
188  void insertBreak(const unsigned char breakType)
189  {
191  }
192  void lineSpacingChange(const double lineSpacing)
193  {
195  }
196  void justificationChange(const unsigned char justification)
197  {
199  }
200  void characterColorChange(const unsigned char red, const unsigned char green, const unsigned char blue);
201  void characterShadingChange(const unsigned char shading);
202  void highlightChange(const bool isOn, const RGBSColor &color);
203  void fontChange(const unsigned short matchedFontPointSize, const unsigned short fontPID, const librevenge::RVNGString &fontName);
204  void attributeChange(const bool isOn, const unsigned char attribute);
205  void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute);
206  void pageNumberingChange(const WPXPageNumberPosition /* page numbering position */, const unsigned short /* matchedFontPointSize */, const unsigned short /* fontPID */) {}
207  void pageMarginChange(const unsigned char /* side */, const unsigned short /* margin */) {}
208  void pageFormChange(const unsigned short /* length */, const unsigned short /* width */, const WPXFormOrientation /* orientation */) {}
209  void marginChange(const unsigned char side, const unsigned short margin);
210  void paragraphMarginChange(const unsigned char side, const signed short margin);
211  void indentFirstLineChange(const signed short offset);
212  void columnChange(const WPXTextColumnType columnType, const unsigned char numColumns, const std::vector<double> &columnWidth,
213  const std::vector<bool> &isFixedWidth);
214  void updateOutlineDefinition(const unsigned short outlineHash, const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
215 
216  void paragraphNumberOn(const unsigned short outlineHash, const unsigned char level, const unsigned char flag);
217  void paragraphNumberOff();
218  void displayNumberReferenceGroupOn(const unsigned char subGroup, const unsigned char level);
219  void displayNumberReferenceGroupOff(const unsigned char subGroup);
220  void styleGroupOn(const unsigned char subGroup);
221  void styleGroupOff(const unsigned char subGroup);
222  void globalOn(const unsigned char systemStyle);
223  void globalOff();
224  void noteOn(const unsigned short textPID);
225  void noteOff(const WPXNoteType noteType);
226  void headerFooterGroup(const unsigned char /* headerFooterType */, const unsigned char /* occurrenceBits */, const unsigned short /* textPID */) {}
227  void suppressPageCharacteristics(const unsigned char /* suppressCode */) {}
228  void setPageNumber(const unsigned short /* pageNumber */) {}
229  void setPageNumberingType(const WPXNumberingType pageNumberingType);
230  void endDocument()
231  {
233  }
235  {
237  }
238 
239  void defineTable(const unsigned char position, const unsigned short leftOffset);
240  void addTableColumnDefinition(const unsigned width, const unsigned leftGutter, const unsigned rightGutter,
241  const unsigned attributes, const unsigned char alignment);
242  void startTable();
243  void insertRow(const unsigned short rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
244  void insertCell(const unsigned char colSpan, const unsigned char rowSpan, const unsigned char borderBits,
245  const RGBSColor *cellFgColor, const RGBSColor *cellBgColor,
246  const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment,
247  const bool useCellAttributes, const unsigned cellAttributes);
248  void endTable();
249  void boxOn(const unsigned char anchoringType, const unsigned char generalPositioningFlags, const unsigned char horizontalPositioningFlags,
250  const signed short horizontalOffset, const unsigned char leftColumn, const unsigned char rightColumn,
251  const unsigned char verticalPositioningFlags, const signed short verticalOffset, const unsigned char widthFlags, const unsigned short width,
252  const unsigned char heightFlags, const unsigned short height, const unsigned char boxContentType, const unsigned short nativeWidth,
253  const unsigned short nativeHeight,
254  const librevenge::RVNGString &linkTarget);
255  void boxOff();
256  void insertGraphicsData(const unsigned short packetId);
257  void insertTextBox(const WP6SubDocument *subDocument);
258  void commentAnnotation(const unsigned short textPID);
259 
260  void undoChange(const unsigned char undoType, const unsigned short undoLevel);
261 
262 protected:
263  void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice = 0);
264 
265  //void _handleLineBreakElementBegin();
266  void _paragraphNumberOn(const unsigned short outlineHash, const unsigned char level);
267  void _flushText();
268  void _handleListChange(const unsigned short outlineHash);
269 
270  void _changeList();
271 
272 private:
276 
277  std::map<unsigned short,WP6OutlineDefinition> m_outlineDefineHash;
278  std::map<unsigned, librevenge::RVNGPropertyList> m_listDefinitions;
279 };
280 
281 #endif /* WP6CONTENTLISTENER_H */
282 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
WPXNumberingType
Definition: libwpd_internal.h:86
bool m_isFrameOpened
Definition: WP6ContentListener.h:117
Definition: WP6ContentListener.h:42
void setLeaderCharacter(const unsigned character, const unsigned char numSpaces)
Definition: WP6ContentListener.cpp:394
Definition: WP6ContentListener.h:46
void defineTable(const unsigned char position, const unsigned short leftOffset)
Definition: WP6ContentListener.cpp:1274
librevenge::RVNGString m_numberText
Definition: WP6ContentListener.h:90
Definition: WP6Listener.h:40
Definition: WP6ContentListener.h:47
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:1008
Definition: WPXTable.h:49
void marginChange(const unsigned char side, const unsigned short margin)
Definition: WP6ContentListener.cpp:816
void justificationChange(const unsigned char justification)
Definition: WPXContentListener.cpp:1309
Definition: WP6ContentListener.h:45
void startSubDocument()
Definition: WPXContentListener.cpp:157
librevenge::RVNGString m_textBeforeNumber
Definition: WP6ContentListener.h:88
std::map< unsigned short, WP6OutlineDefinition > m_outlineDefineHash
Definition: WP6ContentListener.h:277
void endDocument()
Definition: WPXContentListener.cpp:163
Definition: WP6ContentListener.h:50
void insertEOL()
Definition: WP6ContentListener.cpp:656
WPXNumberingType m_currentPageNumberingType
Definition: WP6ContentListener.h:126
WPXTextColumnType
Definition: libwpd_internal.h:103
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:1386
void noteOn(const unsigned short textPID)
Definition: WP6ContentListener.cpp:1204
void addTableColumnDefinition(const unsigned width, const unsigned leftGutter, const unsigned rightGutter, const unsigned attributes, const unsigned char alignment)
Definition: WP6ContentListener.cpp:1324
void columnChange(const WPXTextColumnType columnType, const unsigned char numColumns, const std::vector< double > &columnWidth, const std::vector< bool > &isFixedWidth)
Definition: WP6ContentListener.cpp:922
void insertBreak(const unsigned char breakType)
Definition: WP6ContentListener.h:188
const int STATE_MEMORY
Definition: WP6ContentListener.h:52
Definition: WP6ContentListener.h:50
bool m_putativeListElementHasDisplayReferenceNumber
Definition: WP6ContentListener.h:112
WP6StyleStateSequence m_styleStateSequence
Definition: WP6ContentListener.h:110
void insertRow(const unsigned short rowHeight, const bool isMinimumHeight, const bool isHeaderRow)
Definition: WP6ContentListener.cpp:1376
WP6StyleState
Definition: WP6ContentListener.h:42
double m_paragraphMarginBottomAbsolute
Definition: WP6ContentListener.h:95
unsigned m_nextTableIndice
Definition: WP6ContentListener.h:104
void insertBreak(const unsigned char breakType)
Definition: WPXContentListener.cpp:1247
void insertTextBox(const WP6SubDocument *subDocument)
Definition: WP6ContentListener.cpp:1725
std::vector< bool > m_tempUsePreWP9LeaderMethod
Definition: WP6ContentListener.h:124
void paragraphNumberOff()
Definition: WP6ContentListener.cpp:1016
void insertGraphicsData(const unsigned short packetId)
Definition: WP6ContentListener.cpp:1708
unsigned m_numListExtraTabs
Definition: WP6ContentListener.h:99
void undoChange(const unsigned char undoType, const unsigned short undoLevel)
Definition: WP6ContentListener.cpp:1985
~WP6ContentParsingState()
Definition: WP6ContentListener.cpp:152
WP6ListType
Definition: WP6ContentListener.h:50
Definition: WP6ContentListener.h:42
librevenge::RVNGString m_textBeforeDisplayReference
Definition: WP6ContentListener.h:89
WPXSubDocumentType
Definition: libwpd_internal.h:105
void characterShadingChange(const unsigned char shading)
Definition: WP6ContentListener.cpp:681
void _changeList()
Definition: WP6ContentListener.cpp:1976
void globalOff()
Definition: WP6ContentListener.cpp:1195
void justificationChange(const unsigned char justification)
Definition: WP6ContentListener.h:196
void startDocument()
Definition: WP6ContentListener.h:166
bool m_putativeListElementHasParagraphNumber
Definition: WP6ContentListener.h:111
Definition: WPXContentListener.h:145
bool m_isListElementOpenAtLevel
Definition: WP6ContentListener.h:136
Definition: WP6ContentListener.h:133
Definition: WP6ContentListener.h:42
librevenge::RVNGString m_textAfterDisplayReference
Definition: WP6ContentListener.h:91
void displayNumberReferenceGroupOn(const unsigned char subGroup, const unsigned char level)
Definition: WP6ContentListener.cpp:1030
Definition: WPXTable.h:79
Definition: WP6ContentListener.h:53
WP6ContentParsingState & operator=(const WP6ContentParsingState &)
Definition: WP6SubDocument.h:33
void setPageNumberingType(const WPXNumberingType pageNumberingType)
Definition: WP6ContentListener.cpp:1266
int m_level
Definition: WP6ContentListener.h:135
void lineSpacingChange(const double lineSpacing)
Definition: WP6ContentListener.h:192
void fontChange(const unsigned short matchedFontPointSize, const unsigned short fontPID, const librevenge::RVNGString &fontName)
Definition: WP6ContentListener.cpp:702
void handleLineBreak()
Definition: WP6ContentListener.cpp:637
void characterColorChange(const unsigned char red, const unsigned char green, const unsigned char blue)
Definition: WP6ContentListener.cpp:670
std::vector< WP6StyleState > m_stateSequence
Definition: WP6ContentListener.h:80
void styleGroupOn(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1127
void startTable()
Definition: WP6ContentListener.cpp:1349
WPXNumberingType getListType(int level)
Definition: WP6ContentListener.h:146
void commentAnnotation(const unsigned short textPID)
Definition: WP6ContentListener.cpp:1741
unsigned char m_oldListLevel
Definition: WP6ContentListener.h:109
void paragraphMarginChange(const unsigned char side, const signed short margin)
Definition: WP6ContentListener.cpp:863
void update(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag)
Definition: WP6ContentListener.cpp:67
void noteOff(const WPXNoteType noteType)
Definition: WP6ContentListener.cpp:1229
WP6StyleState getPreviousState() const
Definition: WP6ContentListener.h:69
WPXFormOrientation
Definition: libwpd_internal.h:99
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:139
void attributeChange(const bool isOn, const unsigned char attribute)
Definition: WP6ContentListener.cpp:727
void updateOutlineDefinition(const unsigned short outlineHash, const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag)
Definition: WP6ContentListener.cpp:1000
void setAlignmentCharacter(const unsigned character)
Definition: WP6ContentListener.cpp:386
WP6ContentListener & operator=(const WP6ContentListener &)
Definition: WPXSubDocument.h:34
void setCurrentState(WP6StyleState state)
Definition: WP6ContentListener.h:60
double m_paragraphMarginBottomRelative
Definition: WP6ContentListener.h:94
WPXNumberingType m_listTypes[WP6_NUM_LIST_LEVELS]
Definition: WP6ContentListener.h:157
unsigned m_numNestedNotes
Definition: WP6ContentListener.h:115
WPXVerticalAlignment
Definition: libwpd_internal.h:101
void pageFormChange(const unsigned short, const unsigned short, const WPXFormOrientation)
Definition: WP6ContentListener.h:208
unsigned short m_currentOutlineHash
Definition: WP6ContentListener.h:108
WPXTableList m_tableList
Definition: WP6ContentListener.h:102
#define WP6_NUM_LIST_LEVELS
Definition: WP6FileStructure.h:36
void _paragraphNumberOn(const unsigned short outlineHash, const unsigned char level)
Definition: WP6ContentListener.cpp:1815
void highlightChange(const bool isOn, const RGBSColor &color)
Definition: WP6ContentListener.cpp:690
void _updateNumberingMethods(const unsigned char *numberingMethods)
Definition: WP6ContentListener.cpp:72
std::stack< unsigned > m_listLevelStack
Definition: WP6ContentListener.h:106
unsigned m_noteTextPID
Definition: WP6ContentListener.h:114
void setPageNumber(const unsigned short)
Definition: WP6ContentListener.h:228
void endSubDocument()
Definition: WPXContentListener.cpp:184
std::vector< WPXTabStop > m_tempTabStops
Definition: WP6ContentListener.h:123
void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice=0)
Definition: WP6ContentListener.cpp:1767
void styleGroupOff(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1162
void _flushText()
Definition: WP6ContentListener.cpp:1826
void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute)
Definition: WP6ContentListener.cpp:800
void boxOff()
Definition: WP6ContentListener.cpp:1691
Definition: libwpd_internal.h:160
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, const librevenge::RVNGString &linkTarget)
Definition: WP6ContentListener.cpp:1446
void displayNumberReferenceGroupOff(const unsigned char subGroup)
Definition: WP6ContentListener.cpp:1070
librevenge::RVNGString m_textAfterNumber
Definition: WP6ContentListener.h:92
void _handleListChange(const unsigned short outlineHash)
Definition: WP6ContentListener.cpp:1888
~WP6ContentListener()
Definition: WP6ContentListener.cpp:165
unsigned char m_leaderNumSpaces
Definition: WP6ContentListener.h:122
void pageNumberingChange(const WPXPageNumberPosition, const unsigned short, const unsigned short)
Definition: WP6ContentListener.h:206
WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice=0)
Definition: WP6ContentListener.cpp:105
void globalOn(const unsigned char systemStyle)
Definition: WP6ContentListener.cpp:1186
void insertCharacter(unsigned character)
Definition: WP6ContentListener.cpp:414
void indentFirstLineChange(const signed short offset)
Definition: WP6ContentListener.cpp:905
WPXPageNumberPosition
Definition: libwpd_internal.h:91
void endDocument()
Definition: WP6ContentListener.h:230
bool m_isLinkOpened
Definition: WP6ContentListener.h:119
unsigned m_leaderCharacter
Definition: WP6ContentListener.h:121
std::map< unsigned, librevenge::RVNGPropertyList > m_listDefinitions
Definition: WP6ContentListener.h:278
void pageMarginChange(const unsigned char, const unsigned short)
Definition: WP6ContentListener.h:207
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:43
void headerFooterGroup(const unsigned char, const unsigned char, const unsigned short)
Definition: WP6ContentListener.h:226
void suppressPageCharacteristics(const unsigned char)
Definition: WP6ContentListener.h:227
void endTable()
Definition: WP6ContentListener.cpp:1434
WPXTable * m_currentTable
Definition: WP6ContentListener.h:103
WP6ContentListener(std::list< WPXPageSpan > &pageList, WPXTableList tableList, librevenge::RVNGTextInterface *documentInterface)
Definition: WP6ContentListener.cpp:157
void startDocument()
Definition: WPXContentListener.cpp:142
void defineTabStops(const bool isRelative, const std::vector< WPXTabStop > &tabStops, const std::vector< bool > &usePreWP9LeaderMethods)
Definition: WP6ContentListener.cpp:459
WP6ContentParsingState * m_parseState
Definition: WP6ContentListener.h:275
Definition: WP6ContentListener.h:160
void insertTab(const unsigned char tabType, double tabPosition)
Definition: WP6ContentListener.cpp:476
void lineSpacingChange(const double lineSpacing)
Definition: WPXContentListener.cpp:1301
std::stack< WP6ListType > m_listTypeStack
Definition: WP6ContentListener.h:107
librevenge::RVNGString m_bodyText
Definition: WP6ContentListener.h:87
void setExtendedInformation(const unsigned short type, const librevenge::RVNGString &data)
Definition: WP6ContentListener.cpp:239
unsigned m_numRemovedParagraphBreaks
Definition: WP6ContentListener.h:97
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:170
WP6StyleState getCurrentState() const
Definition: WP6ContentListener.h:65
void endSubDocument()
Definition: WP6ContentListener.h:234
void clear()
Definition: WP6ContentListener.h:73
WP6OutlineDefinition()
Definition: WP6ContentListener.cpp:54
#define WPD_NUM_ELEMENTS(array)
Definition: libwpd_internal.h:55
void startSubDocument()
Definition: WP6ContentListener.h:170
WPXNoteType
Definition: libwpd_internal.h:87
bool m_isListReference
Definition: WP6ContentListener.h:100
Definition: WP6ContentListener.h:83

Generated for libwpd by doxygen 1.8.9.1