* java/text/MessageFormat.java (scanString): Changed how quoting
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2005 00:56:25 +0000 (00:56 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 18 Jan 2005 00:56:25 +0000 (00:56 +0000)
is handled.
(scanFormatElement): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93804 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/text/MessageFormat.java

index eb7f0de..1eb49d7 100644 (file)
@@ -1,3 +1,9 @@
+2005-01-17  Tom Tromey  <tromey@redhat.com>
+
+       * java/text/MessageFormat.java (scanString): Changed how quoting
+       is handled.
+       (scanFormatElement): Likewise.
+
 2004-12-07  Mark Wielaard  <mark@klomp.org>
 
        * java/text/MessageFormat.java (scanFormat): Chain thrown exception.
index 171fffe..6a031bc 100644 (file)
@@ -1,5 +1,5 @@
 /* MessageFormat.java - Localized message formatting.
-   Copyright (C) 1999, 2001, 2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2002, 2004, 2005 Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
 
@@ -193,27 +193,36 @@ public class MessageFormat extends Format
   {
     int max = pat.length();
     buffer.setLength(0);
+    boolean quoted = false;
     for (; index < max; ++index)
       {
        char c = pat.charAt(index);
-       if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
+       if (quoted)
          {
-           buffer.append(pat.charAt(index + 1));
-           index += 2;
+           // In a quoted context, a single quote ends the quoting.
+           if (c == '\'')
+             quoted = false;
+           else
+             buffer.append(c);
          }
-       else if (c == '\'' && index + 1 < max
-                && pat.charAt(index + 1) == '\'')
+       // Check for '', which is a single quote.
+       else if (c == '\'' && index + 1 < max && pat.charAt(index + 1) == '\'')
          {
            buffer.append(c);
            ++index;
          }
+       else if (c == '\'')
+         {
+           // Start quoting.
+           quoted = true;
+         }
        else if (c == '{')
          break;
-       else if (c == '}')
-         throw new IllegalArgumentException("Found '}' without '{'");
        else
          buffer.append(c);
       }
+    // Note that we explicitly allow an unterminated quote.  This is
+    // done for compatibility.
     return index;
   }
 
@@ -225,39 +234,42 @@ public class MessageFormat extends Format
     int max = pat.length();
     buffer.setLength(0);
     int brace_depth = 1;
+    boolean quoted = false;
 
     for (; index < max; ++index)
       {
        char c = pat.charAt(index);
-       if (c == '\'' && index + 2 < max && pat.charAt(index + 2) == '\'')
+       // First see if we should turn off quoting.
+       if (quoted)
          {
-           buffer.append(c);
-           buffer.append(pat.charAt(index + 1));
-           buffer.append(c);
-           index += 2;
+           if (c == '\'')
+             quoted = false;
+           // In both cases we fall through to inserting the
+           // character here.
          }
+       // See if we have just a plain quote to insert.
        else if (c == '\'' && index + 1 < max
                 && pat.charAt(index + 1) == '\'')
          {
            buffer.append(c);
            ++index;
          }
+       // See if quoting should turn on.
+       else if (c == '\'')
+         quoted = true;
        else if (c == '{')
-         {
-           buffer.append(c);
-           ++brace_depth;
-         }
+         ++brace_depth;
        else if (c == '}')
          {
            if (--brace_depth == 0)
              break;
-           buffer.append(c);
          }
        // Check for TERM after braces, because TERM might be `}'.
        else if (c == term)
          break;
-       else
-         buffer.append(c);
+       // All characters, including opening and closing quotes, are
+       // inserted here.
+       buffer.append(c);
       }
     return index;
   }