diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-18 00:56:25 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-18 00:56:25 +0000 |
commit | 16a88602210d94ade100236a49af7257d64b0283 (patch) | |
tree | 91d52e97716fe3f8ba5e3ccdaaea8eafb88d5765 | |
parent | cfaa69be060c984814f3b27272ad1087da730717 (diff) | |
download | gcc-16a88602210d94ade100236a49af7257d64b0283.tar.gz |
* java/text/MessageFormat.java (scanString): Changed how quoting
is handled.
(scanFormatElement): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93804 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | libjava/ChangeLog | 6 | ||||
-rw-r--r-- | libjava/java/text/MessageFormat.java | 52 |
2 files changed, 38 insertions, 20 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index eb7f0dea951..1eb49d7289d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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. diff --git a/libjava/java/text/MessageFormat.java b/libjava/java/text/MessageFormat.java index 171fffe6d25..6a031bc7254 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; } |