Skip to content

Commit

Permalink
* java/text/MessageFormat.java (scanString): Changed how quoting
Browse files Browse the repository at this point in the history
	is handled.
	(scanFormatElement): Likewise.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93804 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
tromey committed Jan 18, 2005
1 parent cfaa69b commit 16a8860
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 20 deletions.
6 changes: 6 additions & 0 deletions libjava/ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
52 changes: 32 additions & 20 deletions libjava/java/text/MessageFormat.java
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -193,27 +193,36 @@ private static int scanString(String pat, int index, StringBuffer buffer)
{
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;
}

Expand All @@ -225,39 +234,42 @@ private static int scanFormatElement(String pat, int index,
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;
}
Expand Down

0 comments on commit 16a8860

Please sign in to comment.