summaryrefslogtreecommitdiff
path: root/java/text/SimpleDateFormat.java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2005-08-25 02:04:35 +0000
committerTom Tromey <tromey@redhat.com>2005-08-25 02:04:35 +0000
commit312fdfbceb8c46cda6d44e19c9af6eb58ee9c057 (patch)
tree38fab4196f8fc9124f5a7a296ee0346d4e21abb7 /java/text/SimpleDateFormat.java
parenta66a4532cfe2d3202014fe32cb10717eceef3a59 (diff)
downloadclasspath-312fdfbceb8c46cda6d44e19c9af6eb58ee9c057.tar.gz
* java/text/SimpleDateFormat.java (compileFormat): Correctly
handle quoted single quotes. PR classspath/23183.
Diffstat (limited to 'java/text/SimpleDateFormat.java')
-rw-r--r--java/text/SimpleDateFormat.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/java/text/SimpleDateFormat.java b/java/text/SimpleDateFormat.java
index 12ea95484..c0c4cf68c 100644
--- a/java/text/SimpleDateFormat.java
+++ b/java/text/SimpleDateFormat.java
@@ -314,16 +314,33 @@ public class SimpleDateFormat extends DateFormat
{
// Quoted text section; skip to next single quote
pos = pattern.indexOf('\'', i + 1);
- if (pos == -1)
+ // First look for '' -- meaning a single quote.
+ if (pos == i + 1)
+ tokens.add("'");
+ else
{
- throw new IllegalArgumentException("Quotes starting at character "
- + i + " not closed.");
+ // Look for the terminating quote. However, if we
+ // see a '', that represents a literal quote and
+ // we must iterate.
+ StringBuffer buf = new StringBuffer();
+ int oldPos = i + 1;
+ do
+ {
+ if (pos == -1)
+ throw new IllegalArgumentException("Quotes starting at character "
+ + i +
+ " not closed.");
+ buf.append(pattern.substring(oldPos, pos));
+ if (pos + 1 >= pattern.length()
+ || pattern.charAt(pos + 1) != '\'')
+ break;
+ buf.append('\'');
+ oldPos = pos + 2;
+ pos = pattern.indexOf('\'', pos + 2);
+ }
+ while (true);
+ tokens.add(buf.toString());
}
- if ((pos + 1 < pattern.length())
- && (pattern.charAt(pos + 1) == '\''))
- tokens.add(pattern.substring(i + 1, pos + 1));
- else
- tokens.add(pattern.substring(i + 1, pos));
i = pos;
}
else