Retrieve HTML body more accurately
authorSergey Malenkov <sergey.malenkov@jetbrains.com>
Mon, 13 Oct 2014 18:30:45 +0000 (22:30 +0400)
committerSergey Malenkov <sergey.malenkov@jetbrains.com>
Mon, 13 Oct 2014 18:32:46 +0000 (22:32 +0400)
platform/util/src/com/intellij/util/ui/UIUtil.java

index 2ed97baa6141337bfb465427aeac636bf2eba52e..1363520875d80fd38583df42366f0994009d7403 100644 (file)
@@ -346,30 +346,27 @@ public class UIUtil {
   }
 
   public static String getHtmlBody(String text) {
-    return getHtmlBody(new Html(text));
-  }
-
-  public static String getHtmlBody(Html html) {
-    String text = html.getText();
-    String result;
-    if (!text.startsWith("<html>")) {
-      result = text.replaceAll("\n", "<br>");
+    int htmlIndex = 6 + text.indexOf("<html>");
+    if (htmlIndex < 6) {
+      return text.replaceAll("\n", "<br>");
     }
-    else {
-      final int bodyIdx = text.indexOf("<body>");
-      final int closedBodyIdx = text.indexOf("</body>");
-      if (bodyIdx != -1 && closedBodyIdx != -1) {
-        result = text.substring(bodyIdx + "<body>".length(), closedBodyIdx);
-      }
-      else {
-        text = StringUtil.trimStart(text, "<html>").trim();
-        text = StringUtil.trimEnd(text, "</html>").trim();
-        text = StringUtil.trimStart(text, "<body>").trim();
-        text = StringUtil.trimEnd(text, "</body>").trim();
-        result = text;
-      }
+    int htmlCloseIndex = text.indexOf("</html>", htmlIndex);
+    if (htmlCloseIndex < 0) {
+      htmlCloseIndex = text.length();
+    }
+    int bodyIndex = 6 + text.indexOf("<body>", htmlIndex);
+    if (bodyIndex < 6) {
+      return text.substring(htmlIndex, htmlCloseIndex);
+    }
+    int bodyCloseIndex = text.indexOf("</body>", bodyIndex);
+    if (bodyCloseIndex < 0) {
+      bodyCloseIndex = text.length();
     }
+    return text.substring(bodyIndex, Math.min(bodyCloseIndex, htmlCloseIndex));
+  }
 
+  public static String getHtmlBody(Html html) {
+    String result = getHtmlBody(html.getText());
     return html.isKeepFont() ? result : result.replaceAll("<font(.*?)>", "").replaceAll("</font>", "");
   }