filters

oowriterimport.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2002 Laurent Montel <lmontel@mandrakesoft.com>
00003    Copyright (C) 2003 David Faure <faure@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
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     // Reads from m_styleStack, writes the text properties to parentElement
00054     void writeFormat( QDomDocument& doc, QDomElement& parentElement, int id, int pos, int length );
00055     // Reads from m_styleStack, writes the paragraph properties to layoutElement
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; // only the first elem inside list-item is numbered
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; // set by parseBodyOrSimilar
00111 
00112     struct BookmarkStart {
00113         BookmarkStart() {} // for stupid QValueList
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; // maybe generalize to include number formats.
00125 
00126     uint m_pictureNumber; // Number of the picture (increment *before* use)
00127     KZip* m_zip; // Input KZip file
00128 };
00129 
00130 #endif
00131 
KDE Home | KDE Accessibility Home | Description of Access Keys