summaryrefslogtreecommitdiffstats
path: root/filters/kword/applixword/applixwordimport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kword/applixword/applixwordimport.cpp')
-rw-r--r--filters/kword/applixword/applixwordimport.cpp790
1 files changed, 790 insertions, 0 deletions
diff --git a/filters/kword/applixword/applixwordimport.cpp b/filters/kword/applixword/applixwordimport.cpp
new file mode 100644
index 000000000..4c8b6620a
--- /dev/null
+++ b/filters/kword/applixword/applixwordimport.cpp
@@ -0,0 +1,790 @@
+/* This file is part of the KDE project
+ Copyright (C) 2000 Enno Bartels <ebartels@nwn.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 <tqmessagebox.h>
+#include <tqptrlist.h>
+#include <applixwordimport.h>
+#include <applixwordimport.moc>
+#include <kdebug.h>
+#include <KoFilterChain.h>
+#include <kgenericfactory.h>
+
+typedef KGenericFactory<APPLIXWORDImport, KoFilter> APPLIXWORDImportFactory;
+K_EXPORT_COMPONENT_FACTORY( libapplixwordimport, APPLIXWORDImportFactory( "kofficefilters" ) )
+
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: APPLIXWORDImport *
+ ******************************************************************************
+ * *
+ * Short description : Constructor *
+ * *
+ * *
+ ******************************************************************************/
+APPLIXWORDImport::APPLIXWORDImport (KoFilter *, const char *, const TQStringList& ) :
+ KoFilter()
+{
+}
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: nextLine *
+ ******************************************************************************
+ * *
+ * Short description : Readline and update progressbar *
+ * *
+ * *
+ ******************************************************************************/
+TQString
+APPLIXWORDImport::nextLine (TQTextStream & stream)
+{
+ TQString s;
+
+ // Read one Line
+ s = stream.readLine();
+
+ m_instep += s.length();
+ if (m_instep > m_stepsize)
+ {
+ m_instep = 0;
+ m_progress += 2;
+ emit sigProgress (m_progress) ;
+ }
+
+ return s;
+}
+
+
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: filter *
+ ******************************************************************************
+ * *
+ * Short description : *
+ * *
+ * *
+ ******************************************************************************/
+KoFilter::ConversionStatus APPLIXWORDImport::convert( const TQCString& from, const TQCString& to )
+{
+
+ if (to!="application/x-kword" || from!="application/x-applixword")
+ return KoFilter::NotImplemented;
+
+ TQFile in(m_chain->inputFile());
+ if (!in.open (IO_ReadOnly))
+ {
+ kdError(30517) << "Unable to open input file!" << endl;
+ in.close();
+ return KoFilter::FileNotFound;
+ }
+
+
+ TQString str;
+
+ str += "<?xml version=\"1.0\"?>\n";
+ str += "<DOC author=\"Reginald Stadlbauer and Torben Weis\" email=\"reggie@kde.org and weis@kde.org\" editor=\"KWord\" mime=\"application/x-kword\">\n";
+ str += " <PAPER format=\"1\" ptWidth=\"595\" ptHeight=\"841\" mmWidth =\"210\" mmHeight=\"297\" inchWidth =\"8.26772\" inchHeight=\"11.6929\" orientation=\"0\" columns=\"1\" ptColumnspc=\"2\" mmColumnspc=\"1\" inchColumnspc=\"0.0393701\" hType=\"0\" fType=\"0\" ptHeadBody=\"9\" ptFootBody=\"9\" mmHeadBody=\"3.5\" mmFootBody=\"3.5\" inchHeadBody=\"0.137795\" inchFootBody=\"0.137795\">\n";
+ str += " <PAPERBORDERS mmLeft=\"10\" mmTop=\"15\" mmRight=\"10\" mmBottom=\"15\" ptLeft=\"28\" ptTop=\"42\" ptRight=\"28\" ptBottom=\"42\" inchLeft=\"0.393701\" inchTop=\"0.590551\" inchRight=\"0.393701\" inchBottom=\"0.590551\"/>\n";
+ str += " </PAPER>\n";
+ str += " <ATTRIBUTES processing=\"0\" standardpage=\"1\" hasHeader=\"0\" hasFooter=\"0\" />\n";
+ str += " <FRAMESETS>\n";
+ str += " <FRAMESET frameType=\"1\" autoCreateNewFrame=\"1\" frameInfo=\"0\" removeable=\"0\">\n";
+ str += " <FRAME left=\"28\" top=\"42\" right=\"566\" bottom=\"798\" runaround=\"1\" runaGapPT=\"2\" runaGapMM=\"1\" runaGapINCH=\"0.0393701\" lWidth=\"1\" lRed=\"255\" lGreen=\"255\" lBlue=\"255\" lStyle=\"0\" rWidth=\"1\" rRed=\"255\" rGreen=\"255\" rBlue=\"255\" rStyle=\"0\" tWidth=\"1\" tRed=\"255\" tGreen=\"255\" tBlue=\"255\" tStyle=\"0\" bWidth=\"1\" bRed=\"255\" bGreen=\"255\" bBlue=\"255\" bStyle=\"0\" bkRed=\"255\" bkGreen=\"255\" bkBlue=\"255\" bleftpt=\"0\" bleftmm=\"0\" bleftinch=\"0\" brightpt=\"0\" brightmm=\"0\" brightinch=\"0\" btoppt=\"0\" btopmm=\"0\" btopinch=\"0\" bbottompt=\"0\" bbottommm=\"0\" bbottominch=\"0\"/>\n";
+
+
+ TQTextStream stream (&in);
+
+ m_stepsize = in.size()/50;
+ m_instep = 0;
+ m_progress = 0;
+
+ int rueck;
+ int pos, ok;
+ char stylename[100];
+ TQString mystr, textstr;
+ TQPtrList<t_mycolor> mcol;
+ TQStringList mcoltxt;
+
+ /**************************************************************************
+ * Read header *
+ **************************************************************************/
+ if (! readHeader (stream, in)) return KoFilter::StupidError;
+
+
+ while (!stream.atEnd())
+ {
+ // Read one line
+ mystr = readTagLine (stream, in);
+ ok = true;
+
+ /**********************************************************************
+ * jump over start_styles if it exists *
+ **********************************************************************/
+ if (mystr == "<start_styles>")
+ {
+ printf ("Start styles\n");
+ t_mycolor *col = new t_mycolor; // delete is in place
+ TQString coltxt ;
+ int zaehler = 0; // Note: "zaehler" means "counter" in English
+ do
+ {
+ mystr = readTagLine (stream, in);
+ if (mystr == "<end_styles>")
+ {
+ ok = false;
+ kdDebug(30517)<<"End styles\n\n";
+ }
+ else
+ {
+ if (mystr.startsWith ("<color "))
+ {
+ mystr.remove (0, 8);
+ pos = mystr.find ("\"");
+ coltxt = mystr.left (pos);
+ mystr.remove (0,pos+1);
+ rueck = sscanf ((const char *) mystr.latin1() ,
+ ":%d:%d:%d:%d>",
+ &col->c, &col->m, &col->y, &col->k);
+ kdDebug(30517)<<" Color " << zaehler<<" : "<<col->c << " " << col->m<< " "<< col->y<<" "<< col->k<<" "<<coltxt<<" "<<endl;
+ zaehler ++;
+
+ // Color transformation cmyk -> rgb
+ col->r = 255 - (col->c + col->k);
+ if (col->r < 0) col->r = 0;
+
+ col->g = 255 - (col->m + col->k);
+ if (col->g < 0) col->g = 0;
+
+ col->b = 255 - (col->y + col->k);
+ if (col->b < 0) col->b = 0;
+
+ mcol.append (col);
+ mcoltxt.append (coltxt);
+ } //end if ...<col...
+ } //end else
+ } // end while
+ while (ok == true);
+ delete col;
+ } // end if ...<start_styles>...
+ /***********************************************************************
+ * jump over embedded Applix docs *
+ ***********************************************************************/
+ else if (mystr == "<start_data Applix>")
+ {
+ kdDebug(30517)<<"\nEmbedded Applix object starts:\n";
+ do
+ {
+ mystr = readTagLine (stream, in);
+ if (mystr == "<end_data>") ok = false;
+ else
+ {
+ kdDebug(30517)<<" "<<mystr<<endl;
+ }
+ }
+ while (ok == true);
+ kdDebug(30517)<<"Embedded Applix object ends\n\n";
+
+ }
+ /**********************************************************************
+ * jump over header footer *
+ **********************************************************************/
+ else if (mystr.startsWith ("<start_hdrftr "))
+ {
+ kdDebug(30517)<<"\nHeader/Footer starts:\n";
+ do
+ {
+ mystr = readTagLine (stream, in);
+ if (mystr == "<end_hdrftr>") ok = false;
+ else
+ {
+ kdDebug(30517)<<" "<<mystr<<endl;
+ }
+ }
+ while (ok == true);
+ kdDebug(30517)<<"\nHeader/Footer ends\n";
+ }
+ /**********************************************************************
+ * found a paragraph string *
+ **********************************************************************/
+ else if (mystr.startsWith ("<P "))
+ {
+ sscanf ( (const char *) mystr.latin1(), "<P \"%99s\"", stylename);
+ mystr.remove (0, 5+strlen(stylename));
+ kdDebug(30517)<<" Para Name: "<< stylename<<endl;
+ kdDebug(30517)<<" Rest: "<<mystr<<endl;
+ }
+ /**********************************************************************
+ * found a textstring *
+ **********************************************************************/
+ else if (mystr.startsWith ("<T "))
+ {
+ TQString colname;
+
+ // Remove starting tab info
+ mystr.remove (0, 4);
+
+ // Remove ending >
+ mystr.remove (mystr.length()-1, 1);
+
+ // Separate textstring "
+ ok = true;
+ int y=0;
+ do
+ {
+ pos = mystr.find ("\"", y);
+ kdDebug(30517)<<"POS:"<<pos<<" length:"<< mystr.length()<<" y:"<<y <<endl;
+
+ kdDebug(30517)<<"< "<<mystr<<" >\n";
+ if( (pos-1 > -1) && (mystr[pos-1] == '\\'))
+ {
+ kdDebug(30517)<<" No string end - but Gänsefüsschen\n";
+ y=pos+1;
+ }
+ else
+ {
+ kdDebug(30517)<<" String end //\n";
+ ok = false;
+ }
+ }
+ while (ok == true);
+
+ textstr = mystr.left (pos);
+ mystr.remove (0, pos+1);
+ mystr.stripWhiteSpace();
+ kdDebug(30517) <<"Text:<" <<textstr <<" > "<< pos<<" Rest:<"<< mystr<<"> \n";
+
+ // split format
+ TQStringList typeList;
+ typeList = TQStringList::split (' ', mystr);
+
+ int fontsize=12, bold=0, italic=0, underline=0, colpos=-1;
+ TQString fontname;
+ int nn=0;
+ for (TQStringList::Iterator it = typeList.begin(); it != typeList.end(); ++it )
+ {
+ kdDebug(30517) <<" No: "<< nn<< " > "<< (*it)<< "< = \n";
+
+ // Looking for bold
+ if ((*it) == "bold")
+ {
+ bold = 1;
+ kdDebug(30517)<<"bold\n";
+ }
+ else if ((*it) == "no-bold")
+ {
+ bold = 0;
+ kdDebug(30517)<<"no bold\n";
+ }
+ else if ((*it) == "italic")
+ {
+ italic = 1;
+ kdDebug(30517)<<"italic\n";
+ }
+ else if ((*it) == "no-italic")
+ {
+ italic = 0;
+ kdDebug(30517) <<"no italic\n";
+ }
+ else if ((*it) == "underline")
+ {
+ underline = 1;
+ kdDebug(30517)<<"underline\n";
+ }
+ else if ((*it) == "no-underline")
+ {
+ underline = 0;
+ kdDebug(30517) <<"no underline\n";
+ }
+ else if ((*it).startsWith ("size"))
+ {
+ (*it).remove (0, 5);
+ sscanf ( (const char *) (*it).latin1(), "%d", &fontsize);
+ kdDebug(30517)<<"fontsize: "<< fontsize<<endl;
+ }
+ else if ((*it).startsWith ("face"))
+ {
+ (*it).remove (0, 6);
+ (*it).remove ((*it).length()-1, 1);
+ fontname = *it;
+ kdDebug(30517)<<"fontname: "<<fontname<<endl;
+ }
+ else if ((*it).startsWith ("color:"))
+ {
+ (*it).remove (0, 7);
+ (*it).remove ((*it).length()-1, 1);
+ colname = *it;
+ colpos = mcoltxt.findIndex (colname);
+ kdDebug(30517) <<" Color: "<< colname<<" "<< colpos <<" \n";
+ }
+ else
+ {
+ kdDebug(30517)<<" "<< (*it)<<endl;
+ }
+
+
+ }
+ kdDebug(30517) <<"\n";
+
+ // Replaces Part for & <>, applixwear special characters and qouts
+ replaceSpecial (textstr);
+
+
+ // add text inside
+ str += " <PARAGRAPH>\n";
+ str += " <TEXT>";
+ str += textstr;
+ str += "</TEXT>\n";
+
+ if (bold == 1 || underline == 1 || italic == 1 || fontsize != 12 ||
+ colpos != -1 || !fontname.isEmpty())
+ {
+ str += " <LAYOUT>\n";
+ str += " <FORMAT>\n";
+ if (!fontname.isEmpty())
+ {
+ str += " <FONT name=\"";
+ str += fontname;
+ str += "\" />\n";
+ }
+
+ if (fontsize != 1)
+ {
+ str += " <SIZE value=\"";
+ str += TQString::number (fontsize);
+ str += "\" />\n";
+ }
+
+ if (italic == 1)
+ {
+ str += " <ITALIC value=\"1\" />\n";
+ }
+
+ if (bold == 1)
+ {
+ str += " <WEIGHT value=\"75\" />\n";
+ }
+
+ if (underline == 1)
+ {
+ str += " <UNDERLINE value=\"1\" />\n";
+ }
+
+ if (colpos != -1)
+ {
+ t_mycolor *mc = new t_mycolor; // delete is in place
+ mc = mcol.at(colpos);
+ str += " <COLOR red=\"";
+
+ str += TQString::number (mc->r);
+ str += "\" green=\"";
+ str += TQString::number (mc->g);
+ str += "\" blue=\"";
+ str += TQString::number (mc->b);
+ str += "\" />\n";
+ delete mc;
+ }
+
+ str += " </FORMAT>\n";
+ str += " </LAYOUT>\n";
+ }
+ str += " </PARAGRAPH>\n";
+ }
+
+ }
+ emit sigProgress(100);
+
+ str += " </FRAMESET>\n";
+ str += " </FRAMESETS>\n";
+ str += "</DOC>\n";
+ kdDebug(30517)<<"Text "<< str <<endl;
+
+ KoStoreDevice* out = m_chain->storageFile( "root", KoStore::Write );
+ if (!out)
+ {
+ kdError(30517) << "Unable to open output file!" << endl;
+ in.close ();
+ return KoFilter::StorageCreationError;
+ }
+
+ TQCString cstring = str.utf8 ();
+
+ out->writeBlock ((const char*) cstring, cstring.length());
+
+ in.close ();
+ return KoFilter::OK;
+}
+
+
+/******************************************************************************
+ * function: specCharfind *
+ ******************************************************************************/
+TQChar
+APPLIXWORDImport::specCharfind (TQChar a, TQChar b)
+{
+ TQChar chr;
+
+ if ( (a == 'n') && (b == 'p') ) chr = 'ß';
+
+
+ else if ( (a == 'n') && (b == 'c') ) chr = 'Ò';
+ else if ( (a == 'p') && (b == 'c') ) chr = 'ò';
+
+ else if ( (a == 'n') && (b == 'd') ) chr = 'Ó';
+ else if ( (a == 'p') && (b == 'd') ) chr = 'ó';
+
+ else if ( (a == 'n') && (b == 'e') ) chr = 'Ô';
+ else if ( (a == 'p') && (b == 'e') ) chr = 'ô';
+
+ else if ( (a == 'n') && (b == 'f') ) chr = 'Õ';
+ else if ( (a == 'p') && (b == 'f') ) chr = 'õ';
+
+ else if ( (a == 'p') && (b == 'g') ) chr = 'ö';
+ else if ( (a == 'n') && (b == 'g') ) chr = 'Ö';
+
+
+
+ else if ( (a == 'n') && (b == 'j') ) chr = 'Ù';
+ else if ( (a == 'p') && (b == 'j') ) chr = 'ù';
+
+ else if ( (a == 'n') && (b == 'k') ) chr = 'Ú';
+ else if ( (a == 'p') && (b == 'k') ) chr = 'ú';
+
+ else if ( (a == 'n') && (b == 'l') ) chr = 'Û';
+ else if ( (a == 'p') && (b == 'l') ) chr = 'û';
+
+ else if ( (a == 'p') && (b == 'm') ) chr = 'ü';
+ else if ( (a == 'n') && (b == 'm') ) chr = 'Ü';
+
+
+
+ else if ( (a == 'm') && (b == 'a') ) chr = 'À';
+ else if ( (a == 'o') && (b == 'a') ) chr = 'à';
+
+ else if ( (a == 'm') && (b == 'b') ) chr = 'Á';
+ else if ( (a == 'o') && (b == 'b') ) chr = 'á';
+
+ else if ( (a == 'm') && (b == 'c') ) chr = 'Â';
+ else if ( (a == 'o') && (b == 'c') ) chr = 'â';
+
+ else if ( (a == 'm') && (b == 'd') ) chr = 'Ã';
+ else if ( (a == 'o') && (b == 'd') ) chr = 'ã';
+
+ else if ( (a == 'm') && (b == 'e') ) chr = 'Ä';
+ else if ( (a == 'o') && (b == 'e') ) chr = 'ä';
+
+ else if ( (a == 'm') && (b == 'f') ) chr = 'Å';
+ else if ( (a == 'o') && (b == 'f') ) chr = 'å';
+
+ else if ( (a == 'm') && (b == 'g') ) chr = 'Æ';
+ else if ( (a == 'o') && (b == 'g') ) chr = 'æ';
+
+
+
+ else if ( (a == 'm') && (b == 'i') ) chr = 'È';
+ else if ( (a == 'o') && (b == 'i') ) chr = 'è';
+
+ else if ( (a == 'm') && (b == 'j') ) chr = 'É';
+ else if ( (a == 'o') && (b == 'j') ) chr = 'é';
+
+ else if ( (a == 'm') && (b == 'k') ) chr = 'Ê';
+ else if ( (a == 'o') && (b == 'k') ) chr = 'ê';
+
+ else if ( (a == 'm') && (b == 'l') ) chr = 'Ë';
+ else if ( (a == 'o') && (b == 'l') ) chr = 'ë';
+
+
+
+
+
+
+ else if ( (a == 'm') && (b == 'm') ) chr = 'Ì';
+ else if ( (a == 'o') && (b == 'm') ) chr = 'ì';
+
+ else if ( (a == 'm') && (b == 'n') ) chr = 'Í';
+ else if ( (a == 'o') && (b == 'n') ) chr = 'í';
+
+ else if ( (a == 'm') && (b == 'o') ) chr = 'Î';
+ else if ( (a == 'o') && (b == 'o') ) chr = 'î';
+
+ else if ( (a == 'm') && (b == 'p') ) chr = 'Ï';
+ else if ( (a == 'o') && (b == 'p') ) chr = 'ï';
+
+
+ else if ( (a == 'n') && (b == 'b') ) chr = 'Ñ';
+ else if ( (a == 'p') && (b == 'b') ) chr = 'ñ';
+
+
+ else if ( (a == 'k') && (b == 'c') ) chr = '¢';
+ else if ( (a == 'k') && (b == 'j') ) chr = '©';
+ else if ( (a == 'l') && (b == 'f') ) chr = 'µ';
+ else if ( (a == 'n') && (b == 'i') ) chr = 'Ø';
+ else if ( (a == 'p') && (b == 'i') ) chr = 'ø';
+
+ else if ( (a == 'l') && (b == 'j') ) chr = '¹';
+ else if ( (a == 'l') && (b == 'c') ) chr = '²';
+ else if ( (a == 'l') && (b == 'd') ) chr = '³';
+
+ else if ( (a == 'l') && (b == 'm') ) chr = '¼';
+ else if ( (a == 'l') && (b == 'n') ) chr = '½';
+ else if ( (a == 'l') && (b == 'o') ) chr = '¾';
+
+ else if ( (a == 'l') && (b == 'a') ) chr = '°';
+
+ else if ( (a == 'k') && (b == 'o') ) chr = '®';
+ else if ( (a == 'k') && (b == 'h') ) chr = '§';
+ else if ( (a == 'k') && (b == 'd') ) chr = '£';
+
+ else if ( (a == 'p') && (b == 'a') ) chr = 'ð';
+ else if ( (a == 'n') && (b == 'a') ) chr = 'Ð';
+
+ else if ( (a == 'l') && (b == 'l') ) chr = '»';
+ else if ( (a == 'k') && (b == 'l') ) chr = '«';
+
+ else if ( (a == 'l') && (b == 'k') ) chr = 'º';
+
+ else if ( (a == 'l') && (b == 'h') ) chr = '·';
+
+ else if ( (a == 'k') && (b == 'b') ) chr = '¡';
+
+ else if ( (a == 'k') && (b == 'e') ) chr = '¤';
+
+ else if ( (a == 'l') && (b == 'b') ) chr = '±';
+
+ else if ( (a == 'l') && (b == 'p') ) chr = '¿';
+
+ else if ( (a == 'k') && (b == 'f') ) chr = '¥';
+
+ else if ( (a == 'p') && (b == 'o') ) chr = 'þ';
+ else if ( (a == 'n') && (b == 'o') ) chr = 'Þ';
+
+ else if ( (a == 'n') && (b == 'n') ) chr = 'Ý';
+ else if ( (a == 'p') && (b == 'n') ) chr = 'ý';
+ else if ( (a == 'p') && (b == 'p') ) chr = 'ÿ';
+
+ else if ( (a == 'k') && (b == 'k') ) chr = 'ª';
+
+ else if ( (a == 'k') && (b == 'm') ) chr = '¬';
+ else if ( (a == 'p') && (b == 'h') ) chr = '÷';
+
+ else if ( (a == 'k') && (b == 'g') ) chr = '|';
+
+ else if ( (a == 'l') && (b == 'e') ) chr = '\'';
+
+ else if ( (a == 'k') && (b == 'i') ) chr = '¨';
+
+ else if ( (a == 'k') && (b == 'n') ) chr = '­';
+
+ else if ( (a == 'k') && (b == 'p') ) chr = '¯';
+
+ else if ( (a == 'l') && (b == 'g') ) chr = '¶';
+
+ else if ( (a == 'l') && (b == 'i') ) chr = '¸';
+
+ else if ( (a == 'm') && (b == 'h') ) chr = 'Ç';
+ else if ( (a == 'o') && (b == 'h') ) chr = 'ç';
+
+ else if ( (a == 'n') && (b == 'h') ) chr = '×';
+
+ else if ( (a == 'k') && (b == 'a') ) chr = ' ';
+
+ else if ( (a == 'a') && (b == 'j') ) chr = '!';
+
+ else chr = '#';
+
+ return chr;
+}
+
+
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: readTagLine *
+ ******************************************************************************
+ * *
+ * Short description : *
+ * *
+ * *
+ ******************************************************************************/
+TQString
+APPLIXWORDImport::readTagLine (TQTextStream &stream, TQFile &in)
+{
+ TQString mystrn, mystr;
+ int ok, pos;
+
+ // Read one line
+ mystr = nextLine (stream);
+
+ // Delete whitespaces
+ mystr.stripWhiteSpace();
+
+ // Look if the tag continues on the next line
+ if ((mystr.length() == 80) && (mystr[mystr.length()-1] == '\\') )
+ {
+ ok = true;
+ do
+ {
+ // Get the actual position in the file
+ pos = in.at ();
+
+ // Read next line
+ mystrn = nextLine (stream);
+
+ // Is the new line a new tag line
+ if (mystrn[0] == ' ')
+ {
+ // remove the whitespace at the start of the new line
+ mystrn.remove (0, 1);
+
+ // remove the '/' at the end of the old line
+ mystr.remove (mystr.length()-1, 1);
+
+ // append the new line
+ mystr += mystrn;
+ }
+ else
+ {
+ // was the newline a newtaglien the jump back
+ in.at (pos);
+ ok = false;
+ }
+ }
+ while (ok == true);
+ }
+
+ return mystr;
+}
+
+
+
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: replaceSpecial *
+ ******************************************************************************
+ * *
+ * Short description : *
+ * *
+ * *
+ ******************************************************************************/
+void
+APPLIXWORDImport::replaceSpecial (TQString &textstr)
+{
+ int ok, pos;
+
+ // 1. Replace Part for this characters: <, >, &
+ textstr.replace ('&', "&amp;");
+ textstr.replace ('<', "&lt;");
+ textstr.replace ('>', "&gt;");
+
+
+ // 2. Replace part for this characters: applixwear qoutes
+ ok = true;
+ pos = 0;
+ do
+ {
+ // Searching for an quote
+ pos = textstr.find ('\"', pos);
+
+ // Is it an textqoute ?
+ if ((pos > -1) && (textstr[pos-1] == '\\'))
+ {
+ textstr.replace (pos-1, 2,"\"");
+ }
+ else
+ {
+ ok = false;
+ }
+ }
+ while (ok == true);
+
+
+
+ // 3. Replace part for Applix Characters
+ int foundSpecialCharakter;
+ TQChar newchar;
+
+ do
+ {
+ // initialize
+ foundSpecialCharakter = false;
+
+ pos = textstr.find ("^");
+
+ // is there a special character ?
+ if (pos > -1 )
+ {
+ // i have found a special character !
+ foundSpecialCharakter = true;
+
+ // translate the applix special character
+ newchar = specCharfind (textstr[pos+1], textstr[pos+2]);
+
+ // replace the character
+ textstr.replace (pos, 3, newchar);
+ }
+ }
+ while (foundSpecialCharakter == true);
+}
+
+
+
+/******************************************************************************
+ * class: APPLIXWORDImport function: readHeader *
+ ******************************************************************************
+ * *
+ * Short description : *
+ * *
+ * *
+ ******************************************************************************/
+int
+APPLIXWORDImport::readHeader (TQTextStream &stream, TQFile &in)
+{
+ TQString mystr;
+ int rueck;
+ int vers[3] = { 0, 0, 0 };
+
+ // Read Headline
+ mystr = readTagLine (stream, in);
+
+ // mystr = stream.readLine ();
+ rueck = sscanf ((const char *) mystr.latin1() ,
+ "*BEGIN WORDS VERSION=%d/%d ENCODING=%dBIT",
+ &vers[0], &vers[1], &vers[2]);
+ printf ("Versions info: %d %d %d\n", vers[0], vers[1], vers[2]);
+
+ // Check the headline
+ if (rueck <= 0)
+ {
+ printf ("Header not correkt - May be it is not an applixword file\n");
+ printf ("Headerline: <%s>\n", (const char *) mystr.latin1());
+
+ TQMessageBox::critical (0L, "Applixword header problem",
+ TQString ("The Applixword header is not correct. "
+ "May be it is not an applixword file! <BR>"
+ "This is the header line I did read:<BR><B>%1</B>").arg(mystr.latin1()),
+ "Okay");
+
+ // i18n( "What is the separator used in this file ? First line is \n%1" ).arg(firstLine),
+ return false;
+ }
+ else return true;
+}