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
00030
00031
00032
00033
00034 #ifndef MS_WKS4_TEXT
00035 # define MS_WKS4_TEXT
00036
00037 #include <vector>
00038
00039 #include "MWAWEntry.hxx"
00040 #include "MWAWDebug.hxx"
00041 #include "MWAWInputStream.hxx"
00042
00043 namespace MsWks4TextInternal
00044 {
00045 struct Font;
00046 struct Paragraph;
00047 struct State;
00048 }
00049
00050 class MsWksDocument;
00051 class MsWks4Zone;
00052
00064 class MsWks4Text
00065 {
00066 friend class MsWks4Zone;
00067 protected:
00068 struct DataFOD;
00075 typedef bool (MsWks4Text::* FDPParser)(MWAWInputStreamPtr &input, long endPos,
00076 int &id, std::string &mess);
00077 public:
00079 MsWks4Text(MsWksDocument &document);
00080
00082 ~MsWks4Text();
00083
00085 void setDefault(MWAWFont &font);
00086
00088 int numPages() const;
00089
00091 void flushExtra(MWAWInputStreamPtr ) {}
00092
00093 protected:
00097 bool readStructures(MWAWInputStreamPtr input, bool mainOle);
00098
00100 bool readText(MWAWInputStreamPtr input, MWAWEntry const &entry, bool mainOle);
00101
00103 bool readFootNote(MWAWInputStreamPtr input, int id);
00104
00105
00106
00107
00115 typedef bool (MsWks4Text::* DataParser)
00116 (MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess);
00117
00125 bool readPLC(MWAWInputStreamPtr input, MWAWEntry const &entry,
00126 std::vector<long> &textPtrs, std::vector<long> &listValues,
00127 DataParser parser = &MsWks4Text::defDataParser);
00135 bool readSimplePLC(MWAWInputStreamPtr &input, MWAWEntry const &entry,
00136 std::vector<long> &textPtrs,
00137 std::vector<long> &listValues)
00138 {
00139 return readPLC(input, entry, textPtrs, listValues);
00140 }
00141
00143 bool defDataParser(MWAWInputStreamPtr input, long endPos,
00144 long bot, long eot, int id, std::string &mess);
00145
00147 bool readFontNames(MWAWInputStreamPtr input, MWAWEntry const &entry);
00148
00150 bool readFont(MWAWInputStreamPtr &input, long endPos,
00151 int &id, std::string &mess);
00152
00154 void setProperty(MsWks4TextInternal::Paragraph const &tabs);
00156 bool readParagraph(MWAWInputStreamPtr &input, long endPos,
00157 int &id, std::string &mess);
00158
00160 bool ftntDataParser(MWAWInputStreamPtr input, long endPos,
00161 long bot, long eot, int id, std::string &mess);
00162
00164 bool eobjDataParser(MWAWInputStreamPtr input, long endPos,
00165 long bot, long eot, int id, std::string &mess);
00166
00170 bool toknDataParser(MWAWInputStreamPtr input, long endPos,
00171 long bot, long eot, int id, std::string &mess);
00172
00176 bool pgdDataParser(MWAWInputStreamPtr input, long endPos,
00177 long , long, int id, std::string &mess);
00178
00180 void flushNote(int noteId);
00181
00182 protected:
00185 std::vector<DataFOD> mergeSortedLists
00186 (std::vector<DataFOD> const &lst1, std::vector<DataFOD> const &lst2) const;
00187
00190 bool readFDP(MWAWInputStreamPtr &input, MWAWEntry const &entry,
00191 std::vector<DataFOD> &fods, FDPParser parser);
00192
00199 bool findFDPStructures(MWAWInputStreamPtr &input, int which);
00207 bool findFDPStructuresByHand(MWAWInputStreamPtr &input, int which);
00208
00209 protected:
00211 struct DataFOD {
00218 enum Type { ATTR_TEXT, ATTR_PARAG, ATTR_PLC, ATTR_UNKN };
00219
00221 DataFOD() : m_type(ATTR_UNKN), m_pos(-1), m_defPos(0), m_id(-1) {}
00222
00224 Type m_type;
00226 long m_pos;
00228 long m_defPos;
00230 int m_id;
00231 };
00232
00233 private:
00234 MsWks4Text(MsWks4Text const &orig);
00235 MsWks4Text &operator=(MsWks4Text const &orig);
00236 protected:
00238 MWAWParser *m_mainParser;
00240 MWAWParserStatePtr m_parserState;
00241
00243 MsWksDocument &m_document;
00244
00246 MWAWEntry m_textPositions;
00247
00249 mutable shared_ptr<MsWks4TextInternal::State> m_state;
00250
00252 std::vector<DataFOD> m_FODsList;
00253
00255 std::vector<MWAWEntry const *> m_FDPCs;
00257 std::vector<MWAWEntry const *> m_FDPPs;
00258 };
00259
00260 #endif
00261