in src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java [235:274]
private String diffHtml(String htmlA, String htmlB, DiffMode diffMode)
throws IOException, TransformerConfigurationException, SAXException,
ResourceNotFoundException {
ByteArrayOutputStream htmlDiff = new ByteArrayOutputStream();
SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler result = tf.newTransformerHandler();
result.setResult(new StreamResult(htmlDiff));
String htmlHeader = "com/googlesource/gerrit/plugins/xdocs/diff/htmlheader-";
switch (diffMode) {
case SIDEBYSIDE_A:
htmlHeader += "sidebyside-a.xsl";
break;
case SIDEBYSIDE_B:
htmlHeader += "sidebyside-b.xsl";
break;
case UNIFIED:
htmlHeader += "unified.xsl";
break;
default:
log.error(String.format("Unsupported diff mode: %s", diffMode.name()));
throw new ResourceNotFoundException();
}
ContentHandler postProcess = new XslFilter().xsl(result, htmlHeader);
postProcess.startDocument();
postProcess.startElement("", "diffreport", "diffreport", new AttributesImpl());
postProcess.startElement("", "diff", "diff", new AttributesImpl());
HtmlSaxDiffOutput output = new HtmlSaxDiffOutput(postProcess, "diff");
HTMLDiffer differ = new HTMLDiffer(output);
differ.diff(getComparator(htmlA), getComparator(htmlB));
postProcess.endElement("", "diff", "diff");
postProcess.endElement("", "diffreport", "diffreport");
postProcess.endDocument();
return fixStyles(htmlDiff.toString(UTF_8.name()));
}