in doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java [361:447]
public void renderDocument(
Writer writer, DocumentRenderingContext docRenderingContext, SiteRenderingContext siteContext)
throws RendererException {
SiteRendererSink sink = new SiteRendererSink(docRenderingContext);
File doc = new File(docRenderingContext.getBasedir(), docRenderingContext.getInputName());
Reader reader = null;
try {
String resource = doc.getAbsolutePath();
Parser parser = doxia.getParser(docRenderingContext.getParserId());
ParserConfigurator configurator = siteContext.getParserConfigurator();
boolean isConfigured = false;
if (configurator != null) {
isConfigured = configurator.configure(docRenderingContext.getParserId(), doc.toPath(), parser);
}
if (!isConfigured) {
// DOXIASITETOOLS-146 don't render comments from source markup
parser.setEmitComments(false);
parser.setEmitAnchorsForIndexableEntries(true);
}
// TODO: DOXIA-111: the filter used here must be checked generally.
if (docRenderingContext.getAttribute("velocity") != null) {
LOGGER.debug("Processing Velocity for " + docRenderingContext.getDoxiaSourcePath());
try {
Context vc = createDocumentVelocityContext(docRenderingContext, siteContext);
StringWriter sw = new StringWriter();
velocity.getEngine().mergeTemplate(resource, siteContext.getInputEncoding(), vc, sw);
String doxiaContent = sw.toString();
if (siteContext.getProcessedContentOutput() != null) {
// save Velocity processing result, ie the Doxia content that will be parsed after
saveVelocityProcessedContent(docRenderingContext, siteContext, doxiaContent);
}
reader = new StringReader(doxiaContent);
} catch (VelocityException e) {
throw new RendererException(
"Error parsing " + docRenderingContext.getDoxiaSourcePath() + " as a Velocity template", e);
}
if (parser.getType() == Parser.XML_TYPE && siteContext.isValidate()) {
reader = validate(reader, resource);
}
} else {
switch (parser.getType()) {
case Parser.XML_TYPE:
reader = ReaderFactory.newXmlReader(doc);
if (siteContext.isValidate()) {
reader = validate(reader, resource);
}
break;
case Parser.TXT_TYPE:
case Parser.UNKNOWN_TYPE:
default:
reader = ReaderFactory.newReader(doc, siteContext.getInputEncoding());
}
}
doxia.parse(reader, docRenderingContext.getParserId(), sink, docRenderingContext.getDoxiaSourcePath());
} catch (ParserNotFoundException e) {
throw new RendererException("Error getting a parser for '" + doc + "'", e);
} catch (ParseException e) {
StringBuilder errorMsgBuilder = new StringBuilder();
errorMsgBuilder.append("Error parsing '").append(doc).append("'");
if (e.getLineNumber() > 0) {
errorMsgBuilder.append(", line ").append(e.getLineNumber());
}
throw new RendererException(errorMsgBuilder.toString(), e);
} catch (IOException e) {
throw new RendererException("Error while processing '" + doc + "'", e);
} finally {
sink.flush();
sink.close();
IOUtil.close(reader);
}
mergeDocumentIntoSite(writer, (DocumentContent) sink, siteContext);
}