aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/text
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-01-18 00:56:25 +0000
committerTom Tromey <tromey@gcc.gnu.org>2005-01-18 00:56:25 +0000
commit5526a514c907d8c890a699df19b7ba9c2aa8c6ab (patch)
tree91d52e97716fe3f8ba5e3ccdaaea8eafb88d5765 /libjava/java/text
parente5cd33211701352d83422ef6c6b915cbc4ee3cd4 (diff)
downloadgcc-5526a514c907d8c890a699df19b7ba9c2aa8c6ab.zip
gcc-5526a514c907d8c890a699df19b7ba9c2aa8c6ab.tar.gz
gcc-5526a514c907d8c890a699df19b7ba9c2aa8c6ab.tar.bz2
MessageFormat.java (scanString): Changed how quoting is handled.
* java/text/MessageFormat.java (scanString): Changed how quoting is handled. (scanFormatElement): Likewise. From-SVN: r93804
Diffstat (limited to 'libjava/java/text')
-rw-r--r--libjava/java/text/MessageFormat.java52
1 files changed, 32 insertions, 20 deletions
diff --git a/libjava/java/text/MessageFormat.java b/libjava/java/text/MessageFormat.java
index 171fffe..6a031bc 100644
--- a/libjava/java/text/MessageFormat.java
+++ b/libjava/java/text/MessageFormat.java
@@ -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;
}