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:
274  WP6ContentListener &operator=(const WP6ContentListener &);
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
Definition: WP6ContentListener.h:46
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
Definition: WPXTable.h:49
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
WPXNumberingType m_currentPageNumberingType
Definition: WP6ContentListener.h:126
WPXTextColumnType
Definition: libwpd_internal.h:103
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
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
std::vector< bool > m_tempUsePreWP9LeaderMethod
Definition: WP6ContentListener.h:124
unsigned m_numListExtraTabs
Definition: WP6ContentListener.h:99
WP6ListType
Definition: WP6ContentListener.h:50
Definition: WP6ContentListener.h:42
librevenge::RVNGString m_textBeforeDisplayReference
Definition: WP6ContentListener.h:89
WPXSubDocumentType
Definition: libwpd_internal.h:105
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
Definition: WPXTable.h:79
Definition: WP6ContentListener.h:53
WP6StyleState getPreviousState() const
Definition: WP6ContentListener.h:69
Definition: WP6SubDocument.h:33
int m_level
Definition: WP6ContentListener.h:135
void lineSpacingChange(const double lineSpacing)
Definition: WP6ContentListener.h:192
std::vector< WP6StyleState > m_stateSequence
Definition: WP6ContentListener.h:80
WPXNumberingType getListType(int level)
Definition: WP6ContentListener.h:146
unsigned char m_oldListLevel
Definition: WP6ContentListener.h:109
WPXFormOrientation
Definition: libwpd_internal.h:99
Definition: WP6ContentListener.h:47
Definition: WP6ContentListener.h:139
Definition: WPXSubDocument.h:34
void setCurrentState(WP6StyleState state)
Definition: WP6ContentListener.h:60
double m_paragraphMarginBottomRelative
Definition: WP6ContentListener.h:94
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
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
Definition: libwpd_internal.h:160
librevenge::RVNGString m_textAfterNumber
Definition: WP6ContentListener.h:92
unsigned char m_leaderNumSpaces
Definition: WP6ContentListener.h:122
void pageNumberingChange(const WPXPageNumberPosition, const unsigned short, const unsigned short)
Definition: WP6ContentListener.h:206
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
WP6StyleState getCurrentState() const
Definition: WP6ContentListener.h:65
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
WPXTable * m_currentTable
Definition: WP6ContentListener.h:103
void startDocument()
Definition: WPXContentListener.cpp:142
WP6ContentParsingState * m_parseState
Definition: WP6ContentListener.h:275
Definition: WP6ContentListener.h:160
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
unsigned m_numRemovedParagraphBreaks
Definition: WP6ContentListener.h:97
void endSubDocument()
Definition: WP6ContentListener.h:234
void clear()
Definition: WP6ContentListener.h:73
#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.12