Fix CSS styles for new/deleted files in preview diff screens
Daisydiff may insert span tags into the inlined CSS to highlight it
with green/red background. As result the CSS is unparseable and is
ignored. Since it's not possible to avoid this, fix it after the fact.
Change-Id: Ib4d7dc105888954ccf149ced0abb0078f032607c
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
index d34abc3..a0fc8c6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -273,7 +273,27 @@
postProcess.endElement("", "diffreport", "diffreport");
postProcess.endDocument();
- return htmlDiff.toString(UTF_8.name());
+ return fixStyles(htmlDiff.toString(UTF_8.name()));
+ }
+
+ /**
+ * The daisydiff formatting may make inlined styles unparsable. Fix it:
+ * <ul>
+ * <li>Remove span element to highlight addition/deletion inside style elements.</li>
+ * <li>Replace '>' with '>'.</li>
+ * </ul>
+ */
+ private String fixStyles(String html) {
+ Matcher m =
+ Pattern.compile("(<style[a-zA-Z -=/\"]+>\n)<[a-zA-Z -=\"]+>(.*)</[a-z]+>(\n</style>)")
+ .matcher(html);
+ StringBuffer sb = new StringBuffer();
+ while (m.find()) {
+ m.appendReplacement(sb, m.group(1) + m.group(2).replaceAll(">", ">")
+ + m.group(3));
+ }
+ m.appendTail(sb);
+ return sb.toString();
}
private TextNodeComparator getComparator(String html) throws IOException,