Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

WP6HLContentListener.h

Go to the documentation of this file.
00001 /* libwpd
00002  * Copyright (C) 2002 William Lachance (william.lachance@sympatico.ca)
00003  * Copyright (C) 2002 Marc Maurer (j.m.maurer@student.utwente.nl)
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU Library General Public
00007  * License as published by the Free Software Foundation; either
00008  * version 2 of the License, or (at your option) any later version.
00009  *
00010  * This library is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Library General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Library General Public
00016  * License along with this library; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00018  *
00019  * For further information visit http://libwpd.sourceforge.net
00020  */
00021 
00022 /* "This product is not manufactured, approved, or supported by
00023  * Corel Corporation or Corel Corporation Limited."
00024  */
00025 
00026 #ifndef WP6HLCONTENTLISTENER_H
00027 #define WP6HLCONTENTLISTENER_H
00028 
00029 #include "WP6HLListener.h"
00030 #include "WPXHLListener.h"
00031 #include "WP6FileStructure.h"
00032 
00033 #include <stack>
00034 #include <map>
00035 #include <vector>
00036 
00037 class WPXHLListenerImpl;
00038 class WP6LLParser;
00039 class WPXTable;
00040 
00041 enum WP6StyleState { NORMAL, DOCUMENT_NOTE, DOCUMENT_NOTE_GLOBAL,
00042                      BEGIN_BEFORE_NUMBERING,
00043                      BEGIN_NUMBERING_BEFORE_DISPLAY_REFERENCING,
00044                      DISPLAY_REFERENCING,
00045                      BEGIN_NUMBERING_AFTER_DISPLAY_REFERENCING,
00046                      BEGIN_AFTER_NUMBERING, STYLE_BODY, STYLE_END };
00047 
00048 const int STATE_MEMORY = 3;
00049 class WP6StyleStateSequence
00050 {
00051 public:
00052         WP6StyleStateSequence() { clear(); }
00053         void setCurrentState(WP6StyleState state) { for (int i=(STATE_MEMORY-1); i>0; i--) m_stateSequence[i] = m_stateSequence[i-1]; m_stateSequence[0]=state; }
00054         const WP6StyleState getCurrentState() const { return m_stateSequence[0]; /*currentState;*/ }
00055         const WP6StyleState getPreviousState() const { return m_stateSequence[1]; /*m_previousState;*/ }
00056         void clear() { m_stateSequence.clear(); for (int i=0; i<STATE_MEMORY; i++) m_stateSequence.push_back(NORMAL); }
00057 
00058 private:
00059         std::vector<WP6StyleState> m_stateSequence;
00060         WP6StyleState m_currentState;
00061         WP6StyleState m_previousState;
00062 };
00063 
00064 typedef struct _WP6ParsingState WP6ParsingState;
00065 struct _WP6ParsingState
00066 {
00067         _WP6ParsingState(WPXTableList tableList, int nextTableIndice = 0);
00068         ~_WP6ParsingState();
00069         WPXString m_bodyText;
00070         WPXString m_textBeforeNumber;
00071         WPXString m_textBeforeDisplayReference;
00072         WPXString m_numberText;
00073         WPXString m_textAfterDisplayReference;
00074         WPXString m_textAfterNumber;
00075 
00076         float m_paragraphMarginBottomRelative;
00077         float m_paragraphMarginBottomAbsolute;
00078 
00079         int m_numRemovedParagraphBreaks;
00080 
00081         WPXTableList m_tableList;
00082         WPXTable *m_currentTable;
00083         int m_nextTableIndice;
00084 
00085         std::stack<int> m_listLevelStack;
00086         uint16_t m_currentOutlineHash; // probably should replace Hash with Key in these sorts of cases
00087         uint8_t m_oldListLevel;
00088         uint8_t m_currentListLevel;
00089         WP6StyleStateSequence m_styleStateSequence;
00090         bool m_putativeListElementHasParagraphNumber;
00091         bool m_putativeListElementHasDisplayReferenceNumber;
00092 
00093         int m_noteTextPID;
00094 
00095         uint16_t m_leaderCharacter;
00096         uint8_t m_leaderNumSpaces;
00097         std::vector<WPXTabStop> m_tempTabStops;
00098         std::vector<bool> m_tempUsePreWP9LeaderMethod;
00099 };
00100 
00101 struct _WP6ListLevel
00102 {
00103         int m_level;
00104         bool m_isListElementOpenAtLevel;
00105 };
00106 
00107 class WP6OutlineDefinition
00108 {
00109  public:
00110         WP6OutlineDefinition();
00111         WP6OutlineDefinition(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods,
00112                           const uint8_t tabBehaviourFlag);
00113         void update(const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
00114 
00115         WPXNumberingType getListType(int level) { return m_listTypes[level]; }
00116 
00117 protected:
00118         void _updateNumberingMethods(const WP6OutlineLocation outlineLocation, const uint8_t *numberingMethods);
00119 
00120 private:
00121         WPXNumberingType m_listTypes[WP6_NUM_LIST_LEVELS];
00122 };
00123 
00124 class WP6HLContentListener : public WP6HLListener
00125 {
00126 public:
00127         WP6HLContentListener(std::vector<WPXPageSpan *> *pageList, WPXTableList tableList, WPXHLListenerImpl *listenerImpl);
00128         virtual ~WP6HLContentListener();
00129 
00130         // for getting low-level messages from the parser
00131         virtual void setDate(const uint16_t year, const uint8_t month, const uint8_t day,
00132                                                 const uint8_t hour, const uint8_t minute, const uint8_t second,
00133                                                 const uint8_t dayOfWeek, const uint8_t timeZone, const uint8_t unused) {}
00134         virtual void setExtendedInformation(const uint16_t type, const WPXString &data);
00135         virtual void setAlignmentCharacter(const uint16_t character);
00136         virtual void setLeaderCharacter(const uint16_t character, const uint8_t numSpaces);
00137         virtual void defineTabStops(const bool isRelative, const std::vector<WPXTabStop> &tabStops, 
00138                                     const std::vector<bool> &usePreWP9LeaderMethods);
00139         virtual void insertCharacter(const uint16_t character);
00140         virtual void insertTab(const uint8_t tabType, const float tabPosition);
00141         virtual void handleLineBreak();
00142         virtual void insertEOL();
00143         virtual void characterColorChange(const uint8_t red, const uint8_t green, const uint8_t blue);
00144         virtual void characterShadingChange(const uint8_t shading);
00145         virtual void highlightChange(const bool isOn, const RGBSColor color);
00146         virtual void fontChange(const uint16_t matchedFontPointSize, const uint16_t fontPID);
00147         virtual void attributeChange(const bool isOn, const uint8_t attribute);
00148         virtual void spacingAfterParagraphChange(const float spacingRelative, const float spacingAbsolute);
00149         virtual void pageMarginChange(const uint8_t side, const uint16_t margin) {}
00150         virtual void pageFormChange(const uint16_t length, const uint16_t width, const WPXFormOrientation orientation, const bool isPersistent) {}
00151         virtual void marginChange(const uint8_t side, const uint16_t margin);
00152         virtual void paragraphMarginChange(const uint8_t side, const int16_t margin);
00153         virtual void indentFirstLineChange(const int16_t offset);
00154         virtual void columnChange(const WPXTextColumnType columnType, const uint8_t numColumns, const std::vector<float> &columnWidth,
00155                                   const std::vector<bool> &isFixedWidth);
00156         virtual void updateOutlineDefinition(const WP6OutlineLocation outlineLocation, const uint16_t outlineHash,
00157                                              const uint8_t *numberingMethods, const uint8_t tabBehaviourFlag);
00158 
00159         virtual void paragraphNumberOn(const uint16_t outlineHash, const uint8_t level, const uint8_t flag);
00160         virtual void paragraphNumberOff();
00161         virtual void displayNumberReferenceGroupOn(const uint8_t subGroup, const uint8_t level);
00162         virtual void displayNumberReferenceGroupOff(const uint8_t subGroup);
00163         virtual void styleGroupOn(const uint8_t subGroup);
00164         virtual void styleGroupOff(const uint8_t subGroup);
00165         virtual void globalOn(const uint8_t systemStyle);
00166         virtual void globalOff();
00167         virtual void noteOn(const uint16_t textPID);
00168         virtual void noteOff(const WPXNoteType noteType);
00169         virtual void headerFooterGroup(const uint8_t headerFooterType, const uint8_t occurenceBits, const uint16_t textPID) {}
00170         virtual void suppressPageCharacteristics(const uint8_t suppressCode) {}
00171         virtual void endDocument();
00172 
00173         virtual void defineTable(uint8_t position, uint16_t leftOffset);
00174         virtual void addTableColumnDefinition(uint32_t width, uint32_t leftGutter, uint32_t rightGutter);
00175         virtual void startTable();
00176         virtual void insertRow(const uint16_t rowHeight, const bool isMinimumHeight, const bool isHeaderRow);
00177         virtual void insertCell(const uint8_t colSpan, const uint8_t rowSpan, const bool boundFromLeft, const bool boundFromAbove,
00178                                 const uint8_t borderBits, const RGBSColor * cellFgColor, const RGBSColor * cellBgColor,
00179                                 const RGBSColor * cellBorderColor, 
00180                                 const WPXVerticalAlignment cellVerticalAlignment, const uint32_t cellAttributes);
00181         virtual void endTable();
00182 
00183 
00184 protected:
00185         virtual void _handleSubDocument(uint16_t textPID, const bool isHeaderFooter, WPXTableList tableList, int nextTableIndice = 0);
00186 
00187         //void _handleLineBreakElementBegin();
00188         void _paragraphNumberOn(const uint16_t outlineHash, const uint8_t level);
00189         void _flushText(const bool fakeText=false);
00190         void _handleListChange(const uint16_t outlineHash);
00191 
00192         void _flushList();
00193 
00194 private:
00195         WP6ParsingState *m_parseState;
00196 
00197         std::map<int,WP6OutlineDefinition *> m_outlineDefineHash;
00198 };
00199 
00200 #endif /* WP6HLCONTENTLISTENER_H */

Generated on Tue Jul 26 11:52:46 2005 for libwpd by doxygen 1.4.3-20050530