From 511f151546af496c2f80f6382b737246f901f1a0 Mon Sep 17 00:00:00 2001 From: hns Date: Thu, 15 Feb 2001 12:41:27 +0000 Subject: [PATCH] added pre to list of tags where newlines are not encoded --- src/helma/util/HtmlEncoder.java | 34 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/helma/util/HtmlEncoder.java b/src/helma/util/HtmlEncoder.java index 0ff38c06..b54d7419 100644 --- a/src/helma/util/HtmlEncoder.java +++ b/src/helma/util/HtmlEncoder.java @@ -141,7 +141,9 @@ public final class HtmlEncoder { StringReader in = new StringReader (what); int c; boolean closeTag=false, readTag=false, tagOpen=false; - boolean ignoreNewline = false, swallow = false; + // the difference between swallowOneNewline and ignoreNewline is that swallowOneNewline is just effective once (for the next newline) + boolean ignoreNewline = false; + boolean swallowOneNewline = false; StringBuffer tag = new StringBuffer (); try { while ((c = in.read()) != -1) { @@ -154,26 +156,16 @@ public final class HtmlEncoder { String t = tag.toString (); // set ignoreNewline on some tags, depending on wheather they're // being opened or closed. - if ("td".equalsIgnoreCase (t)) { + // what's going on here? we switch newline encoding on inside some tags, for + // others we switch it on when they're closed + if ("td".equalsIgnoreCase (t) || "th".equalsIgnoreCase (t) || "li".equalsIgnoreCase (t)) { ignoreNewline = closeTag; - swallow = true; // for some reason, it's a good idea to swallow (ignore) newlines after some tags - } else if ("th".equalsIgnoreCase (t)) { - ignoreNewline = closeTag; - swallow = true; - } else if ("table".equalsIgnoreCase (t)) { + swallowOneNewline = true; + } else if ("table".equalsIgnoreCase (t) || "ul".equalsIgnoreCase (t) || "ol".equalsIgnoreCase (t) || "pre".equalsIgnoreCase (t)) { ignoreNewline = !closeTag; - swallow = true; - } else if ("ul".equalsIgnoreCase (t)) { - ignoreNewline = !closeTag; - swallow = true; - } else if ("ol".equalsIgnoreCase (t)) { - ignoreNewline = !closeTag; - swallow = true; - } else if ("li".equalsIgnoreCase (t)) { - swallow = true; - ignoreNewline = closeTag; + swallowOneNewline = true; } else if ("p".equalsIgnoreCase (t)) { - swallow = true; + swallowOneNewline = true; } readTag = false; @@ -187,11 +179,11 @@ public final class HtmlEncoder { // ret.append ("&"); // break; case '\n': - if (!ignoreNewline && !swallow) + if (!ignoreNewline && !swallowOneNewline) ret.append ("
"); ret.append ('\n'); if (!tagOpen) - swallow = false; + swallowOneNewline = false; break; case '<': closeTag = false; @@ -214,7 +206,7 @@ public final class HtmlEncoder { ret.append (";"); } if (!tagOpen && !Character.isWhitespace ((char)c)) - swallow = false; + swallowOneNewline = false; } } } catch (IOException e) {}