Fixed <> encoding inside Helma macro tags.

This commit is contained in:
hns 2002-06-21 15:26:31 +00:00
parent 962b2b6e6c
commit e47b5ca388

View file

@ -302,6 +302,8 @@ public final class HtmlEncoder {
// if we are inside a <code> tag, we encode everything to make // if we are inside a <code> tag, we encode everything to make
// documentation work easier // documentation work easier
boolean insideCodeTag = false; boolean insideCodeTag = false;
// are we within a macro tag?
boolean insideMacroTag = false;
// the difference between swallowOneNewline and ignoreNewline is that // the difference between swallowOneNewline and ignoreNewline is that
// swallowOneNewline is just effective once (for the next newline) // swallowOneNewline is just effective once (for the next newline)
boolean ignoreNewline = false; boolean ignoreNewline = false;
@ -337,13 +339,17 @@ public final class HtmlEncoder {
ret.append ("&amp;"); ret.append ("&amp;");
break; break;
case '<': case '<':
if (i < l-2) { if (insideTag) {
ret.append ('<');
break;
} else if (i < l-2) {
boolean insideCloseTag = ('/' == chars[i+1]); boolean insideCloseTag = ('/' == chars[i+1]);
int tagStart = insideCloseTag ? i+2 : i+1; int tagStart = insideCloseTag ? i+2 : i+1;
int j = tagStart; int j = tagStart;
while (j<l && (Character.isLetterOrDigit (chars[j]) || chars[j] == '%')) while (j<l && (Character.isLetterOrDigit (chars[j]) || chars[j] == '%'))
j++; j++;
if (j > tagStart && j < l) { if (j > tagStart && j < l) {
insideMacroTag = ('%' == chars[i+1]);
String tagName = new String (chars, tagStart, j-tagStart).toLowerCase (); String tagName = new String (chars, tagStart, j-tagStart).toLowerCase ();
if ("code".equals (tagName) && insideCloseTag && insideCodeTag) if ("code".equals (tagName) && insideCloseTag && insideCodeTag)
insideCodeTag = false; insideCodeTag = false;
@ -360,9 +366,7 @@ public final class HtmlEncoder {
} else if (suppressLinebreakTags.contains (tagName)) { } else if (suppressLinebreakTags.contains (tagName)) {
ignoreNewline = !insideCloseTag; ignoreNewline = !insideCloseTag;
swallowOneNewline = true; swallowOneNewline = true;
} else if ("p".equalsIgnoreCase (tagName) || } else if ("p".equals (tagName) || "blockquote".equals (tagName) || "bq".equals (tagName)) {
"blockquote".equalsIgnoreCase (tagName) ||
"bq".equalsIgnoreCase (tagName)) {
swallowOneNewline = true; swallowOneNewline = true;
} }
if ("code".equals (tagName) && !insideCloseTag) if ("code".equals (tagName) && !insideCloseTag)
@ -385,7 +389,7 @@ public final class HtmlEncoder {
ret.append ('>'); ret.append ('>');
else else
ret.append ("&gt;"); ret.append ("&gt;");
insideTag = false; insideTag = insideMacroTag ? chars[i-1] != '%' : false;
break; break;
default: default:
// ret.append (c); // ret.append (c);