/* This file is part of the KDE project Copyright (C) 2002 Ariya Hidayat 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 #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #include #include #include #include #include #include #include typedef KGenericFactory AmiProExportFactory; K_EXPORT_COMPONENT_FACTORY( libamiproexport, AmiProExportFactory( "kofficefilters" ) ) class AmiProWorker : public KWEFBaseWorker { public: AmiProWorker(void) { } virtual ~AmiProWorker(void) { } virtual bool doOpenFile(const TQString& filenameOut, const TQString& to); virtual bool doCloseFile(void); virtual bool doOpenDocument(void); virtual bool doCloseDocument(void); virtual bool doFullParagraph(const TQString& paraText, const LayoutData& layout, const ValueListFormatData& paraFormatDataList); private: TQString filename; TQString result; bool m_bold, m_italic, m_underline, m_underlineDouble; bool m_strike, m_subscript, m_superscript; }; bool AmiProWorker::doOpenFile(const TQString& filenameOut, const TQString& /*to*/) { filename = filenameOut; return TRUE; } bool AmiProWorker::doCloseFile(void) { TQFile out( filename ); if( !out.open( IO_WriteOnly ) ) return FALSE; TQTextStream stream; stream.setDevice( &out ); stream << result; return TRUE; } bool AmiProWorker::doOpenDocument(void) { result = "[ver]\n\t4\n"; result += "[sty]\n\t\n"; result += "[lay]\n"; result += "\tStandard\n"; result += "\t516\n"; result += "\t[rght]\n"; // don't ask me, I have no idea what these numbers are int magic[] = { 16833, 11908, 1, 1440, 1440, 1, 1440, 1440, 0, 1, 0, 1, 0, 2, 1, 1440, 10465, 12, 1, 720, 1, 1440, 1, 2160, 1, 2880, 1, 3600, 1, 4320, 1, 5040, 1, 5760, 1, 6480, 1, 7200, 1, 7920, 1, 8640 }; for( uint i=0; i': result += "<;>"; break; case '[': result += "<[>"; break; case '@': result += "@@"; break; case '\'': result += ""; break; default: result += ch; break; } } return result; } bool AmiProWorker::doFullParagraph(const TQString& paraText, const LayoutData& /*layout*/, const ValueListFormatData& paraFormatDataList) { TQString amiproText = ""; TQString text = paraText; ValueListFormatData::ConstIterator it; for( it = paraFormatDataList.begin(); it!=paraFormatDataList.end(); ++it ) { const FormatData& formatData = *it; // only if the format is for text (id==1) if( formatData.id == 1 ) { TQString partialText; partialText = text.mid( formatData.pos, formatData.len ); partialText = AmiProEscape( partialText ); // apply formatting m_bold = formatData.text.weight >= 75; m_italic = formatData.text.italic; m_underline = formatData.text.underline; m_underlineDouble = formatData.text.underlineValue == "double"; m_subscript = formatData.text.verticalAlignment == 1; m_superscript = formatData.text.verticalAlignment == 2; m_strike = formatData.text.strikeout; if( m_bold ) partialText = "<+!>" + partialText + "<-!>"; if( m_italic ) partialText = "<+\">" + partialText + "<-\">"; if( m_underline && !m_underlineDouble ) partialText = "<+#>" + partialText + "<-#>"; if( m_underlineDouble ) partialText = "<+)>" + partialText + "<-)>"; if( m_subscript ) partialText = "<+'>" + partialText + "<-'>"; if( m_superscript ) partialText = "<+&>" + partialText + "<-&>"; if( m_strike) partialText = "<+%>" + partialText + "<-%>"; amiproText += partialText; } } result += amiproText + "\n\n"; return TRUE; } AmiProExport::AmiProExport( KoFilter *, const char *, const TQStringList& ): KoFilter() { } KoFilter::ConversionStatus AmiProExport::convert( const TQCString& from, const TQCString& to ) { // check for proper conversion if( to!= "application/x-amipro" || from != "application/x-kword" ) return KoFilter::NotImplemented; AmiProWorker* worker = new AmiProWorker(); KWEFKWordLeader* leader = new KWEFKWordLeader( worker ); KoFilter::ConversionStatus result; result = leader->convert( m_chain, from, to ); delete worker; delete leader; return result; } #include "amiproexport.moc"