00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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 typedef std::multimap <std::string, HeaderIndexEntries> HeaderIndexMultiMap;
00049
00050 class WPS8ContentListener : public WPSContentListener
00051 {
00052 public:
00053 WPS8ContentListener(std::list<WPSPageSpan> &pageList, WPXHLListenerImpl *listenerImpl);
00054 ~WPS8ContentListener();
00055
00056 void attributeChange(const bool isOn, const uint8_t attribute);
00057
00058 private:
00059 WPS8ContentListener(const WPS8ContentListener&);
00060 WPS8ContentListener& operator=(const WPS8ContentListener&);
00061 };
00062
00063 class WPS8Parser : public WPSParser
00064 {
00065 public:
00066 WPS8Parser(WPSInputStream *input, WPSHeader * header);
00067 ~WPS8Parser();
00068
00069 void parse(WPXHLListenerImpl *listenerImpl);
00070 private:
00071 void readFontsTable(WPSInputStream * input);
00072 void appendUTF16LE(WPSInputStream *input, WPS8ContentListener *listener);
00073 void readText(WPSInputStream * input, WPS8ContentListener *listener);
00074 bool readFODPage(WPSInputStream * input, std::vector<FOD> * FODs, uint16_t page_size);
00075 void parseHeaderIndexEntry(WPSInputStream * input);
00076 void parseHeaderIndex(WPSInputStream * input);
00077 void parsePages(std::list<WPSPageSpan> &pageList, WPSInputStream *input);
00078 void parse(WPSInputStream *stream, WPS8ContentListener *listener);
00079 void propertyChangeTextAttribute(const uint32_t newTextAttributeBits, const uint8_t attribute, const uint32_t bit, WPS8ContentListener *listener);
00080 void propertyChangeDelta(uint32_t newTextAttributeBits, WPS8ContentListener *listener);
00081 void propertyChange(std::string rgchProp, WPS8ContentListener *listener);
00082 uint32_t offset_eot;
00083 uint32_t oldTextAttributeBits;
00084 HeaderIndexMultiMap headerIndexTable;
00085 std::vector<FOD> CHFODs;
00086 std::vector<std::string> fonts;
00087 };
00088
00089
00090 #endif