Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __MSPUBPARSER2K_H__
00030 #define __MSPUBPARSER2K_H__
00031
00032 #include <vector>
00033 #include <map>
00034
00035 #include "MSPUBParser.h"
00036 #include "ShapeType.h"
00037
00038 namespace libmspub
00039 {
00040
00041 class MSPUBParser2k : public MSPUBParser
00042 {
00043 static ShapeType getShapeType(unsigned char shapeSpecifier);
00044 std::vector<unsigned> m_imageDataChunkIndices;
00045 std::vector<unsigned> m_quillColorEntries;
00046 std::map<unsigned, std::vector<unsigned> > m_chunkChildIndicesById;
00047
00048 protected:
00049
00050 bool parse2kShapeChunk(const ContentChunkReference &chunk, WPXInputStream *input,
00051 boost::optional<unsigned> pageSeqNum = boost::optional<unsigned>(),
00052 bool topLevelCall = true);
00053 void parseShapeLine(WPXInputStream *input, bool isRectangle, unsigned offset, unsigned seqNum);
00054 void parseShapeType(WPXInputStream *input,
00055 unsigned seqNum, unsigned chunkOffset,
00056 bool &isGroup, bool &isLine, bool &isImage, bool &isRectangle,
00057 unsigned &flagsOffset);
00058 void parseShapeRotation(WPXInputStream *input, bool isGroup, bool isLine, unsigned seqNum,
00059 unsigned chunkOffset);
00060 void parseShapeFlips(WPXInputStream *input, unsigned flagsOffset, unsigned seqNum,
00061 unsigned chunkOffset);
00062 void parseShapeCoordinates(WPXInputStream *input, unsigned seqNum, unsigned chunkOffset);
00063 bool parseGroup(WPXInputStream *input, unsigned seqNum, unsigned page);
00064 void assignShapeImgIndex(unsigned seqNum);
00065 void parseShapeFill(WPXInputStream *input, unsigned seqNum, unsigned chunkOffset);
00066 bool parseContents(WPXInputStream *input);
00067 virtual bool parseDocument(WPXInputStream *input);
00068 virtual unsigned getColorIndexByQuillEntry(unsigned entry);
00069 virtual int translateCoordinateIfNecessary(int coordinate) const;
00070 virtual unsigned getFirstLineOffset() const;
00071 virtual unsigned getSecondLineOffset() const;
00072 virtual unsigned getShapeFillTypeOffset() const;
00073 virtual unsigned getShapeFillColorOffset() const;
00074 virtual unsigned short getTextMarker() const;
00075 virtual unsigned getTextIdOffset() const;
00076 static Color getColorBy2kIndex(unsigned char index);
00077 static Color getColorBy2kHex(unsigned hex);
00078 static unsigned translate2kColorReference(unsigned ref2k);
00079 static PageType getPageTypeBySeqNum(unsigned seqNum);
00080 virtual void parseContentsTextIfNecessary(WPXInputStream *input);
00081 public:
00082 explicit MSPUBParser2k(WPXInputStream *input, MSPUBCollector *collector);
00083 virtual bool parse();
00084 virtual ~MSPUBParser2k();
00085 };
00086
00087 }
00088
00089 #endif // __MSPUBPARSER2K_H__
00090
00091