00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef OoWriter_IMPORT_H__
00022 #define OoWriter_IMPORT_H__
00023
00024 #include <KoFilter.h>
00025
00026 #include <qdict.h>
00027 #include <qdom.h>
00028 #include <KoStyleStack.h>
00029 #include <liststylestack.h>
00030
00031 class KZip;
00032
00033 class OoWriterImport : public KoFilter
00034 {
00035 Q_OBJECT
00036 public:
00037 OoWriterImport( KoFilter * parent, const char * name, const QStringList & );
00038 virtual ~OoWriterImport();
00039
00040 virtual KoFilter::ConversionStatus convert( QCString const & from, QCString const & to );
00041
00042 private:
00043 void prepareDocument( QDomDocument& mainDocument, QDomElement& framesetsElem );
00044 void finishDocumentContent( QDomDocument& mainDocument );
00045 void writePageLayout( QDomDocument& mainDocument, const QString& masterPageName );
00046 void parseList( QDomDocument& doc, const QDomElement& list, QDomElement& currentFramesetElement );
00047 bool pushListLevelStyle( const QString& listStyleName, int level );
00048 bool pushListLevelStyle( const QString& listStyleName, QDomElement& fullListStyle, int level );
00049 void applyListStyle( QDomDocument& doc, QDomElement& layoutElement, const QDomElement& paragraph );
00050 void writeCounter( QDomDocument& doc, QDomElement& layoutElement, bool heading, int level, bool ordered );
00051 QDomElement parseParagraph( QDomDocument& doc, const QDomElement& paragraph );
00052 void parseSpanOrSimilar( QDomDocument& doc, const QDomElement& parent, QDomElement& kwordParagraph, QDomElement& kwordFormats, QString& paragraphText, uint& pos);
00053
00054 void writeFormat( QDomDocument& doc, QDomElement& parentElement, int id, int pos, int length );
00055
00056 void writeLayout( QDomDocument& doc, QDomElement& layoutElement );
00057 enum NewFrameBehavior { Reconnect=0, NoFollowup=1, Copy=2 };
00058 QDomElement createInitialFrame( QDomElement& parentFramesetElem, double left, double right, double top, double bottom, bool autoExtend, NewFrameBehavior nfb );
00059 void createStyles( QDomDocument &doc );
00060 void createDocumentInfo( QDomDocument &docinfo );
00061 void createDocumentContent( QDomDocument &doccontent, QDomElement& mainFramesetElement );
00062 void parseBodyOrSimilar( QDomDocument &doc, const QDomElement& parent, QDomElement& currentFramesetElement );
00063 KoFilter::ConversionStatus loadAndParse(const QString& filename, QDomDocument& doc);
00064 KoFilter::ConversionStatus openFile();
00065 bool createStyleMap( const QDomDocument & styles, QDomDocument& doc );
00066 void insertStyles( const QDomElement& element, QDomDocument& doc );
00067 void importDateTimeStyle( const QDomElement& parent );
00068 void fillStyleStack( const QDomElement& object, const char* nsURI, const QString& attrName );
00069 void addStyles( const QDomElement* style );
00070 void importFootnotesConfiguration( QDomDocument& doc, const QDomElement& elem, bool endnote );
00071 void importFootnote( QDomDocument& doc, const QDomElement& object, QDomElement& formats, uint pos, const QString& tagName );
00072 QString appendPicture( QDomDocument& doc, const QDomElement& object );
00073 QString appendTextBox( QDomDocument& doc, const QDomElement& object );
00074 void appendTOC( QDomDocument& doc, const QDomElement& toc );
00075 void importFrame( QDomElement& frameElementOut, const QDomElement& object, bool isText );
00076 void importCommonFrameProperties( QDomElement& frameElementOut );
00077 void importHeaderFooter( QDomDocument& doc, const QDomElement& headerFooter, bool isHeader, QDomElement& style );
00078 void anchorFrameset( QDomDocument& doc, QDomElement& formats, uint pos, const QString& frameName );
00079 void appendField(QDomDocument& doc, QDomElement& outputFormats, QDomElement& object, uint pos);
00080 void appendKWordVariable(QDomDocument& doc, QDomElement& formats, const QDomElement& object, uint pos,
00081 const QString& key, int type, QDomElement& child);
00082 void appendBookmark( QDomDocument& doc, int paragId, int pos, const QString& name );
00083 void appendBookmark( QDomDocument& doc, int paragId, int pos, int endParagId, int endPos, const QString& name );
00084 void parseTable( QDomDocument &doc, const QDomElement& parent, QDomElement& currentFramesetElement );
00085 void parseInsideOfTable( QDomDocument &doc, const QDomElement& parent, QDomElement& currentFramesetElement,
00086 const QString& tableName, const QMemArray<double> & columnLefts, uint& row, uint& column );
00087 static QString kWordStyleName( const QString& ooStyleName );
00088
00089 QDomDocument m_content;
00090 QDomDocument m_meta;
00091 QDomDocument m_settings;
00092 QDomDocument m_stylesDoc;
00093
00094 QDict<QDomElement> m_styles;
00095 QDict<QDomElement> m_masterPages;
00096 QDict<QDomElement> m_listStyles;
00097
00098 KoStyleStack m_styleStack;
00099 QDomElement m_defaultStyle;
00100 ListStyleStack m_listStyleStack;
00101 QDomElement m_outlineStyle;
00102 bool m_insideOrderedList;
00103 bool m_nextItemIsListItem;
00104 bool m_hasTOC;
00105 bool m_hasHeader;
00106 bool m_hasFooter;
00107 int m_restartNumbering;
00108 QString m_currentListStyleName;
00109 QString m_currentMasterPage;
00110 QDomElement m_currentFrameset;
00111
00112 struct BookmarkStart {
00113 BookmarkStart() {}
00114 BookmarkStart( const QString&s, int par, int ind )
00115 : frameSetName( s ), paragId( par ), pos( ind ) {}
00116 QString frameSetName;
00117 int paragId;
00118 int pos;
00119 };
00120 typedef QMap<QString, BookmarkStart> BookmarkStartsMap;
00121 BookmarkStartsMap m_bookmarkStarts;
00122
00123 typedef QMap<QString, QString> DataFormatsMap;
00124 DataFormatsMap m_dateTimeFormats;
00125
00126 uint m_pictureNumber;
00127 KZip* m_zip;
00128 };
00129
00130 #endif
00131