Title: [105490] trunk/Source/WebCore
Revision
105490
Author
[email protected]
Date
2012-01-20 00:47:22 -0800 (Fri, 20 Jan 2012)

Log Message

Change LocalizedNumber interface
https://bugs.webkit.org/show_bug.cgi?id=76613

Reviewed by Hajime Morita.

Change the functions of LocalizedNumber from:
  double parseLocalizedNumber(const String&);
  String formatLocalizedNumber(double, unsigned fractionDigits);
To:
  String convertToLocalizedNumber(const String&, usnigned fractionDigits);
  String convertFromLocalizedNumber(const String&);
in order that we can avoid conversion from/to a double value.

The fractionDigits argumetn of convertToLocalizedNumber() will be
removed in the future.  We need it because we'd like to recycle the old
functions to implement new functions for now and functions in
LocalizedNumber can't call functions in HTMLParserIdioms.cpp.

No new tests because the change doesn't make any behavior change.

* html/NumberInputType.cpp:
(WebCore::NumberInputType::visibleValue):
Use convertToLocalizedNumber.
(WebCore::NumberInputType::convertFromVisibleValue):
Use convertFromLocalizedNumber.
(WebCore::NumberInputType::isAcceptableValue): ditto.
* platform/text/LocalizedNumber.h:
Remove parseLocalizedNumber and formatLocalizedNumber, and
introduce convertToLocalizedNumber and convertFromLocalizedNumber.
* platform/text/LocalizedNumberICU.cpp:
(WebCore::parseLocalizedNumber): Make this static.
(WebCore::formatLocalizedNumber): Make this static.
(WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
(WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.
* platform/text/LocalizedNumberNone.cpp:
(WebCore::convertToLocalizedNumber):
Implement this as a function returning the input string.
(WebCore::convertFromLocalizedNumber): ditto.
* platform/text/mac/LocalizedNumberMac.mm:
(WebCore::parseLocalizedNumber): Make this static.
(WebCore::formatLocalizedNumber): Make this static.
(WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
(WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (105489 => 105490)


--- trunk/Source/WebCore/ChangeLog	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/ChangeLog	2012-01-20 08:47:22 UTC (rev 105490)
@@ -1,3 +1,49 @@
+2012-01-19  Kent Tamura  <[email protected]>
+
+        Change LocalizedNumber interface
+        https://bugs.webkit.org/show_bug.cgi?id=76613
+
+        Reviewed by Hajime Morita.
+
+        Change the functions of LocalizedNumber from:
+          double parseLocalizedNumber(const String&);
+          String formatLocalizedNumber(double, unsigned fractionDigits);
+        To:
+          String convertToLocalizedNumber(const String&, usnigned fractionDigits);
+          String convertFromLocalizedNumber(const String&);
+        in order that we can avoid conversion from/to a double value.
+
+        The fractionDigits argumetn of convertToLocalizedNumber() will be
+        removed in the future.  We need it because we'd like to recycle the old
+        functions to implement new functions for now and functions in
+        LocalizedNumber can't call functions in HTMLParserIdioms.cpp.
+
+        No new tests because the change doesn't make any behavior change.
+
+        * html/NumberInputType.cpp:
+        (WebCore::NumberInputType::visibleValue):
+        Use convertToLocalizedNumber.
+        (WebCore::NumberInputType::convertFromVisibleValue):
+        Use convertFromLocalizedNumber.
+        (WebCore::NumberInputType::isAcceptableValue): ditto.
+        * platform/text/LocalizedNumber.h:
+        Remove parseLocalizedNumber and formatLocalizedNumber, and
+        introduce convertToLocalizedNumber and convertFromLocalizedNumber.
+        * platform/text/LocalizedNumberICU.cpp:
+        (WebCore::parseLocalizedNumber): Make this static.
+        (WebCore::formatLocalizedNumber): Make this static.
+        (WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
+        (WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.
+        * platform/text/LocalizedNumberNone.cpp:
+        (WebCore::convertToLocalizedNumber):
+        Implement this as a function returning the input string.
+        (WebCore::convertFromLocalizedNumber): ditto.
+        * platform/text/mac/LocalizedNumberMac.mm:
+        (WebCore::parseLocalizedNumber): Make this static.
+        (WebCore::formatLocalizedNumber): Make this static.
+        (WebCore::convertToLocalizedNumber): Implement this with formatLocalizedNumber.
+        (WebCore::convertFromLocalizedNumber): Implement this with parseLocalizedNumber.
+
 2012-01-19  Pavel Feldman  <[email protected]>
 
         Web Inspector: problem with Ctrl - <arrows> shortcuts in Scripts panel

Modified: trunk/Source/WebCore/html/NumberInputType.cpp (105489 => 105490)


--- trunk/Source/WebCore/html/NumberInputType.cpp	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/html/NumberInputType.cpp	2012-01-20 08:47:22 UTC (rev 105490)
@@ -288,24 +288,24 @@
     String currentValue = element()->value();
     if (currentValue.isEmpty())
         return currentValue;
+    // FIXME: The following three lines should be removed when we
+    // remove the second argument of convertToLocalizedNumber().
     double doubleValue = numeric_limits<double>::quiet_NaN();
     unsigned decimalPlace;
     parseToDoubleForNumberTypeWithDecimalPlaces(currentValue, &doubleValue, &decimalPlace);
-    String localized = formatLocalizedNumber(doubleValue, decimalPlace);
-    return localized.isEmpty() ? currentValue : localized;
+    return convertToLocalizedNumber(currentValue, decimalPlace);
 }
 
 String NumberInputType::convertFromVisibleValue(const String& visibleValue) const
 {
     if (visibleValue.isEmpty())
         return visibleValue;
-    double parsedNumber = parseLocalizedNumber(visibleValue);
-    return isfinite(parsedNumber) ? serializeForNumberType(parsedNumber) : visibleValue;
+    return convertFromLocalizedNumber(visibleValue);
 }
 
 bool NumberInputType::isAcceptableValue(const String& proposedValue)
 {
-    return proposedValue.isEmpty() || isfinite(parseLocalizedNumber(proposedValue)) || parseToDoubleForNumberType(proposedValue, 0);
+    return proposedValue.isEmpty() || parseToDoubleForNumberType(convertFromLocalizedNumber(proposedValue), 0) || parseToDoubleForNumberType(proposedValue, 0);
 }
 
 String NumberInputType::sanitizeValue(const String& proposedValue) const

Modified: trunk/Source/WebCore/platform/text/LocalizedNumber.h (105489 => 105490)


--- trunk/Source/WebCore/platform/text/LocalizedNumber.h	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/platform/text/LocalizedNumber.h	2012-01-20 08:47:22 UTC (rev 105490)
@@ -35,21 +35,20 @@
 
 namespace WebCore {
 
-// Parses a string representation of a floating point number localized
-// for the browser's current locale. If the input string is not valid
-// or an implementation doesn't support localized numbers, this
-// function returns NaN. This function doesn't need to support
-// scientific notation, NaN, +Infinity and -Infinity, and doesn't need
-// to support the standard representations of ECMAScript and HTML5.
-double parseLocalizedNumber(const String&);
+// Converts the specified number string to another number string
+// localized for the browser's current locale. The input string must
+// conform to HTML floating-point numbers, and is not empty. The
+// fractionDigits argument is deprecated. The function implementaion
+// should not use the argument.
+String convertToLocalizedNumber(const String&, unsigned fractionDigits);
 
-// Serializes the specified floating point number for the browser's
-// current locale.  If an implementation doesn't support localized
-// numbers or the input value is NaN or Infinitiy, the function should
-// return an empty string.
-// fractionDigits is the maximum length of the fractional parts of the
-// resultant string.
-String formatLocalizedNumber(double, unsigned fractionDigits);
+// Converts the specified localized number string to a number string
+// in the HTML floating-point number format. The input string is
+// provided by a end user, and might not be a number string. It's ok
+// that the function returns a string which is not conforms to the
+// HTML floating-point number format, callers of this function are
+// responsible to check the format of the resultant string.
+String convertFromLocalizedNumber(const String&);
 
 } // namespace WebCore
 

Modified: trunk/Source/WebCore/platform/text/LocalizedNumberICU.cpp (105489 => 105490)


--- trunk/Source/WebCore/platform/text/LocalizedNumberICU.cpp	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/platform/text/LocalizedNumberICU.cpp	2012-01-20 08:47:22 UTC (rev 105490)
@@ -37,6 +37,7 @@
 #include <wtf/MainThread.h>
 #include <wtf/MathExtras.h>
 #include <wtf/PassOwnPtr.h>
+#include <wtf/dtoa.h>
 
 using namespace icu;
 using namespace std;
@@ -76,7 +77,7 @@
     return formatter;
 }
 
-double parseLocalizedNumber(const String& numberString)
+static double parseLocalizedNumber(const String& numberString)
 {
     if (numberString.isEmpty())
         return numeric_limits<double>::quiet_NaN();
@@ -94,7 +95,7 @@
     return U_SUCCESS(status) ? numericResult : numeric_limits<double>::quiet_NaN();
 }
 
-String formatLocalizedNumber(double number, unsigned fractionDigits)
+static String formatLocalizedNumber(double number, unsigned fractionDigits)
 {
     NumberFormat* formatter = numberFormatterForDisplay();
     if (!formatter)
@@ -105,4 +106,30 @@
     return String(result.getBuffer(), result.length());
 }
 
+String convertToLocalizedNumber(const String& canonicalNumberString, unsigned fractionDigits)
+{
+    // FIXME: We should not do parse-then-format. It makes some
+    // problems such as removing leading zeros, changing trailing
+    // digits to zeros.
+    // FIXME: We should not use the fractionDigits argument.
+
+    double doubleValue = canonicalNumberString.toDouble();
+    // The input string must be valid.
+    return formatLocalizedNumber(doubleValue, fractionDigits);
+
+}
+
+String convertFromLocalizedNumber(const String& localizedNumberString)
+{
+    // FIXME: We should not do parse-then-format. It makes some
+    // problems such as removing leading zeros, changing trailing
+    // digits to zeros.
+
+    double doubleValue = parseLocalizedNumber(localizedNumberString);
+    if (!isfinite(doubleValue))
+        return localizedNumberString;
+    NumberToStringBuffer buffer;
+    return String(numberToString(doubleValue, buffer));
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/text/LocalizedNumberNone.cpp (105489 => 105490)


--- trunk/Source/WebCore/platform/text/LocalizedNumberNone.cpp	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/platform/text/LocalizedNumberNone.cpp	2012-01-20 08:47:22 UTC (rev 105490)
@@ -37,14 +37,14 @@
 
 namespace WebCore {
 
-double parseLocalizedNumber(const String&)
+String convertToLocalizedNumber(const String& canonicalNumberString, unsigned)
 {
-    return numeric_limits<double>::quiet_NaN();
+    return canonicalNumberString;
 }
 
-String formatLocalizedNumber(double, unsigned)
+String convertFromLocalizedNumber(const String& localizedNumberString)
 {
-    return String();
+    return localizedNumberString;
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/text/mac/LocalizedNumberMac.mm (105489 => 105490)


--- trunk/Source/WebCore/platform/text/mac/LocalizedNumberMac.mm	2012-01-20 08:42:30 UTC (rev 105489)
+++ trunk/Source/WebCore/platform/text/mac/LocalizedNumberMac.mm	2012-01-20 08:47:22 UTC (rev 105490)
@@ -33,7 +33,9 @@
 
 #import <Foundation/NSNumberFormatter.h>
 #import <limits>
+#import <wtf/dtoa.h>
 #import <wtf/MainThread.h>
+#import <wtf/MathExtras.h>
 #import <wtf/RetainPtr.h>
 #import <wtf/text/CString.h>
 
@@ -70,7 +72,7 @@
     return formatter;
 }
 
-double parseLocalizedNumber(const String& numberString)
+static double parseLocalizedNumber(const String& numberString)
 {
     if (numberString.isEmpty())
         return numeric_limits<double>::quiet_NaN();
@@ -80,7 +82,7 @@
     return [number doubleValue];
 }
 
-String formatLocalizedNumber(double inputNumber, unsigned fractionDigits)
+static String formatLocalizedNumber(double inputNumber, unsigned fractionDigits)
 {
     RetainPtr<NSNumber> number(AdoptNS, [[NSNumber alloc] initWithDouble:inputNumber]);
     RetainPtr<NSNumberFormatter> formatter = numberFormatterForDisplay();
@@ -88,5 +90,31 @@
     return String([formatter.get() stringFromNumber:number.get()]);
 }
 
+String convertToLocalizedNumber(const String& canonicalNumberString, unsigned fractionDigits)
+{
+    // FIXME: We should not do parse-then-format. It makes some
+    // problems such as removing leading zeros, changing trailing
+    // digits to zeros.
+    // FIXME: We should not use the fractionDigits argument.
+
+    double doubleValue = canonicalNumberString.toDouble();
+    // The input string must be valid.
+    return formatLocalizedNumber(doubleValue, fractionDigits);
+
+}
+
+String convertFromLocalizedNumber(const String& localizedNumberString)
+{
+    // FIXME: We should not do parse-then-format. It makes some
+    // problems such as removing leading zeros, changing trailing
+    // digits to zeros.
+
+    double doubleValue = parseLocalizedNumber(localizedNumberString);
+    if (!isfinite(doubleValue))
+        return localizedNumberString;
+    NumberToStringBuffer buffer;
+    return String(numberToString(doubleValue, buffer));
+}
+
 } // namespace WebCore
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to