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 IE_IMP_WP_H
00030 #define IE_IMP_WP_H
00031
00032 #include <stdio.h>
00033 #include <libwpd/libwpd.h>
00034 #include "ie_imp.h"
00035 #include "ut_string.h"
00036 #include "ut_string_class.h"
00037 #include "ut_growbuf.h"
00038 #include "ut_mbtowc.h"
00039 #include "ut_hash.h"
00040 #include "pd_Document.h"
00041 #include "fl_AutoNum.h"
00042 #include "fl_TableLayout.h"
00043 #include "fp_types.h"
00044
00045 using namespace std;
00046
00047 #define WP6_NUM_LIST_LEVELS 8 // see WP6FileStructure.h
00048
00049
00050 class ABI_ListDefinition
00051 {
00052 public:
00053 ABI_ListDefinition(int iOutlineHash);
00054 void setListID(const int iLevel, const UT_uint32 iID) { m_iListIDs[iLevel-1] = iID; }
00055 UT_uint32 getListID(const int iLevel) const { return m_iListIDs[iLevel-1]; }
00056 FL_ListType getListType(const int iLevel) const { return m_listTypes[iLevel-1]; }
00057 void setListType(const int iLevel, const char type);
00058 void incrementLevelNumber(const int iLevel) { m_iListNumbers[iLevel - 1]++; }
00059 void setLevelNumber(const int iLevel, const int iNumber) { m_iListNumbers[iLevel - 1] = iNumber; }
00060 void setListLeftOffset(const int iLevel, const float listLeftOffset) { m_listLeftOffset[iLevel - 1] = listLeftOffset; }
00061 void setListMinLabelWidth(const int iLevel, const float listMinLabelWidth) { m_listMinLabelWidth[iLevel - 1] = listMinLabelWidth; }
00062 int getLevelNumber(const int iLevel) const { return m_iListNumbers[iLevel - 1]; }
00063 float getListLeftOffset(const int iLevel) const { return m_listLeftOffset[iLevel - 1]; }
00064 float getListMinLabelWidth(const int iLevel) const { return m_listMinLabelWidth[iLevel - 1]; }
00065 int getOutlineHash() const { return m_iOutlineHash; }
00066
00067 private:
00068
00069 UT_uint32 m_iListIDs[WP6_NUM_LIST_LEVELS];
00070 int m_iListNumbers[WP6_NUM_LIST_LEVELS];
00071 FL_ListType m_listTypes[WP6_NUM_LIST_LEVELS];
00072 float m_listLeftOffset[WP6_NUM_LIST_LEVELS];
00073 float m_listMinLabelWidth[WP6_NUM_LIST_LEVELS];
00074 int m_iOutlineHash;
00075 };
00076
00077 class IE_Imp_WordPerfect_Sniffer : public IE_ImpSniffer
00078 {
00079 friend class IE_Imp;
00080 friend class IE_Imp_WordPerfect;
00081
00082 public:
00083 IE_Imp_WordPerfect_Sniffer();
00084 virtual ~IE_Imp_WordPerfect_Sniffer();
00085
00086 virtual const IE_SuffixConfidence * getSuffixConfidence ();
00087 virtual UT_Confidence_t recognizeContents (GsfInput * input);
00088 virtual const IE_MimeConfidence * getMimeConfidence () { return NULL; }
00089 virtual bool getDlgLabels (const char ** szDesc,
00090 const char ** szSuffixList,
00091 IEFileType * ft);
00092 virtual UT_Error constructImporter (PD_Document * pDocument,
00093 IE_Imp ** ppie);
00094 };
00095
00096 class IE_Imp_WordPerfect : public IE_Imp, public WPXHLListenerImpl
00097 {
00098 public:
00099 IE_Imp_WordPerfect(PD_Document * pDocument);
00100 virtual ~IE_Imp_WordPerfect();
00101
00102 virtual void pasteFromBuffer(PD_DocumentRange * pDocRange,
00103 UT_uint8 * pData, UT_uint32 lenData, const char * szEncoding = 0);
00104
00105 virtual void setDocumentMetaData(const WPXPropertyList &propList);
00106
00107 virtual void startDocument();
00108 virtual void endDocument();
00109
00110 virtual void openPageSpan(const WPXPropertyList &propList);
00111 virtual void closePageSpan() {}
00112 virtual void openHeader(const WPXPropertyList &propList);
00113 virtual void closeHeader();
00114 virtual void openFooter(const WPXPropertyList &propList);
00115 virtual void closeFooter();
00116
00117 virtual void openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops);
00118 virtual void closeParagraph() {}
00119
00120 virtual void openSpan(const WPXPropertyList &propList);
00121 virtual void closeSpan() {}
00122
00123 virtual void openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns);
00124 virtual void closeSection() {}
00125
00126 virtual void insertTab();
00127 virtual void insertText(const WPXString &text);
00128 virtual void insertLineBreak();
00129
00130 virtual void defineOrderedListLevel(const WPXPropertyList &propList);
00131 virtual void defineUnorderedListLevel(const WPXPropertyList &propList);
00132 virtual void openOrderedListLevel(const WPXPropertyList &propList);
00133 virtual void openUnorderedListLevel(const WPXPropertyList &propList);
00134 virtual void closeOrderedListLevel();
00135 virtual void closeUnorderedListLevel();
00136 virtual void openListElement(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops);
00137 virtual void closeListElement() {}
00138
00139 virtual void openFootnote(const WPXPropertyList &propList);
00140 virtual void closeFootnote();
00141 virtual void openEndnote(const WPXPropertyList &propList);
00142 virtual void closeEndnote();
00143
00144 virtual void openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns);
00145 virtual void openTableRow(const WPXPropertyList &propList);
00146 virtual void closeTableRow() {}
00147 virtual void openTableCell(const WPXPropertyList &propList);
00148 virtual void closeTableCell() {}
00149 virtual void insertCoveredTableCell(const WPXPropertyList & ) {}
00150 virtual void closeTable();
00151
00152
00153 protected:
00154 virtual UT_Error _loadFile(GsfInput * input);
00155 UT_Error _appendSection(int numColumns, const float, const float);
00156
00157 UT_Error _appendListSpan(UT_uint32 listTag);
00158
00159
00160 UT_Error _updateDocumentOrderedListDefinition(ABI_ListDefinition *pListDefinition,
00161 int iLevel, const char listType,
00162 const UT_UTF8String &sTextBeforeNumber,
00163 const UT_UTF8String &sTextAfterNumber,
00164 int iStartingNumber);
00165 UT_Error _updateDocumentUnorderedListDefinition(ABI_ListDefinition *pListDefinition,
00166 int level);
00167 private:
00168
00169 float m_leftPageMargin;
00170 float m_rightPageMargin;
00171 float m_leftSectionMargin;
00172 float m_rightSectionMargin;
00173 int m_sectionColumnsCount;
00174 UT_sint8 m_headerId;
00175 UT_sint8 m_footerId;
00176 UT_uint32 m_nextFreeId;
00177
00178
00179 float m_topMargin;
00180 float m_bottomMargin;
00181 float m_leftMarginOffset;
00182 float m_rightMarginOffset;
00183 float m_textIndent;
00184
00185
00186
00187 ABI_ListDefinition * m_pCurrentListDefinition;
00188 bool m_bParagraphChanged;
00189 bool m_bParagraphInSection;
00190 bool m_bInSection;
00191 bool m_bSectionChanged;
00192 bool m_bRequireBlock;
00193
00194 int m_iCurrentListLevel;
00195 bool m_bInCell;
00196
00197
00198 int m_bHdrFtrOpenCount;
00199 };
00200
00201 #ifdef HAVE_LIBWPS
00202
00203 class IE_Imp_MSWorks_Sniffer : public IE_ImpSniffer
00204 {
00205 friend class IE_Imp;
00206 friend class IE_Imp_MSWorks;
00207
00208 public:
00209 IE_Imp_MSWorks_Sniffer();
00210 virtual ~IE_Imp_MSWorks_Sniffer();
00211
00212 virtual const IE_SuffixConfidence * getSuffixConfidence ();
00213 virtual UT_Confidence_t recognizeContents (GsfInput * input);
00214 virtual const IE_MimeConfidence * getMimeConfidence () { return NULL; }
00215 virtual bool getDlgLabels (const char ** szDesc,
00216 const char ** szSuffixList,
00217 IEFileType * ft);
00218 virtual UT_Error constructImporter (PD_Document * pDocument,
00219 IE_Imp ** ppie);
00220 };
00221
00222 #endif
00223
00224 #endif