diff options
Diffstat (limited to 'filters/kword/palmdoc/palmdocimport.cpp')
-rw-r--r-- | filters/kword/palmdoc/palmdocimport.cpp | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/filters/kword/palmdoc/palmdocimport.cpp b/filters/kword/palmdoc/palmdocimport.cpp new file mode 100644 index 000000000..a1e8107bc --- /dev/null +++ b/filters/kword/palmdoc/palmdocimport.cpp @@ -0,0 +1,214 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Ariya Hidayat <ariyahidayat@yahoo.de> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include <config.h> + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include <tqfileinfo.h> +#include <tqstringlist.h> +#include <tqfont.h> + +#include <kdebug.h> +#include <KoFilterChain.h> +#include <kgenericfactory.h> +#include <KoGlobal.h> + +#include <palmdb.h> +#include <palmdoc.h> + +#include "palmdocimport.h" +#include "palmdoc.h" + +typedef KGenericFactory<PalmDocImport, KoFilter> PalmDocImportFactory; +K_EXPORT_COMPONENT_FACTORY( libpalmdocimport, PalmDocImportFactory( "kofficefilters" ) ) + +PalmDocImport::PalmDocImport( KoFilter *, const char *, const TQStringList& ): + KoFilter() +{ +} + +KoFilter::ConversionStatus PalmDocImport::convert( const TQCString& from, const TQCString& to ) +{ + // check for proper conversion + if( to!= "application/x-kword" || from != "application/vnd.palm" ) + return KoFilter::NotImplemented; + + PalmDoc doc; + TQString inputFile( m_chain->inputFile() ); + doc.load( inputFile.latin1() ); + + if( doc.result() == PalmDoc::InvalidFormat ) + return KoFilter::NotImplemented; + if( doc.result() == PalmDoc::ReadError ) + return KoFilter::FileNotFound; + + TQString root = processPlainDocument( doc.text() ); + + // prepare storage + KoStoreDevice *out=m_chain->storageFile( "root", KoStore::Write ); + + if( out ) + { + TQCString cstring = root.utf8(); + cstring.prepend( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); + out->writeBlock( (const char*) cstring, cstring.length() ); + } + + TQString docTitle = doc.name(); + if( docTitle.isEmpty() ) + { + TQFileInfo info( inputFile ); + docTitle = info.baseName(); + } + + TQString documentInfo = processDocumentInfo( docTitle ); + + // store document info + out = m_chain->storageFile( "documentinfo.xml", KoStore::Write ); + if( out ) + { + TQCString cstring = documentInfo.utf8(); + cstring.prepend( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); + out->writeBlock( (const char*) cstring, cstring.length() ); + } + + return KoFilter::OK; +} + +TQString PalmDocImport::processPlainParagraph( TQString text ) +{ + TQString formats, layout, result; + + // specify FORMAT (just empty element) + formats.append ( " <FORMAT id=\"1\" pos=\"0\" len=\"" + + TQString::number( text.length() )+ "\">\n" ); + formats.append ( " </FORMAT>\n" ); + + TQFont font = KoGlobal::defaultFont(); + TQString fontFamily = font.family(); + double fontSize = font.pointSizeFloat(); + + // default LAYOUT + layout.append( "<LAYOUT>\n" ); + layout.append( " <NAME value=\"Standard\" />\n" ); + layout.append( " <FLOW align=\"left\" />\n" ); + layout.append( " <LINESPACING value=\"0\" />\n" ); + layout.append( " <LEFTBORDER width=\"0\" style=\"0\" />\n" ); + layout.append( " <RIGHTBORDER width=\"0\" style=\"0\" />\n" ); + layout.append( " <TOPBORDER width=\"0\" style=\"0\" />\n" ); + layout.append( " <BOTTOMBORDER width=\"0\" style=\"0\" />\n" ); + layout.append( " <INDENTS />\n" ); + layout.append( " <OFFSETS after=\"9\" />\n" ); + layout.append( " <PAGEBREAKING />\n" ); + layout.append( " <COUNTER />\n" ); + layout.append( " <FORMAT id=\"1\">\n" ); + layout.append( " <SIZE value=\"" + TQString::number( fontSize ) + "\" />\n" ); + layout.append( " <WEIGHT value=\"50\" />\n" ); + layout.append( " <ITALIC value=\"0\" />\n" ); + layout.append( " <UNDERLINE value=\"0\" />\n" ); + layout.append( " <STRIKEOUT value=\"0\" />\n" ); + layout.append( " <CHARSET value=\"0\" />\n" ); + layout.append( " <VERTALIGN value=\"0\" />\n" ); + layout.append( " <FONT name=\"" + fontFamily + "\" />\n" ); + layout.append( " </FORMAT>\n" ); + layout.append( "</LAYOUT>\n" ); + + // encode text for XML-ness + text.replace( '&', "&" ); + text.replace( '<', "<" ); + text.replace( '>', ">" ); + text.replace( '"', """ ); + text.replace( '\'', "'" ); + + // construct the <PARAGRAPH> + result.append( "<PARAGRAPH>\n" ); + result.append( "<TEXT>" + text + "</TEXT>\n" ); + result.append( "<FORMATS>\n"); + result.append( formats ); + result.append( "</FORMATS>\n"); + result.append( layout ); + result.append( "</PARAGRAPH>\n" ); + + return result; +} + +TQString PalmDocImport::processPlainDocument( TQString plaindoc ) +{ + TQString prolog, content, epilog; + TQStringList paragraphs; + + paragraphs = TQStringList::split( "\n\n", plaindoc, TRUE ); + for( unsigned int i = 0; i < paragraphs.count(); i++ ) + { + TQString text = paragraphs[i]; + text.replace( '\n', ' ' ); + content.append( processPlainParagraph( text ) ); + } + + prolog = "<!DOCTYPE DOC>\n"; + prolog.append( "<DOC mime=\"application/x-kword\" syntaxVersion=\"2\" editor=\"KWord\">\n"); + + prolog.append( "<PAPER width=\"595\" height=\"841\" format=\"1\" fType=\"0\" orientation=\"0\" hType=\"0\" columns=\"1\">\n" ); + prolog.append( " <PAPERBORDERS left=\"36\" right=\"36\" top=\"36\" bottom=\"36\" />\n" ); + prolog.append( "</PAPER>\n" ); + + prolog.append( "<ATTRIBUTES standardpage=\"1\" hasFooter=\"0\" hasHeader=\"0\" processing=\"0\" />\n" ); + + prolog.append( "<FRAMESETS>\n" ); + prolog.append( "<FRAMESET removable=\"0\" frameType=\"1\" frameInfo=\"0\" autoCreateNewFrame=\"1\">\n" ); + prolog.append( "<FRAME right=\"567\" left=\"28\" top=\"42\" bottom=\"799\" />\n" ); + + epilog = "</FRAMESET>\n"; + epilog.append( "</FRAMESETS>\n" ); + epilog.append( "</DOC>\n" ); + + return prolog + content + epilog; +} + +TQString PalmDocImport::processDocumentInfo( const TQString &title ) +{ + TQString documentInfo; + + documentInfo = "<!DOCTYPE document-info>\n"; + + documentInfo += "<document-info>\n"; + documentInfo += "<log><text></text></log>\n"; + + documentInfo += "<author>\n"; + documentInfo += "<full-name></full-name>\n"; + documentInfo += "<title></title>\n"; + documentInfo += "<company></company>\n"; + documentInfo += "<email></email>\n"; + documentInfo += "<telephone></telephone>\n"; + documentInfo += "</author>\n"; + + documentInfo += "<about>\n"; + documentInfo += "<abstract></abstract>\n"; + documentInfo += "<title>" + title + "</title>\n"; + documentInfo += "</about>\n"; + + documentInfo += "</document-info>"; + + return documentInfo; +} + +#include "palmdocimport.moc" |