[kaffe] CVS kaffe (guilhem): java.text fixes and small improvements.

Kaffe CVS cvs-commits at kaffe.org
Sun Jan 11 09:52:02 PST 2004


PatchSet 4316 
Date: 2004/01/11 17:48:57
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
java.text fixes and small improvements.

Members: 
	ChangeLog:1.1903->1.1904 
	libraries/javalib/gnu/java/locale/LocaleInformation_en.java:1.1->1.2 
	libraries/javalib/gnu/java/locale/LocaleInformation_nl.java:1.1->1.2 
	libraries/javalib/java/text/DateFormatSymbols.java:1.10->1.11 
	libraries/javalib/java/text/DecimalFormat.java:1.23->1.24 
	libraries/javalib/java/text/FormatCharacterIterator.java:1.4->1.5 
	libraries/javalib/java/text/MessageFormat.java:1.20->1.21 
	libraries/javalib/java/text/SimpleDateFormat.java:1.28->1.29 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1903 kaffe/ChangeLog:1.1904
--- kaffe/ChangeLog:1.1903	Sat Jan 10 23:34:27 2004
+++ kaffe/ChangeLog	Sun Jan 11 17:48:57 2004
@@ -1,3 +1,28 @@
+2004-01-11  Guilhem Lavaux <guilhem at kaffe.org>
+
+	* libraries/javalib/java/text/FormatCharacterIterator.java
+	(addAttributes): Added a new helper function.
+	(debug, dumpTable): Added debug functions.
+
+	* libraries/javalib/java/text/MessageFormat.java
+	(format): Changed ignore to fp as the parameter is not ignored.
+	(formatInternal): Likewise. Fixed attributed string output. Use the
+	new helper function 'addAttributes'.
+
+	* libraries/javalib/java/text/SimpleDateFormat.java
+	(standardChars): Added a new non documented date symbol (checked
+	against JDK 1.4).
+	(formatToCharacterIterator): Fixed error reporting.
+	(formatWithAttribute): Report the pattern character in the exception
+	message.
+
+	* libraries/javalib/java/text/DateFormatSymbols.java: Fixed copyright
+	notice.
+
+	* libraries/javalib/gnu/java/locale/LocaleInformation_en.java,
+	libraries/javalib/gnu/java/locales/LocaleInformation_nl.java: Updated
+	date symbols.
+	
 2004-01-11  Dalibor Topic <robilad at kaffe.org>
 
 	Resynced with Tritonus.org.
Index: kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_en.java
diff -u kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_en.java:1.1 kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_en.java:1.2
--- kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_en.java:1.1	Sat Aug 16 11:03:46 2003
+++ kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_en.java	Sun Jan 11 17:48:59 2004
@@ -161,7 +161,7 @@
     { "shortWeekdays", shortWeekdays },
     { "ampms", ampms },
     { "eras", eras },
-    { "localPatternChars", "GyMdkHmsSEDFwWahKz" },
+    { "localPatternChars", "GyMdkHmsSEDFwWahKzZ" },
     { "zoneStrings", zoneStrings },
 
     { "shortDateFormat", "M/d/yy" },         // Java's Y2K bug.
Index: kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_nl.java
diff -u kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_nl.java:1.1 kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_nl.java:1.2
--- kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_nl.java:1.1	Sat Aug 16 11:03:46 2003
+++ kaffe/libraries/javalib/gnu/java/locale/LocaleInformation_nl.java	Sun Jan 11 17:48:59 2004
@@ -126,10 +126,10 @@
   * month (d), hour from 1-12 (h), hour 0-23 (H), minute (m), second (s),
   * millisecond (S), date of week (E), date of year (D),
   * day of week in month (F), week in year (w), week in month (W), am/pm (a),
-  * hour from 1-24 (k), hour from 0-11 (K), time zone (z).
+  * hour from 1-24 (k), hour from 0-11 (K), time zone (z), RFC822 time zone (Z).
   * Why would you use others?
   */
-private static final String localPatternChars = "GyMdhHmsSEDFwWakKz"; // Not a mistake!
+private static final String localPatternChars = "GyMdhHmsSEDFwWakKzZ"; // Not a mistake!
 
 /**
   * This is the DateFormat.SHORT date format
Index: kaffe/libraries/javalib/java/text/DateFormatSymbols.java
diff -u kaffe/libraries/javalib/java/text/DateFormatSymbols.java:1.10 kaffe/libraries/javalib/java/text/DateFormatSymbols.java:1.11
--- kaffe/libraries/javalib/java/text/DateFormatSymbols.java:1.10	Wed Oct 22 10:34:59 2003
+++ kaffe/libraries/javalib/java/text/DateFormatSymbols.java	Sun Jan 11 17:48:59 2004
@@ -1,4 +1,4 @@
-/* ChoiceFormat.java -- Format over a range of numbers
+/* DateFormatSymbols.java -- Format over a range of numbers
    Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
Index: kaffe/libraries/javalib/java/text/DecimalFormat.java
diff -u kaffe/libraries/javalib/java/text/DecimalFormat.java:1.23 kaffe/libraries/javalib/java/text/DecimalFormat.java:1.24
--- kaffe/libraries/javalib/java/text/DecimalFormat.java:1.23	Sat Jan  3 03:42:27 2004
+++ kaffe/libraries/javalib/java/text/DecimalFormat.java	Sun Jan 11 17:48:59 2004
@@ -411,6 +411,17 @@
 	    && useExponentialNotation == dup.useExponentialNotation);
   }
 
+
+  /**
+   * This method is a helper function for formatters. Given a set of ranges
+   * and attributes it adds exactly one attribute for the range of characters
+   * comprised between the last entry in 'ranges' and the specified new range.
+   *
+   * @param ranges Vector containing a list of previously entered ranges for attributes.
+   * @param attributes Vector containing a list of previously entered attributes
+   * @param new_range A new range to insert in the list.
+   * @param new_attribute A new attribute to insert in the list.
+   */  
   private final void addAttribute(Vector ranges, Vector attributes,
 				  int new_range, Format.Field new_attribute)
   {
Index: kaffe/libraries/javalib/java/text/FormatCharacterIterator.java
diff -u kaffe/libraries/javalib/java/text/FormatCharacterIterator.java:1.4 kaffe/libraries/javalib/java/text/FormatCharacterIterator.java:1.5
--- kaffe/libraries/javalib/java/text/FormatCharacterIterator.java:1.4	Thu Dec  4 03:27:49 2003
+++ kaffe/libraries/javalib/java/text/FormatCharacterIterator.java	Sun Jan 11 17:48:59 2004
@@ -37,12 +37,13 @@
 exception statement from your version. */
 package java.text;
 
+import gnu.classpath.Configuration;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Vector;
-
+import java.util.Iterator;
 
 /**
  * This class should not be put public and it is only intended to the
@@ -331,6 +332,8 @@
     Vector new_attributes = new Vector();
     int i = 0, j = 0;
 
+    debug("merging " + attributes.length + " attrs");
+    
     while (i < this.ranges.length && j < ranges.length)
       {
 	if (this.attributes[i] != null)
@@ -388,6 +391,7 @@
 	this.ranges[i] = ((Integer)new_ranges.elementAt (i)).intValue();
       }
     
+    dumpTable();
   }
 
   /**
@@ -466,4 +470,63 @@
   {
     append (text, null);
   }  
+
+  /**
+   * This method adds a set of attributes to a range of character. The
+   * bounds are always inclusive. In the case many attributes have to
+   * be added it is advised to directly use {@link #mergeAttributes([Ljava.util.HashMap;[I}
+   *
+   * @param attributes Attributes to merge into the iterator.
+   * @param range_start Lower bound of the range of characters which will receive the
+   * attribute.
+   * @param range_end Upper bound of the range of characters which will receive the
+   * attribute. 
+   *
+   * @throws IllegalArgumentException if ranges are out of bounds.
+   */
+  protected void addAttributes(HashMap attributes, int range_start, int range_end)
+  {
+    if (range_start == 0)
+      mergeAttributes(new HashMap[] { attributes }, new int[] { range_end });
+    else
+      mergeAttributes(new HashMap[] { null, attributes }, new int[] { range_start, range_end });
+  }
+
+  final private void debug(String s)
+  {
+    if (Configuration.DEBUG)
+      System.out.println(s);
+  }
+
+  final private void dumpTable()
+  {
+    int start_range = 0;
+    
+    if (!Configuration.DEBUG)
+      return;
+
+    System.out.println("Dumping internal table:");
+    for (int i = 0; i < ranges.length; i++)
+      {
+	System.out.print("\t" + start_range + " => " + ranges[i] + ":");
+	if (attributes[i] == null)
+	  System.out.println("null");
+	else
+	  {
+	    Set keyset = attributes[i].keySet();
+	    if (keyset != null)
+	      {
+		Iterator keys = keyset.iterator();
+		
+		while (keys.hasNext())
+		  System.out.print(" " + keys.next());
+	      }
+	    else
+	      System.out.println("keySet null");
+	    System.out.println();
+	  }
+      }
+    System.out.println();
+    System.out.flush();
+  }
 }
Index: kaffe/libraries/javalib/java/text/MessageFormat.java
diff -u kaffe/libraries/javalib/java/text/MessageFormat.java:1.20 kaffe/libraries/javalib/java/text/MessageFormat.java:1.21
--- kaffe/libraries/javalib/java/text/MessageFormat.java:1.20	Wed Aug 27 14:32:10 2003
+++ kaffe/libraries/javalib/java/text/MessageFormat.java	Sun Jan 11 17:48:59 2004
@@ -397,16 +397,18 @@
    * @param fp A FieldPosition object (it is ignored).
    */
   public final StringBuffer format (Object arguments[], StringBuffer appendBuf,
-				    FieldPosition ignore)
+				    FieldPosition fp)
   {
-    return formatInternal(arguments, appendBuf, ignore, null);
+    return formatInternal(arguments, appendBuf, fp, null);
   }
 
   protected final StringBuffer formatInternal (Object arguments[], StringBuffer appendBuf,
-					       FieldPosition ignore,
+					       FieldPosition fp,
 					       FormatCharacterIterator output_iterator)
   {
     appendBuf.append(leader);
+    if (output_iterator != null)
+      output_iterator.append(leader);
 
     for (int i = 0; i < elements.length; ++i)
       {
@@ -416,6 +418,10 @@
 	AttributedCharacterIterator iterator = null;
 
 	Format formatter = null;
+
+	if (i == 0 && fp != null && fp.getFieldAttribute() == Field.ARGUMENT)
+	  fp.setBeginIndex(appendBuf.length());
+
 	if (elements[i].setFormat != null)
 	  formatter = elements[i].setFormat;
 	else if (elements[i].format != null)
@@ -432,26 +438,27 @@
 	else
 	  appendBuf.append(thisArg);
 
+	if (i == 0 && fp != null && fp.getFieldAttribute() == Field.ARGUMENT)
+	  fp.setEndIndex(appendBuf.length());
+
 	if (formatter != null)
 	  {
 	    // Special-case ChoiceFormat.
 	    if (formatter instanceof ChoiceFormat)
 	      {
 		StringBuffer buf = new StringBuffer ();
-		formatter.format(thisArg, buf, ignore);
+		formatter.format(thisArg, buf, fp);
 		MessageFormat mf = new MessageFormat ();
 		mf.setLocale(locale);
 		mf.applyPattern(buf.toString());
-		mf.format(arguments, appendBuf, ignore);
+		mf.format(arguments, appendBuf, fp);
 	      }
 	    else
 	      {
 		if (output_iterator != null)
-		  {
-		    iterator = formatter.formatToCharacterIterator(thisArg);
-		  }
+		  iterator = formatter.formatToCharacterIterator(thisArg);
 		else
-		  formatter.format(thisArg, appendBuf, ignore);
+		  formatter.format(thisArg, appendBuf, fp);
 	      }
 
 	    elements[i].format = formatter;
@@ -464,24 +471,20 @@
 	    
 	    hash_argument.put (MessageFormat.Field.ARGUMENT,
 			       new Integer(elements[i].argNumber));
+
 	    
 	    if (iterator != null)
 	      {
 		output_iterator.append(iterator);
-		if (position == 0)
-		  output_iterator.mergeAttributes
-		    (new HashMap[] { hash_argument},
-		     new int[] { output_iterator.getEndIndex() });
-		else 
-		  output_iterator.mergeAttributes
-		    (new HashMap[] {null, hash_argument},
-		     new int[] { position, output_iterator.getEndIndex()});
-	      } else
-	       output_iterator.append(thisArg.toString(), hash_argument);
-
+		output_iterator.addAttributes(hash_argument, position, 
+					      output_iterator.getEndIndex());
+	      }	
+	    else
+	      output_iterator.append(thisArg.toString(), hash_argument);
+	    
 	    output_iterator.append(elements[i].trailer);
 	  }
-
+	
 	appendBuf.append(elements[i].trailer);
       }
     
Index: kaffe/libraries/javalib/java/text/SimpleDateFormat.java
diff -u kaffe/libraries/javalib/java/text/SimpleDateFormat.java:1.28 kaffe/libraries/javalib/java/text/SimpleDateFormat.java:1.29
--- kaffe/libraries/javalib/java/text/SimpleDateFormat.java:1.28	Sat Jan  3 04:14:34 2004
+++ kaffe/libraries/javalib/java/text/SimpleDateFormat.java	Sun Jan 11 17:48:59 2004
@@ -84,7 +84,7 @@
   // This string is specified in the JCL.  We set it here rather than
   // do a DateFormatSymbols(Locale.US).getLocalPatternChars() since
   // someone could theoretically change those values (though unlikely).
-  private static final String standardChars = "GyMdkHmsSEDFwWahKz";
+  private static final String standardChars = "GyMdkHmsSEDFwWahKzZ";
 
   private void readObject(ObjectInputStream stream)
     throws IOException, ClassNotFoundException
@@ -521,7 +521,7 @@
 	  buffer.append(zoneID);
 	  break;
 	default:
-	  throw new IllegalArgumentException("Illegal pattern character");
+	  throw new IllegalArgumentException("Illegal pattern character " + p.field);
 	}
 	if (pos != null && p.field == pos.getField())
 	  {
@@ -556,6 +556,11 @@
   public AttributedCharacterIterator formatToCharacterIterator(Object date)
     throws IllegalArgumentException
   {
+    if (date == null)
+      throw new NullPointerException("null argument");
+    if (!(date instanceof Date))
+      throw new IllegalArgumentException("argument should be an instance of java.util.Date");
+
     Vector attributes = new Vector();
     Vector ranges = new Vector();
     String s = formatWithAttribute((Date)date, new StringBuffer(),




More information about the kaffe mailing list