--Boundary-00=_wL/KEmvdMInlUAZ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi, I've created the attached patch, which at least doesn't break anything visi= ble=20 to me: =2D it uses UString::from(double) from the cvs version below =2D I also tried to come up with replacements for the other usages of kjs_d= toa.=20 I am not sure it is correct though. The conversion code didn't exist at all= =20 before kjs_dtoa was introduced.=20 =2D kjs_strtod was replace by strtod Maybe someone with more insight into kjs can have a look? Thanks, eva Am Montag, 27. M=E4rz 2006 18:01 schrieb Harri Porten: > On Mon, 27 Mar 2006, Yan Seiner wrote: > > Thanks for the pointer.... I am a complete newcomer to KDE / kfm > > development.... > > > > Where and how do I find earlier versions of KJS? I am assuming there is > > a CVS/SVN/??? archive somewhere, along with a versioning guide? And how > > far back do I need to go? > > Yes. You'll find instructions here: > > http://developer.kde.org/source/anonsvn.html > > This one still uses the old-style conversion: > > =20 > http://websvn.kde.org/trunk/kdelibs/kjs/ustring.cpp?rev=3D199142&view=3Dm= arkup > > Harri. > _______________________________________________ > konq-e mailing list > konq-e@kde.org > https://mail.kde.org/mailman/listinfo/konq-e =2D-=20 Eva Brucherseifer General Manager basysKom GmbH Robert-Bosch-Str. 7 | 64293 Darmstadt | Germany Tel: +49 6151 3969-961 | Fax: -736 | Mobile: +49 170 5533642 eva.brucherseifer@basyskom.de | www.basyskom.de --Boundary-00=_wL/KEmvdMInlUAZ Content-Type: text/x-diff; charset="iso-8859-1"; name="kjs_dtoa_arm.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="kjs_dtoa_arm.patch" --- dtoa.cpp 2006-01-30 16:41:59.000000000 +0100 +++ kjs.works/dtoa.cpp 2006-03-30 16:30:18.000000000 +0200 @@ -1,3 +1,4 @@ +#ifdef KONQ_EMBEDDED /**************************************************************** * * The author of this software is David M. Gay. @@ -3317,3 +3318,5 @@ #ifdef __cplusplus } #endif + +#endif \ No newline at end of file --- dtoa.h 2006-01-30 16:41:59.000000000 +0100 +++ kjs.works/dtoa.h 2006-03-30 16:30:18.000000000 +0200 @@ -23,9 +23,14 @@ #ifndef _KJS_DTOA_H_ #define _KJS_DTOA_H_ +#ifdef KONQ_EMBEDDED extern "C" double kjs_strtod(const char *s00, char **se); extern "C" char *kjs_dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve); extern "C" void kjs_freedtoa(char *s); +#else +#include "stdlib.h" +extern "C" double kjs_strtod(const char *s00, char **se) { strtod(s00,se); } +#endif #endif /* _KJS_DTOA_H */ --- number_object.cpp 2006-01-30 16:41:59.000000000 +0100 +++ kjs.works/number_object.cpp 2006-03-30 16:48:27.000000000 +0200 @@ -90,6 +90,7 @@ return true; } +#ifdef KONQ_EMBEDDED static UString integer_part_noexp(double d) { int decimalPoint; @@ -123,6 +124,7 @@ return str; } +#endif static UString char_sequence(char c, int count) { @@ -233,6 +235,14 @@ if (x >= 1e21) return String(s+UString::from(x)); +#ifndef KONQ_EMBEDDED + char buf[80]; + char prec[10]; + snprintf(prec,10, "%%.%ig",f); + snprintf(buf, 80, prec, x); + + return String(UString(buf)); +#else double n = floor(x*pow(10.0,f)); if (fabs(n/pow(10.0,f)-x) > fabs((n+1)/pow(10.0,f)-x)) n++; @@ -252,6 +262,7 @@ return String(s+m.substr(0,k-f)+"."+m.substr(k-f)); else return String(s+m.substr(0,k-f)); +#endif } case ToExponential: { double x = v.toNumber(exec); @@ -270,6 +281,12 @@ } } +#ifndef KONQ_EMBEDDED + char buf[80]; + char prec[10]; + snprintf(prec,10, "%%.%ie",f); + snprintf(buf, 80, prec, x); +#else int decimalAdjust = 0; if (!fractionDigits.isA(UndefinedType)) { double logx = floor(log10(x)); @@ -345,7 +362,7 @@ assert(i <= 80); kjs_freedtoa(result); - +#endif return String(UString(buf)); } case ToPrecision: @@ -371,6 +388,12 @@ return err; } +#ifndef KONQ_EMBEDDED + char buf[80]; + char prec[10]; + snprintf(prec,10, "%%.%ig",p); + snprintf(buf, 80, prec, x); +#else if (x != 0) { e = int(log10(x)); double n = floor(x/pow(10.0,e-p+1)); @@ -411,6 +434,7 @@ else { return String(s+"0."+char_sequence('0',-(e+1))+m); } +#endif } } --- ustring.cpp 2006-03-30 16:49:11.000000000 +0200 +++ kjs.works/ustring.cpp 2006-03-30 16:48:44.000000000 +0200 @@ -385,6 +383,7 @@ UString UString::from(double d) { +#ifndef KONQ_EMBEDDED char buf[80]; int decimalPoint; int sign; @@ -449,6 +448,31 @@ kjs_freedtoa(result); return UString(buf); +#else + kdDebug() << "UString::convert" << endl; + + char buf[80]; + + if (d == -0) + strcpy(buf,"0"); + else if (KJS::isNaN(d)) + strcpy(buf,"NaN"); + else if (KJS::isPosInf(d)) + strcpy(buf,"Infinity"); + else if (KJS::isNegInf(d)) + strcpy(buf,"-Infinity"); + else + sprintf(buf, "%.16g", d); // does the right thing + + // ECMA 3rd ed. 9.8.1 9 e: "with no leading zeros" + int buflen = strlen(buf); + if (buflen >= 4 && buf[buflen-4] == 'e' && buf[buflen-2] == '0') { + buf[buflen-2] = buf[buflen-1]; + buf[buflen-1] = 0; + } + + return UString(buf); +#endif } UString &UString::append(const UString &t) --Boundary-00=_wL/KEmvdMInlUAZ--