The HTML parser had a problem with whitespace. It inserted implied tags
for many occurances of whitespace where it should ignore it really. This
was caused by Audrius patch for that <b>Bold</b> <i>Italic</i>
whitespace problem (it threw away the whitespace in the middle
originally). He changed it so that such whitespace is preserved. This
however confuses the parser in other places.
I fixed it so that the parser checks the DTD if textual content is
actually allowed in the context before passing on such whitespace
fragments.
2006-11-07 Roman Kennke <[EMAIL PROTECTED]>
* gnu/javax/swing/text/html/parser/support/Parser.java
(_handleText): Check if text content is actually allowed before
passing empty text fragments on to the parser callbacks.
/Roman
Index: gnu/javax/swing/text/html/parser/support/Parser.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/javax/swing/text/html/parser/support/Parser.java,v
retrieving revision 1.8
diff -u -1 -5 -r1.8 Parser.java
--- gnu/javax/swing/text/html/parser/support/Parser.java 6 Nov 2006 20:28:55 -0000 1.8
+++ gnu/javax/swing/text/html/parser/support/Parser.java 7 Nov 2006 23:43:18 -0000
@@ -650,36 +650,40 @@
* by the single one and the result is moved into array,
* passing it to handleText().
*/
protected void _handleText()
{
char[] text;
if (preformatted > 0)
text = textProcessor.preprocessPreformatted(buffer);
else
text = textProcessor.preprocess(buffer);
if (text != null && text.length > 0)
{
TagElement pcdata = new TagElement(dtd.getElement("#pcdata"));
- attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
- _handleEmptyTag(pcdata);
+ if ((text.length > 1 && text[0] != ' ')
+ || validator.tagIsValidForContext(pcdata) == Boolean.TRUE)
+ {
+ attributes = htmlAttributeSet.EMPTY_HTML_ATTRIBUTE_SET;
+ _handleEmptyTag(pcdata);
- handleText(text);
- if (titleOpen)
- title.append(text);
+ handleText(text);
+ if (titleOpen)
+ title.append(text);
+ }
}
}
/**
* Add the image of this token to the buffer.
* @param t A token to append.
*/
protected final void append(Token t)
{
if (t.kind != EOF)
t.appendTo(buffer);
}
/**
* Consume pattern that must match.