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 
85 {
86  _WP6ContentParsingState(WPXTableList tableList, unsigned nextTableIndice = 0);
88  librevenge::RVNGString m_bodyText;
89  librevenge::RVNGString m_textBeforeNumber;
90  librevenge::RVNGString m_textBeforeDisplayReference;
91  librevenge::RVNGString m_numberText;
92  librevenge::RVNGString m_textAfterDisplayReference;
93  librevenge::RVNGString m_textAfterNumber;
94 
97 
99 
102 
106 
107  std::stack<unsigned> m_listLevelStack;
108  std::stack<WP6ListType> m_listTypeStack;
109  unsigned short m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
110  unsigned char m_oldListLevel;
114 
115  unsigned m_noteTextPID;
117 
119 
121  unsigned char m_leaderNumSpaces;
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 unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
143  void update(const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
144 
146  {
147  return m_listTypes[level];
148  }
149 
150 protected:
151  void _updateNumberingMethods(const unsigned char *numberingMethods);
152 
153 private:
155 };
156 
158 {
159 public:
160  WP6ContentListener(std::list<WPXPageSpan> &pageList, WPXTableList tableList, librevenge::RVNGTextInterface *documentInterface);
162 
164  {
166  }
168  {
170  }
171  void setDate(const unsigned short type, const unsigned short year,
172  const unsigned char month, const unsigned char day,
173  const unsigned char hour, const unsigned char minute,
174  const unsigned char second, const unsigned char dayOfWeek,
175  const unsigned char timeZone, const unsigned char unused);
176  void setExtendedInformation(const unsigned short type, const librevenge::RVNGString &data);
177  void setAlignmentCharacter(const unsigned character);
178  void setLeaderCharacter(const unsigned character, const unsigned char numSpaces);
179  void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops,
180  const std::vector<bool> &usePreWP9LeaderMethods);
181  void insertCharacter(unsigned character);
182  void insertTab(const unsigned char tabType, double tabPosition);
183  void handleLineBreak();
184  void insertEOL();
185  void insertBreak(const unsigned char breakType)
186  {
188  }
189  void lineSpacingChange(const double lineSpacing)
190  {
192  }
193  void justificationChange(const unsigned char justification)
194  {
196  }
197  void characterColorChange(const unsigned char red, const unsigned char green, const unsigned char blue);
198  void characterShadingChange(const unsigned char shading);
199  void highlightChange(const bool isOn, const RGBSColor &color);
200  void fontChange(const unsigned short matchedFontPointSize, const unsigned short fontPID, const librevenge::RVNGString &fontName);
201  void attributeChange(const bool isOn, const unsigned char attribute);
202  void spacingAfterParagraphChange(const double spacingRelative, const double spacingAbsolute);
203  void pageNumberingChange(const WPXPageNumberPosition /* page numbering position */, const unsigned short /* matchedFontPointSize */, const unsigned short /* fontPID */) {}
204  void pageMarginChange(const unsigned char /* side */, const unsigned short /* margin */) {}
205  void pageFormChange(const unsigned short /* length */, const unsigned short /* width */, const WPXFormOrientation /* orientation */) {}
206  void marginChange(const unsigned char side, const unsigned short margin);
207  void paragraphMarginChange(const unsigned char side, const signed short margin);
208  void indentFirstLineChange(const signed short offset);
209  void columnChange(const WPXTextColumnType columnType, const unsigned char numColumns, const std::vector<double> &columnWidth,
210  const std::vector<bool> &isFixedWidth);
211  void updateOutlineDefinition(const unsigned short outlineHash, const unsigned char *numberingMethods, const unsigned char tabBehaviourFlag);
212 
213  void paragraphNumberOn(const unsigned short outlineHash, const unsigned char level, const unsigned char flag);
214  void paragraphNumberOff();
215  void displayNumberReferenceGroupOn(const unsigned char subGroup, const unsigned char level);
216  void displayNumberReferenceGroupOff(const unsigned char subGroup);
217  void styleGroupOn(const unsigned char subGroup);
218  void styleGroupOff(const unsigned char subGroup);
219  void globalOn(const unsigned char systemStyle);
220  void globalOff();
221  void noteOn(const unsigned short textPID);
222  void noteOff(const WPXNoteType noteType);
223  void headerFooterGroup(const unsigned char /* headerFooterType */, const unsigned char /* occurrenceBits */, const unsigned short /* textPID */) {}
224  void suppressPageCharacteristics(const unsigned char /* suppressCode */) {}
225  void setPageNumber(const unsigned short /* pageNumber */) {}
226  void setPageNumberingType(const WPXNumberingType pageNumberingType);
227  void endDocument()
228  {
230  }
232  {
234  }
235 
236  void defineTable(const unsigned char position, const unsigned short leftOffset);
237  void addTableColumnDefinition(const unsigned width, const unsigned leftGutter, const unsigned rightGutter,
238  const unsigned attributes, const unsigned char alignment);
239  void startTable();
240  void insertRow(const unsigned short rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
241  void insertCell(const unsigned char colSpan, const unsigned char rowSpan, const unsigned char borderBits,
242  const RGBSColor *cellFgColor, const RGBSColor *cellBgColor,
243  const RGBSColor *cellBorderColor, const WPXVerticalAlignment cellVerticalAlignment,
244  const bool useCellAttributes, const unsigned cellAttributes);
245  void endTable();
246  void boxOn(const unsigned char anchoringType, const unsigned char generalPositioningFlags, const unsigned char horizontalPositioningFlags,
247  const signed short horizontalOffset, const unsigned char leftColumn, const unsigned char rightColumn,
248  const unsigned char verticalPositioningFlags, const signed short verticalOffset, const unsigned char widthFlags, const unsigned short width,
249  const unsigned char heightFlags, const unsigned short height, const unsigned char boxContentType, const unsigned short nativeWidth,
250  const unsigned short nativeHeight);
251  void boxOff();
252  void insertGraphicsData(const unsigned short packetId);
253  void insertTextBox(const WP6SubDocument *subDocument);
254  void commentAnnotation(const unsigned short textPID);
255 
256  void undoChange(const unsigned char undoType, const unsigned short undoLevel);
257 
258 protected:
259  void _handleSubDocument(const WPXSubDocument *subDocument, WPXSubDocumentType subDocumentType, WPXTableList tableList, unsigned nextTableIndice = 0);
260 
261  //void _handleLineBreakElementBegin();
262  void _paragraphNumberOn(const unsigned short outlineHash, const unsigned char level);
263  void _flushText();
264  void _handleListChange(const unsigned short outlineHash);
265 
266  void _changeList();
267 
268 private:
272 
273  std::map<unsigned short,WP6OutlineDefinition> m_outlineDefineHash;
274  std::map<unsigned, librevenge::RVNGPropertyList> m_listDefinitions;
275 };
276 
277 #endif /* WP6CONTENTLISTENER_H */
278 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */

Generated for libwpd by doxygen 1.8.4