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: */

Generated for libwpd by doxygen 1.8.3.1