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  * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
4  * Copyright (C) 2002 Marc Maurer (uwog@uwog.net)
5  * Copyright (C) 2005-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
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 (int 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]; /*currentState;*/
68  }
70  {
71  return m_stateSequence[1]; /*m_previousState;*/
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;
83 };
84 
87 {
88  _WP6ContentParsingState(WPXTableList tableList, int nextTableIndice = 0);
96 
99 
101 
104 
108 
109  std::stack<int> m_listLevelStack;
110  std::stack<WP6ListType> m_listTypeStack;
111  uint16_t m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
112  uint8_t m_oldListLevel;
116 
119 
121 
124  std::vector<WPXTabStop> m_tempTabStops;
125  std::vector<bool> m_tempUsePreWP9LeaderMethod;
126 
128 
129 private:
132 };
133 
135 {
136  int m_level;
138 };
139 
141 {
142 public:
144  WP6OutlineDefinition(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods,
145  const uint8_t tabBehaviourFlag);
146  void update(const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
147 
149  {
150  return m_listTypes[level];
151  }
152 
153 protected:
154  void _updateNumberingMethods(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods);
155 
156 private:
158 };
159 
161 {
162 public:
163  WP6ContentListener(std::list<WPXPageSpan> &pageList, WPXTableList tableList, WPXDocumentInterface *documentInterface);
165 
167  {
169  };
171  {
173  };
174  void setDate(const uint16_t type, const uint16_t year,
175  const uint8_t month, const uint8_t day,
176  const uint8_t hour, const uint8_t minute,
177  const uint8_t second, const uint8_t dayOfWeek,
178  const uint8_t timeZone, const uint8_t unused);
179  void setExtendedInformation(const uint16_t type, const WPXString &data);
180  void setAlignmentCharacter(const uint16_t character);
181  void setLeaderCharacter(const uint16_t character, const uint8_t numSpaces);
182  void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops,
183  const std::vector<bool> &usePreWP9LeaderMethods);
184  void insertCharacter(uint32_t character);
185  void insertTab(const uint8_t tabType, double tabPosition);
186  void handleLineBreak();
187  void insertEOL();
188  void insertBreak(const uint8_t breakType)
189  {
191  };
192  void lineSpacingChange(const double lineSpacing)
193  {
195  };
196  void justificationChange(const uint8_t justification)
197  {
199  };
200  void characterColorChange(const uint8_t red, const uint8_t green, const uint8_t blue);
201  void characterShadingChange(const uint8_t shading);
202  void highlightChange(const bool isOn, const RGBSColor color);
203  void fontChange(const uint16_t matchedFontPointSize, const uint16_t fontPID, const WPXString &fontName);
204  void attributeChange(const bool isOn, const uint8_t attribute);
205  void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute);
206  void pageNumberingChange(const WPXPageNumberPosition /* page numbering position */, const uint16_t /* matchedFontPointSize */, const uint16_t /* fontPID */) {}
207  void pageMarginChange(const uint8_t /* side */, const uint16_t /* margin */) {}
208  void pageFormChange(const uint16_t /* length */, const uint16_t /* width */, const WPXFormOrientation /* orientation */) {}
209  void marginChange(const uint8_t side, const uint16_t margin);
210  void paragraphMarginChange(const uint8_t side, const int16_t margin);
211  void indentFirstLineChange(const int16_t offset);
212  void columnChange(const WPXTextColumnType columnType, const uint8_t numColumns, const std::vector<double> &columnWidth,
213  const std::vector<bool> &isFixedWidth);
214  void updateOutlineDefinition(const WP6OutlineLocation outlineLocation, const uint16_t outlineHash,
215  const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
216 
217  void paragraphNumberOn(const uint16_t outlineHash, const uint8_t level, const uint8_t flag);
218  void paragraphNumberOff();
219  void displayNumberReferenceGroupOn(const uint8_t subGroup, const uint8_t level);
220  void displayNumberReferenceGroupOff(const uint8_t subGroup);
221  void styleGroupOn(const uint8_t subGroup);
222  void styleGroupOff(const uint8_t subGroup);
223  void globalOn(const uint8_t systemStyle);
224  void globalOff();
225  void noteOn(const uint16_t textPID);
226  void noteOff(const WPXNoteType noteType);
227  void headerFooterGroup(const uint8_t /* headerFooterType */, const uint8_t /* occurenceBits */, const uint16_t /* textPID */) {}
228  void suppressPageCharacteristics(const uint8_t /* suppressCode */) {}
229  void setPageNumber(const uint16_t /* pageNumber */) {}
230  void setPageNumberingType(const WPXNumberingType pageNumberingType);
231  void endDocument()
232  {
234  };
236  {
238  };
239 
240  void defineTable(const uint8_t position, const uint16_t leftOffset);
241  void addTableColumnDefinition(const uint32_t width, const uint32_t leftGutter, const uint32_t rightGutter,
242  const uint32_t attributes, const uint8_t alignment);
243  void startTable();
244  void insertRow(const uint16_t rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
245  void insertCell(const uint8_t colSpan, const uint8_t rowSpan, const uint8_t borderBits,
246  const RGBSColor *cellFgColor, const RGBSColor *cellBgColor,
247  const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment,
248  const bool useCellAttributes, const uint32_t cellAttributes);
249  void endTable();
250  void boxOn(const uint8_t anchoringType, const uint8_t generalPositioningFlags, const uint8_t horizontalPositioningFlags,
251  const int16_t horizontalOffset, const uint8_t leftColumn, const uint8_t rightColumn,
252  const uint8_t verticalPositioningFlags, const int16_t verticalOffset, const uint8_t widthFlags, const uint16_t width,
253  const uint8_t heightFlags, const uint16_t height, const uint8_t boxContentType, const uint16_t nativeWidth,
254  const uint16_t nativeHeight);
255  void boxOff();
256  void insertGraphicsData(const uint16_t packetId);
257  void insertTextBox(const WP6SubDocument *subDocument);
258  void commentAnnotation(const uint16_t textPID);
259 
260  void undoChange(const uint8_t undoType, const uint16_t undoLevel);
261 
262 protected:
263  void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, int nextTableIndice = 0);
264 
265  //void _handleLineBreakElementBegin();
266  void _paragraphNumberOn(const uint16_t outlineHash, const uint8_t level);
267  void _flushText();
268  void _handleListChange(const uint16_t outlineHash);
269 
270  void _changeList();
271 
272 private:
276 
277  std::map<uint16_t,WP6OutlineDefinition *> m_outlineDefineHash;
278 };
279 
280 #endif /* WP6CONTENTLISTENER_H */
281 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */

Generated for libwpd by doxygen 1.8.1.2