summaryrefslogtreecommitdiffstats
path: root/filters/kspread/applixspread/applixspreadimport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kspread/applixspread/applixspreadimport.cpp')
-rw-r--r--filters/kspread/applixspread/applixspreadimport.cpp1326
1 files changed, 1326 insertions, 0 deletions
diff --git a/filters/kspread/applixspread/applixspreadimport.cpp b/filters/kspread/applixspread/applixspreadimport.cpp
new file mode 100644
index 000000000..cb60c83ae
--- /dev/null
+++ b/filters/kspread/applixspread/applixspreadimport.cpp
@@ -0,0 +1,1326 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 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 <tqstringlist.h>
+#include <tqregexp.h>
+#include <tqptrlist.h>
+#include <applixspreadimport.h>
+#include <kdebug.h>
+#include <math.h>
+#include <KoFilterChain.h>
+#include <kgenericfactory.h>
+
+typedef KGenericFactory<APPLIXSPREADImport, KoFilter> APPLIXSPREADImportFactory;
+K_EXPORT_COMPONENT_FACTORY( libapplixspreadimport, APPLIXSPREADImportFactory( "kofficefilters" ) )
+
+
+APPLIXSPREADImport::APPLIXSPREADImport ( TQObject */*parent*/, const char* /*name*/, const TQStringList& )
+ : KoFilter()
+{
+}
+
+TQString APPLIXSPREADImport::nextLine( TQTextStream & stream )
+{
+ TQString s = stream.readLine();
+ m_instep += s.length();
+ if (m_instep > m_stepsize)
+ {
+ m_instep = 0;
+ m_progress += 2;
+ emit sigProgress( m_progress );
+ }
+ return s;
+}
+
+KoFilter::ConversionStatus APPLIXSPREADImport::convert( const TQCString& from, const TQCString& to )
+{
+
+ if (to != "application/x-kspread" || from != "application/x-applixspread")
+ return KoFilter::NotImplemented;
+
+ TQFile in (m_chain->inputFile());
+ if (!in.open(IO_ReadOnly))
+ {
+ kdError(30502) << "Unable to open input file!" << endl;
+ in.close();
+ return KoFilter::FileNotFound;
+ }
+
+ TQString str;
+ TQPtrList<t_mycolor> mcol;
+
+ str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ str += "<!DOCTYPE spreadsheet>\n";
+ str += "<spreadsheet mime=\"application/x-kspread\" editor=\"KSpread\" >\n";
+ str += " <paper format=\"A4\" orientation=\"Portrait\" >\n";
+ str += " <borders right=\"20\" left=\"20\" bottom=\"20\" top=\"20\" />\n";
+ str += " <head/>\n";
+ str += " <foot/>\n";
+ str += " </paper>\n";
+ str += " <locale positivePrefixCurrencySymbol=\"True\" negativeMonetarySignPosition=\"1\" negativePrefixCurrencySymbol=\"True\" fracDigits=\"2\" thousandsSeparator=\" \" dateFormat=\"%A, %e. %B %Y\" timeFormat=\"%H:%M:%S\" monetaryDecimalSymbol=\",\" weekStartsMonday=\"True\" currencySymbol=\"DM\" negativeSign=\"-\" positiveSign=\"\" positiveMonetarySignPosition=\"1\" decimalSymbol=\",\" monetaryThousandsSeparator=\" \" dateFormatShort=\"%d.%m.%Y\" />\n";
+ str += " <map markerColumn=\"1\" activeTable=\"Table1\" markerRow=\"1\" >\n";
+// str += " <table columnnumber=\"0\" borders=\"0\" hide=\"0\" hidezero=\"0\" firstletterupper=\"0\" grid=\"1\" formular=\"0\" lcmode=\"0\" name=\"Tabelle1\" >\n";
+
+
+ // TQTextStream
+ TQTextStream stream (&in);
+ m_stepsize = in.size()/50;
+ m_instep = 0;
+ m_progress = 0;
+ int pos;
+ char ccol;
+ int irow, icol;
+ TQString tabctr ; // Tab control
+ TQString mystr, typestr, cellnostr, tabnostr;
+ TQStringList typefacetab;
+
+ // TQStringList rclist;
+ t_rc my_rc;
+
+
+
+ /**************************************************************************
+ * Read header *
+ **************************************************************************/
+ if (! readHeader (stream)) return KoFilter::StupidError;
+
+
+ while (!stream.atEnd ())
+ {
+ // Read one line
+ mystr = nextLine( stream );
+
+ kdDebug()<<"INPUT : "<<mystr<<endl;
+
+
+ /**********************************************************************
+ * Looking for the colormap *
+ **********************************************************************/
+ if (mystr.startsWith ("COLORMAP") )
+ {
+ readColormap (stream, mcol);
+ }
+
+ /**********************************************************************
+ * Looking for the typeface table *
+ **********************************************************************/
+ else if (mystr.startsWith ("TYPEFACE TABLE") )
+ {
+ readTypefaceTable (stream, typefacetab);
+ }
+
+ /**********************************************************************
+ * Looking for some View-Informations *
+ **********************************************************************/
+ else if (mystr.startsWith ("View Start, Name:") )
+ {
+ readView (stream, mystr, my_rc);
+ }
+
+
+ /**********************************************************************
+ * Detect ( at the first place of the Linie *
+ **********************************************************************/
+ else if (mystr[0] == '(')
+ {
+ int fg=-1; // fg = foregound
+
+ // Delete '('
+ mystr.remove (0, 1);
+
+ int alllength;
+ TQString mystrn;
+
+ // Remember length of the string
+ alllength = mystr.length ();
+ if (alllength >= 80-1)
+ {
+ kdDebug()<< " Line >= 80 chars \n";
+ int ok = true;
+ do
+ {
+ pos = in.at ();
+ mystrn = nextLine( stream );
+ if (mystrn[0] == ' ')
+ {
+ mystrn.remove (0, 1);
+ mystr += mystrn;
+ }
+ else
+ {
+ in.at (pos);
+ ok = false;
+ }
+ }
+ while (ok == true);
+
+ }
+
+
+ // Search for ')'
+ pos = mystr.find (')');
+ typestr = mystr.left (pos);
+
+
+ // Delete typeformat infos incl. Space
+ mystr.remove (0, pos+1);
+ // alllength = alllength - pos - 1;
+
+ // Search for ':'
+ pos = mystr.find (':');
+
+ // Copy cellnumber informations
+ cellnostr = mystr.left (pos);
+
+ // Delete cellnumber informations
+ mystr.remove (0, pos+1);
+ // alllength = alllength - pos - 1;
+
+
+ // Split Table and Cell Number
+ pos = cellnostr.find ('!');
+
+ // Copy tabnumber informations
+ tabnostr = cellnostr.left (pos);
+
+ // Delete cellnumber informations
+ cellnostr.remove (0, pos+1);
+
+ int len = cellnostr.length ();
+ char tmp[300], tmp1[300];
+ int leni;
+
+
+
+ pos = cellnostr.find (TQRegExp ("[0-9]"));
+ kdDebug()<<" findpos :"<<pos<<endl;
+
+
+
+ TQString rowstr;
+ bool ok;
+ int bla;
+ rowstr = cellnostr.mid (pos, cellnostr.length()-pos);
+ irow = rowstr.toInt(&ok);
+
+ kdDebug()<<" findpos :"<< rowstr<<" "<<irow<<endl;
+ sscanf (cellnostr.latin1(), "%299s%d",tmp, &bla);
+ sprintf (tmp1, "%d", irow);
+ leni = strlen (tmp1);
+ TQString cellcolstr;
+ cellcolstr = cellnostr;
+ cellcolstr.remove (cellcolstr.length()-leni, leni);
+
+ kdDebug()<<" Info: length :"<<len<<" cellnostr :"<<cellnostr<<" tmp :"<<tmp<<" irow :"<<irow<<" cellcolstr :"<<cellcolstr<<endl;
+
+ // Transformat ascii column to int column
+ icol = translateColumnNumber (cellcolstr);
+
+
+ // sscanf (cellnostr.latin1(), "%c%d",&ccol, &irow);
+
+ // Transformat ascii column to int column
+ // icol = ccol - 64;
+
+ // Remove first whitespace
+ mystr.remove (0, 1);
+ tabnostr.remove (0, 1);
+
+
+ // Replace part for this characters: <, >, &
+ mystr.replace (TQRegExp ("&"), "&amp;");
+ mystr.replace (TQRegExp ("<"), "&lt;");
+ mystr.replace (TQRegExp (">"), "&gt;");
+
+
+ // Replace part for Applix Characters
+ int foundSpecialCharakter;
+ TQChar newchar;
+
+ do
+ {
+ // initialize
+ foundSpecialCharakter = false;
+
+ pos = mystr.find ("^");
+
+ // is there a special character ?
+ if (pos > -1 )
+ {
+ // i have found a special character !
+ foundSpecialCharakter = true;
+
+ // translate the applix special character
+ newchar = specCharfind (mystr[pos+1], mystr[pos+2]);
+
+ // replace the character
+ mystr.replace (pos, 3, newchar);
+ }
+
+ }
+ while (foundSpecialCharakter == true);
+
+
+ // examine the typestring
+ // splitt typestring in 3 parts by an |
+ TQString typeFormStr;
+ TQString typeCharStr;
+ TQString typeCellStr;
+
+ int pos1 = typestr.find ("|");
+ int pos2 = typestr.findRev ("|");
+
+
+ typeFormStr = typestr.left (pos1);
+
+ typeCharStr = typestr.mid (pos1+1, pos2 - pos1 - 1);
+
+ typeCellStr = typestr.right (typestr.length() - pos2 - 1);
+
+ // Is it a new table
+ if (tabctr != tabnostr)
+ {
+ // is it not the first table
+ if (!(tabctr.isNull())) str += " </table>\n";
+
+ str += " <table columnnumber=\"0\" borders=\"0\" hide=\"0\" hidezero=\"0\" firstletterupper=\"0\" grid=\"1\" formular=\"0\" lcmode=\"0\" name=\"";
+ str += tabnostr;
+ str += "\" >\n";
+
+ tabctr = tabnostr;
+
+ // Searching for the rowcol part and adding to the hole string
+ pos = my_rc.tabname.findIndex (tabnostr);
+ if (pos > -1) str += my_rc.rc[pos];
+ }
+
+ kdDebug()<<" Data : Text :"<<mystr<<" tab :"<<tabnostr<<" "<< cellnostr <<" " <<ccol<<" " << irow<<" "<< typeFormStr<<" " <<typeCharStr<<" " <<typeCellStr<<endl;
+
+
+ /********************************************************************
+ * examine charakter format String, splitt it up in basic parts *
+ ********************************************************************/
+ TQStringList typeCharList;
+ int bold=0, italic=0, underline=0, nn=0, fontsize=12, fontnr=-1;
+
+ typeCharList = TQStringList::split (',', typeCharStr);
+
+ for (TQStringList::Iterator it = typeCharList.begin();
+ it != typeCharList.end(); ++it )
+ {
+ // Output
+ kdDebug()<<" Char ("<<nn<<" ) >"<<*it<<"< "<<endl;
+ nn++;
+
+ if ((*it) == "B")
+ {
+ kdDebug()<<" bold\n";
+ bold = 1;
+ }
+ else if ((*it) == "I")
+ {
+
+ kdDebug()<<" = italic\n";
+ italic = 1;
+ }
+ else if ((*it) == "U")
+ {
+ kdDebug()<<" = underline\n";
+ underline = 1;
+ }
+ else if ((*it).startsWith("FG") )
+ {
+ sscanf ((*it).latin1(), "FG%d", &fg);
+ kdDebug()<<" = Colornr "<< fg<<endl;
+ }
+ else if ((*it).startsWith("TF") )
+ {
+ sscanf ((*it).latin1(), "TF%d", &fontnr);
+ kdDebug()<<" = Font :"<<fontnr<<" "<<typefacetab[fontnr]<<endl;
+ }
+ else if ((*it).startsWith("P") )
+ {
+ sscanf ((*it).latin1(), "P%d", &fontsize);
+ kdDebug()<<" = Fontsize "<<fontsize<<endl;
+ }
+ else
+ {
+
+ kdDebug()<<" = ???\n";
+ }
+ }
+ kdDebug()<<""<<endl;
+
+
+
+ /********************************************************************
+ * examine pos format String, splitt it up in basic parts *
+ ********************************************************************/
+ TQStringList typeFormList;
+ int align = 0, valign=0;
+
+ typeFormList = TQStringList::split (',', typeFormStr);
+ nn=0;
+ for (TQStringList::Iterator it = typeFormList.begin(); it != typeFormList.end(); ++it )
+ {
+ // Output
+ //kdDebug()<< " Type (%2d) >%s< ",
+ // nn, (*it).latin1() );
+ nn++;
+ // Grep horizontal alignment
+ if ( (*it) == "1")
+ {
+ kdDebug()<< " = left align\n";
+ align = 1; // left
+ }
+ else if ( (*it) == "2")
+ {
+ kdDebug()<< " = right align\n";
+ align = 3; // right
+ }
+ else if ( (*it) == "3")
+ {
+ kdDebug()<< " = center align\n";
+ align = 2; // center
+ }
+
+ // Grep verticale alignment
+ else if ( (*it) == "VT")
+ {
+ kdDebug()<<" = top valign\n";
+ valign = 1; // top
+ }
+ else if ( (*it) == "VC")
+ {
+ kdDebug()<<" = center valign\n";
+ valign = 0; // center - default (2)
+ }
+ else if ( (*it) == "VB")
+ {
+ kdDebug()<<" = bottom valign\n";
+ valign = 3; // bottom
+ }
+ else
+ {
+ kdDebug()<<" = ???\n";
+ }
+ }
+
+
+ /********************************************************************
+ * examine cell format String, splitt it up in basic parts *
+ ********************************************************************/
+ TQStringList typeCellList;
+ int topPenWidth=0, bottomPenWidth=0, leftPenWidth = 0, rightPenWidth = 0, fg_bg=-1;
+ int topPenStyle=0, bottomPenStyle=0, leftPenStyle = 0, rightPenStyle = 0;
+ int brushstyle=0, brushcolor=1;
+ int topbrushstyle=0, topbrushcolor=1, topfg_bg=1;
+ int leftbrushstyle=0, leftbrushcolor=1, leftfg_bg=1;
+ int rightbrushstyle=0, rightbrushcolor=1, rightfg_bg=1;
+ int bottombrushstyle=0, bottombrushcolor=1, bottomfg_bg=1;
+
+ typeCellList = TQStringList::split (',', typeCellStr);
+ nn=0;
+ for ( TQStringList::Iterator it = typeCellList.begin(); it != typeCellList.end(); ++it )
+ {
+ // Output
+ printf (" Cell (%2d) >%s< ",
+ nn, (*it).latin1() );
+ nn++;
+
+ if ((*it)[0] == 'T')
+ {
+ kdDebug()<<" = top \n";
+ transPenFormat ((*it), &topPenWidth, &topPenStyle);
+
+ if ((*it).length() > 2)
+ {
+ (*it).remove (0, 2);
+ filterSHFGBG ((*it), &topbrushstyle, &topbrushcolor, &topfg_bg);
+ }
+
+ }
+
+ else if ( (*it)[0] == 'B')
+ {
+ kdDebug()<<" = bottom \n";
+ transPenFormat ((*it), &bottomPenWidth, &bottomPenStyle);
+
+ if ((*it).length() > 2)
+ {
+ (*it).remove (0, 2);
+ filterSHFGBG ((*it), &bottombrushstyle, &bottombrushcolor, &bottomfg_bg);
+ }
+ }
+
+ else if ( (*it)[0] == 'L')
+ {
+ kdDebug()<<" = left \n";
+ transPenFormat ((*it), &leftPenWidth, &leftPenStyle);
+
+ if ((*it).length() > 2)
+ {
+ (*it).remove (0, 2);
+ filterSHFGBG ((*it), &leftbrushstyle, &leftbrushcolor, &leftfg_bg);
+ }
+ }
+
+ else if ( (*it)[0] == 'R')
+ {
+ kdDebug()<<" = right \n";
+ transPenFormat ((*it), &rightPenWidth, &rightPenStyle);
+
+ if ((*it).length() > 2)
+ {
+ (*it).remove (0, 2);
+ filterSHFGBG ((*it), &rightbrushstyle, &rightbrushcolor, &rightfg_bg);
+ }
+ }
+
+ else if ( ((*it).startsWith ("SH")) || ((*it).startsWith ("FG")) ||
+ ((*it).startsWith ("BG")) )
+ {
+ kdDebug()<<" = \n";
+ filterSHFGBG ((*it), &brushstyle, &fg_bg, &brushcolor);
+ }
+
+ else
+ {
+ kdDebug()<<" = ???\n";
+ }
+
+ }
+
+
+
+
+
+ TQString col;
+
+ // create kspread fileformat output
+ str += " <cell row=\"" + TQString::number (irow) + "\"";
+ str += " column=\"" + TQString::number (icol) + "\">\n";
+ if (bold == 1 || italic == 1 || underline == 1 ||
+ align != 0 || valign != 0 ||
+ topPenStyle != 0 || bottomPenStyle != 0 ||
+ leftPenStyle != 0 || rightPenStyle != 0 || fg !=-1 || fg_bg != -1 ||
+ fontsize != 12 || brushstyle != 0 || fontnr != -1)
+ {
+ str += " <format";
+ if (brushstyle != 0)
+ {
+ str += " brushstyle=\"" + TQString::number(brushstyle) + "\" ";
+ str += " brushcolor=\"";
+ str += writeColor (mcol.at(brushcolor));
+ str += "\"";
+ }
+
+ if (align != 0) str += " align=\"" + TQString::number(align) + "\" ";
+ if (valign != 0) str += " alignY=\"" + TQString::number(valign) + "\" ";
+ if (fg_bg != -1)
+ {
+ str += " bgcolor=\"";
+ str += writeColor (mcol.at(fg_bg));
+ str += "\" ";
+ }
+ str += ">\n";
+
+ // Font color
+ if (fg != -1)
+ {
+ str += " <pen width=\"0\" style=\"1\" color=\"";
+ str += writeColor (mcol.at(fg));
+ str += "\" />\n";
+ }
+
+ // Left border
+ if (leftPenWidth > 0)
+ {
+ str += " <left-border>\n";
+ col = writeColor (mcol.at(leftfg_bg));
+ writePen (str, leftPenWidth, leftPenStyle, col);
+ str += " </left-border>\n";
+ }
+
+ // Right border
+ if (rightPenWidth > 0)
+ {
+ str += " <right-border>\n";
+ col = writeColor (mcol.at(rightfg_bg));
+ writePen (str, rightPenWidth, rightPenStyle, col);
+ str += " </right-border>\n";
+ }
+
+ // Bottom border
+ if (bottomPenWidth > 0)
+ {
+ str += " <bottom-border>\n";
+ col = writeColor (mcol.at(bottomfg_bg));
+ writePen (str, bottomPenWidth, bottomPenStyle, col);
+ str += " </bottom-border>\n";
+ }
+
+ // Top border
+ if (topPenWidth > 0)
+ {
+ str += " <top-border>\n";
+ col = writeColor (mcol.at(topfg_bg));
+ writePen (str, topPenWidth, topPenStyle, col);
+ str += " </top-border>\n";
+ }
+
+ // Font (size and family)
+ if ((fontsize != 12) || (fontnr != -1))
+ {
+ str += " <font ";
+ // Fontsize
+ if (fontsize != 12)
+ {
+ str += "size=\"";
+ str += TQString::number (fontsize);
+ str += "\" ";
+ }
+ // Fontfamily
+ if (fontnr != -1)
+ {
+ str += "family=\"";
+ str += typefacetab[fontnr].latin1();
+ str += "\" ";
+ }
+ str += "weight=\"0\"";
+
+ if (italic == 1) str += " italic=\"yes\"";
+ if (bold == 1) str += " bold=\"yes\"";
+ if (underline == 1) str += " underline=\"yes\"";
+
+ str +=" />\n";
+ }
+ str += " </format>\n";
+ }
+ str += " <text>" + mystr + "</text>\n";
+ str += " </cell>\n";
+ }
+
+ }
+ emit sigProgress(100);
+
+ str += " </table>\n";
+ str += " </map>\n";
+ str += "</spreadsheet>\n";
+// str += "</DOC>\n";
+
+ kdDebug ()<<"Text "<< str<<endl;
+
+ KoStoreDevice* out=m_chain->storageFile( "root", KoStore::Write );
+
+ if (!out)
+ {
+ kdError(38000/*30502*/) << "Unable to open output file!" << endl;
+ in.close ();
+ return KoFilter::StorageCreationError;
+ }
+
+ TQCString cstring = str.utf8();
+ out->writeBlock ( cstring, cstring.length() );
+
+ in.close ();
+ return KoFilter::OK;
+}
+
+
+
+
+/******************************************************************************
+ * function: specCharfind *
+ ******************************************************************************/
+TQChar
+APPLIXSPREADImport::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;
+}
+
+
+
+/******************************************************************************
+ * function: writePen *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::writePen (TQString &str, int penwidth, int penstyle, TQString framecolor)
+{
+ str += " <pen width=\"";
+
+ // width of the pen
+ str += TQString::number (penwidth);
+ str += "\" style=\"";
+
+ // style of the pen
+ str += TQString::number (penstyle);
+ str += "\" color=\"";
+
+ // color of the pen
+ str += framecolor;
+ str += "\" />\n";
+
+}
+
+
+
+/******************************************************************************
+ * function: writeColor *
+ ******************************************************************************/
+TQString
+APPLIXSPREADImport::writeColor (t_mycolor *mc)
+{
+ char rgb[20];
+
+// printf (" WriteColor: <%d>-<%d>-<%d> <%d>-<%d>-<%d>-<%d>\n",
+// mc->r, mc->g, mc->b,
+// mc->c, mc->m, mc->y, mc->k);
+
+ sprintf (rgb, "#%02X%02X%02X", mc->r, mc->g, mc->b);
+ TQString bla = rgb;
+
+
+ return bla;
+}
+
+
+
+
+/******************************************************************************
+ * function: readTypefaceTable *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::readTypefaceTable (TQTextStream &stream, TQStringList &typefacetab)
+{
+ int tftabCounter=0, ok;
+ TQString mystr;
+
+ // Read the colormap
+ kdDebug()<<"Reading typeface table: \n";
+
+ ok = true;
+ do
+ {
+ mystr = nextLine( stream );
+ if (mystr == "END TYPEFACE TABLE" ) ok = false;
+ else
+ {
+ //printf (" %2d: <%s>\n", tftabCounter, mystr.latin1());
+ typefacetab.append(mystr);
+ tftabCounter++;
+ }
+ }
+ while (ok == true );
+
+ kdDebug()<<"... done \n";
+}
+
+
+
+/******************************************************************************
+ * function: readColormap *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::readColormap (TQTextStream &stream, TQPtrList<t_mycolor> &mcol)
+{
+ int contcount, ok, pos;
+
+ TQString colstr, mystr;
+ kdDebug ()<<"Reading colormap: \n";
+
+ ok = true;
+
+ do
+ {
+
+ mystr = nextLine( stream );
+ mystr.stripWhiteSpace ();
+
+ if (mystr == "END COLORMAP") ok = false;
+ else
+ {
+ kdDebug()<<" -> "<< mystr<<endl;
+
+ // Count the number of whitespaces
+ contcount = mystr.contains (' ');
+ kdDebug()<< "contcount: "<< contcount<<endl;
+ contcount -= 5;
+
+ // Begin off interest
+ pos = mystr.find (" 0 ");
+
+ // get colorname
+ colstr = mystr.left (pos);
+ mystr.remove (0, pos+1);
+ mystr.stripWhiteSpace ();
+
+ t_mycolor *tmc = new t_mycolor;
+
+ // get sub colors
+ pos = sscanf (mystr.latin1(), "0 %d %d %d %d 0",
+ &tmc->c, &tmc->m, &tmc->y, &tmc->k);
+
+ printf (" - <%-20s> <%-15s> <%3d> <%3d> <%3d> <%3d> pos: %d\n",
+ mystr.latin1(),
+ colstr.latin1(),
+ tmc->c, tmc->m, tmc->y, tmc->k, pos);
+
+ // Color transformation cmyk -> rgb
+ tmc->r = 255 - (tmc->c + tmc->k);
+ if (tmc->r < 0) tmc->r = 0;
+
+ tmc->g = 255 - (tmc->m + tmc->k);
+ if (tmc->g < 0) tmc->g = 0;
+
+ tmc->b = 255 - (tmc->y + tmc->k);
+ if (tmc->b < 0) tmc->b = 0;
+
+ mcol.append (tmc);
+ }
+
+ }
+ while (ok == true );
+
+ kdDebug()<< "... done "<< mcol.count()<<endl;
+
+
+ t_mycolor *emp;
+ for (emp=mcol.first(); emp != 0; emp=mcol.next() )
+ {
+ printf (" c:%3d m:%3d y:%3d k:%3d r:%3d g:%3d b:%3d\n",
+ emp->c, emp->m, emp->y, emp->k, emp->r, emp->g, emp->b);
+ }
+}
+
+
+
+
+/******************************************************************************
+ * function: readColormap *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::readView (TQTextStream &stream, TQString instr, t_rc &rc)
+{
+ TQString rowcolstr;
+ TQString mystr, tabname;
+ int ok;
+
+ kdDebug()<<"Reading View\n";
+
+ tabname = instr;
+
+ tabname.remove (0, 19);
+ tabname.remove (tabname.length()-2, 2);
+ kdDebug()<< " - Table name: "<< tabname<<endl;
+
+ ok = true;
+ do
+ {
+ mystr = nextLine( stream );
+
+ kdDebug()<<" "<< mystr<<endl;
+ if (mystr.startsWith ("View End, Name:")) ok = false;
+ else
+ {
+ // COLUMN Widths
+ if (mystr.startsWith ("View Column Widths"))
+ {
+ kdDebug()<< " - Column Widths\n";
+ mystr.remove (0, 20);
+ kdDebug()<< " "<<mystr<<endl;
+
+ int colwidth, icolumn;
+ char ccolumn;
+
+ // loop
+ TQStringList ColumnList;
+ ColumnList = TQStringList::split (' ', mystr);
+
+ for ( TQStringList::Iterator it = ColumnList.begin(); it != ColumnList.end(); ++it )
+ {
+
+ sscanf ((*it).latin1(), "%c:%d", &ccolumn, &colwidth);
+ int len = (*it).length ();
+ int pos = (*it).find (":");
+ (*it).remove (pos, len-pos);
+
+ printf( " >%s<- -<%c><%d> \n", (*it).latin1(), ccolumn, colwidth);
+
+ // Transformat ascii column to int column
+ icolumn = translateColumnNumber (*it);
+
+ //icolumn = ccolumn - 64;
+ // Translate the column width right from applix to kspread
+ icolumn = icolumn * 5;
+
+
+ rowcolstr += " <column width=\"";
+ rowcolstr += TQString::number (colwidth);
+ rowcolstr += "\" column=\"";
+ rowcolstr += TQString::number (icolumn);
+ rowcolstr += "\" >\n";
+ rowcolstr += " <format/>\n";
+ rowcolstr += " </column>\n";
+ }
+ }
+
+ // ROW Heights
+ else if (mystr.startsWith ("View Row Heights"))
+ {
+ kdDebug()<< " - Row Heights\n";
+ mystr.remove (0, 17);
+ kdDebug()<<" "<< mystr<<endl;
+
+ int irow, rowheight;
+
+ // loop
+ TQStringList RowList;
+ RowList = TQStringList::split (' ', mystr);
+
+ for ( TQStringList::Iterator it = RowList.begin(); it != RowList.end(); ++it )
+ {
+ sscanf ((*it).latin1(), " %d:%d",
+ &irow, &rowheight);
+ printf (" row: %2d height: %2d\n", irow, rowheight);
+ if (rowheight > 32768) rowheight -= 32768;
+ printf (" height: %2d\n", rowheight);
+ rowcolstr += " <row row=\"";
+ rowcolstr += TQString::number (irow);
+ rowcolstr += "\" height=\"";
+ rowcolstr += TQString::number (rowheight);
+ rowcolstr += "\" >\n";
+ rowcolstr += " <format/>\n";
+ rowcolstr += " </row>\n";
+ }
+
+
+ }
+ } // else != END COLORMAP
+ }
+ while (ok == true );
+
+ // tabname append to my list
+ // tabname append to my list
+ rc.tabname.append (tabname);
+ rc.rc.append (rowcolstr);
+
+ printf ("%s %s\n", tabname.latin1(),
+ rowcolstr.latin1());
+
+ printf ("...done \n\n");
+}
+
+
+
+
+
+/******************************************************************************
+ * function: filterSHFGBG *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::filterSHFGBG (TQString it, int *style, int *bgcolor,
+ int *fgcolor)
+{
+ TQString tmpstr;
+ int pos;
+ int m2=0, m3=0;
+
+ // filter SH = Brushstyle Background
+ pos = it.find ("SH");
+ if (pos > -1)
+ {
+ tmpstr = it;
+ if (pos > 0) tmpstr.remove(0, pos);
+ pos = sscanf (tmpstr.latin1(), "SH%d",
+ style);
+
+ printf ("style: %d(%d) ",
+ *style, pos);
+ }
+
+
+ // filter FG = FGCOLOR
+ pos = it.find ("FG");
+ if (pos > -1)
+ {
+ tmpstr = it;
+ if (pos > 0) tmpstr.remove(0, pos);
+ pos = sscanf (tmpstr.latin1(), "FG%d",
+ fgcolor);
+ printf ("fg: %d(%d) ",
+ *fgcolor, pos);
+ m2=1;
+ }
+
+
+ // filter BG = BGCOLOR
+ pos = it.find ("BG");
+ if (pos > -1)
+ {
+ tmpstr = it;
+ if (pos > 0) tmpstr.remove(0, pos);
+ pos = sscanf (tmpstr.latin1(), "BG%d",
+ bgcolor);
+ printf ("bgcolor: %d(%d) ",
+ *bgcolor, pos);
+ m3=1;
+ }
+
+
+ printf ("\n");
+
+
+ // corrent the bgcolor to the fgcolor if the background is plain
+ if ((*style == 8) && (m2 == 1) && (m3 == 0))
+ {
+ *bgcolor = *fgcolor;
+ }
+
+
+ // Translate brushstyle to kspread brushstyle
+ if (*style != 0)
+ {
+ if (*style == 1) *style = 0;
+ else if (*style == 2) *style = 7;
+ else if (*style == 3) *style = 0;
+ else if (*style == 4) *style = 4;
+ else if (*style == 5) *style = 3;
+ else if (*style == 6) *style = 2;
+ else if (*style == 7) *style = 0;
+ else if (*style == 8) *style = 0;
+ else if (*style == 9) *style = 10;
+ else if (*style == 10) *style = 9;
+ else if (*style == 11) *style = 11;
+ else if (*style == 12) *style = 12;
+ else if (*style == 13) *style = 13;
+ else if (*style == 14) *style = 14;
+ else if (*style == 15) *style = 0;
+ else if (*style == 16) *style = 0;
+ else if (*style == 17) *style = 0;
+ else if (*style == 18) *style = 0;
+ else if (*style == 19) *style = 0;
+ }
+}
+
+
+
+/******************************************************************************
+ * function: filterSHFGBG *
+ ******************************************************************************/
+void
+APPLIXSPREADImport::transPenFormat (TQString it, int *PenWidth, int *PenStyle)
+{
+
+ if ( it[1] == '1' )
+ {
+ *PenWidth = 1;
+ *PenStyle = 1;
+ }
+
+ else if ( it[1] == '2' )
+ {
+ *PenWidth = 2;
+ *PenStyle = 1;
+ }
+
+ else if ( it[1] == '3' )
+ {
+ *PenWidth = 3;
+ *PenStyle = 1;
+ }
+
+ else if ( it[1] == '4' )
+ {
+ *PenWidth = 1;
+ *PenStyle = 3;
+ }
+
+ else if ( it[1] == '5' )
+ {
+ *PenWidth = 5;
+ *PenStyle = 1;
+ }
+
+ printf ("frame (w:%d - s:%d) \n", *PenWidth, *PenStyle);
+}
+
+
+
+
+/******************************************************************************
+ * function: readHeader *
+ ******************************************************************************/
+int
+APPLIXSPREADImport::readHeader (TQTextStream &stream)
+{
+ TQString mystr;
+ int vers[3] = { 0, 0, 0 };
+ int rueck;
+
+
+ // Read Headline
+ mystr = nextLine (stream);
+ rueck = sscanf (mystr.latin1(),
+ "*BEGIN SPREADSHEETS 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 applixspreadsheet file\n");
+ printf ("Headerline: <%s>\n", mystr.latin1());
+
+ TQMessageBox::critical (0L, "Applix spreadsheet header problem",
+ TQString ("The Applix Spreadsheet header is not correct. "
+ "May be it is not an applix spreadsheet file! <BR>"
+ "This is the header line I did read:<BR><B>%1</B>").arg(mystr.latin1()),
+ "Okay");
+
+
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+
+
+/******************************************************************************
+ * function: translateRowNumber *
+ ******************************************************************************/
+int
+APPLIXSPREADImport::translateColumnNumber (TQString colstr)
+{
+ int icol=0;
+ int p, x, len;
+
+
+ len = colstr.length ();
+ p = len-1;
+ x = 1;
+
+ printf ("HI 0 len:%d\n", len );
+ while ((p >= 0))
+ {
+ printf ("HI 1 x:%d p:%d char:<%c>\n", x, p, colstr[p].latin1());
+ // Upper chars
+ if ((colstr[p] >= 'A') && (colstr[p] <= 'Z'))
+ {
+ kdDebug ()<<" UPPER\n";
+ icol = icol + ((int)pow ((double)x, 26) * (colstr[p].latin1() - 'A' + 1) );
+ x++;
+ }
+ // lower chars
+ else if ((colstr[p] >= 'a') && (colstr[p] <= 'z'))
+ {
+ kdDebug()<<" lower\n";
+ icol = icol + ((int)pow ((double)x, 26) * (colstr[p].latin1() - 'a' + 1) );
+ x++;
+ }
+ p--;
+ kdDebug ()<< "HI 2\n";
+
+ }
+
+ printf ("translateColumnNumber : <%s> -> %d\n", colstr.latin1(), icol);
+ return icol;
+}
+
+#include <applixspreadimport.moc>