WPS8.h

Go to the documentation of this file.
00001 /* libwpd
00002  * Copyright (C) 2006, 2007 Andrew Ziem
00003  * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
00004  * Copyright (C) 2003 Marc Maurer (uwog@uwog.net)
00005  *  
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Library General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Library General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Library General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
00019  *
00020  */
00021 
00022 #ifndef WPS8_H
00023 #define WPS8_H
00024 
00025 #include <vector>
00026 #include <list>
00027 #include <map>
00028 #include <libwpd/WPXString.h>
00029 
00030 #include "libwps_internal.h"
00031 #include "WPS.h"
00032 #include "WPSContentListener.h"
00033 #include "WPSStream.h"
00034 #include "WPSParser.h"
00035 
00041 class HeaderIndexEntries
00042 {
00043 public:
00044         uint32_t offset;
00045         uint32_t length;
00046 };
00047 
00048 class WPS8Listener;
00049 
00050 
00051 class WPS8PrefixDataPacket
00052 {
00053 public:
00054         WPS8PrefixDataPacket(WPSInputStream * input);   
00055         virtual ~WPS8PrefixDataPacket() {}
00056         virtual void parse(WPS8Listener *listener) const {}
00057 
00058 protected:
00059         virtual void _readContents(WPSInputStream *input) = 0;
00060         void _read(WPSInputStream *input, uint32_t dataOffset, uint32_t dataSize);
00061 };
00062 
00063 class WPS8Listener
00064 {
00065 public:
00066         WPS8Listener();
00067         virtual ~WPS8Listener() {}
00068 
00069         virtual void startDocument() = 0;
00070         virtual void insertCharacter(const uint16_t character) = 0;
00071         virtual void insertTab(const uint8_t tabType, float tabPosition) = 0;
00072         virtual void insertBreak(const uint8_t breakType) = 0;
00073         virtual void insertEOL() = 0;
00074         virtual void lineSpacingChange(const float lineSpacing) = 0;
00075         virtual void attributeChange(const bool isOn, const uint8_t attribute) = 0;
00076         virtual void pageMarginChange(const uint8_t side, const uint16_t margin) = 0;
00077         virtual void pageFormChange(const uint16_t length, const uint16_t width, const WPSFormOrientation orientation, const bool isPersistent) = 0;
00078         virtual void marginChange(const uint8_t side, const uint16_t margin) = 0;
00079         virtual void indentFirstLineChange(const int16_t offset) = 0;
00080         virtual void columnChange(const WPSTextColumnType columnType, const uint8_t numColumns, const std::vector<float> &columnWidth,
00081                                         const std::vector<bool> &isFixedWidth) = 0;
00082         virtual void endDocument() = 0;
00083 
00084         virtual void undoChange(const uint8_t undoType, const uint16_t undoLevel) = 0;
00085         virtual void justificationChange(const uint8_t justification) = 0;
00086         virtual void setTextColor(const RGBSColor * fontColor) = 0;
00087         virtual void setTextFont(const WPXString fontName) = 0;
00088         virtual void setFontSize(const uint16_t fontSize) = 0;
00089         virtual void insertPageNumber(const WPXString &pageNumber) = 0;
00090         virtual void insertNoteReference(const WPXString &noteReference) = 0;
00091         virtual void suppressPage(const uint16_t suppressCode) = 0;
00092 };
00093 
00094 typedef std::multimap <std::string, HeaderIndexEntries> HeaderIndexMultiMap; /* string is name */
00095 
00096 class WPS8Parser : public WPSParser
00097 {
00098 public:
00099         WPS8Parser(WPSInputStream *input, WPSHeader * header);
00100         ~WPS8Parser();
00101 
00102         void parse(WPXHLListenerImpl *listenerImpl);
00103 private:
00104         void readFontsTable(WPSInputStream * input);
00105         void appendUTF16LE(WPSInputStream *input, WPS8Listener *listener);
00106         void readText(WPSInputStream * input, WPS8Listener *listener);
00107         bool readFODPage(WPSInputStream * input, std::vector<FOD> * FODs, uint16_t page_size);
00108         void parseHeaderIndexEntry(WPSInputStream * input);
00109         void parseHeaderIndex(WPSInputStream * input);
00110         void parsePages(std::list<WPSPageSpan> &pageList, WPSInputStream *input);
00111         void parse(WPSInputStream *stream, WPS8Listener *listener);
00112         void propertyChangeTextAttribute(const uint32_t newTextAttributeBits, const uint8_t attribute, const uint32_t bit, WPS8Listener *listener);
00113         void propertyChangeDelta(uint32_t newTextAttributeBits, WPS8Listener *listener);
00114         void propertyChange(std::string rgchProp, WPS8Listener *listener);
00115         uint32_t offset_eot; /* stream offset to end of text */
00116         uint32_t oldTextAttributeBits;
00117         HeaderIndexMultiMap headerIndexTable;
00118         std::vector<FOD> CHFODs; /* CHaracter FOrmatting Descriptors */         
00119         std::vector<std::string> fonts;
00120 };
00121 
00122 
00123 typedef struct _WPS8ContentParsingState WPS8ContentParsingState;
00124 struct _WPS8ContentParsingState
00125 {
00126         _WPS8ContentParsingState();
00127         ~_WPS8ContentParsingState();
00128         WPXString m_textBuffer;
00129 };
00130 
00131 
00132 class WPS8ContentListener : public WPS8Listener, protected WPSContentListener
00133 {
00134 public:
00135         WPS8ContentListener(std::list<WPSPageSpan> &pageList, WPXHLListenerImpl *listenerImpl);
00136         ~WPS8ContentListener();
00137 
00138         void startDocument() { WPSContentListener::startDocument(); };
00139         void insertCharacter(const uint16_t character);
00140         void insertTab(const uint8_t tabType, float tabPosition);
00141         void insertBreak(const uint8_t breakType) { WPSContentListener::insertBreak(breakType); };
00142         void insertEOL();
00143         void attributeChange(const bool isOn, const uint8_t attribute);
00144         void lineSpacingChange(const float lineSpacing) { WPSContentListener::lineSpacingChange(lineSpacing); };
00145         void pageMarginChange(const uint8_t side, const uint16_t margin) {};
00146         void pageFormChange(const uint16_t length, const uint16_t width, const WPSFormOrientation orientation, const bool isPersistent) {};
00147         void marginChange(const uint8_t side, const uint16_t margin);
00148         void indentFirstLineChange(const int16_t offset);
00149         void columnChange(const WPSTextColumnType columnType, const uint8_t numColumns, const std::vector<float> &columnWidth,
00150                                         const std::vector<bool> &isFixedWidth);
00151         void endDocument() { WPSContentListener::endDocument(); };
00152 
00153         void undoChange(const uint8_t undoType, const uint16_t undoLevel);
00154         void justificationChange(const uint8_t justification);
00155         void setTextColor(const RGBSColor * fontColor);
00156         void setTextFont(const WPXString fontName);
00157         void setFontSize(const uint16_t fontSize);
00158         void insertPageNumber(const WPXString &pageNumber);
00159         void insertNoteReference(const WPXString &noteReference);
00160         void insertNote(const WPSNoteType noteType);
00161         void suppressPage(const uint16_t suppressCode);
00162         
00163 protected:
00164         void _openParagraph();
00165 
00166         void _flushText();
00167         void _changeList() {};
00168         
00169 private:
00170         WPS8ContentParsingState *m_parseState;  
00171 };
00172 
00173 #endif /* WPS8_H */

Generated on Mon Sep 10 13:52:18 2007 for libwps by doxygen 1.5.3