in doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java [435:478]
private String getInterpolatedSiteDescriptorContent(
MavenProject aProject, String siteDescriptorContent, boolean isEarly) throws SiteToolException {
Objects.requireNonNull(aProject, "aProject cannot be null");
Objects.requireNonNull(siteDescriptorContent, "siteDescriptorContent cannot be null");
RegexBasedInterpolator interpolator = new RegexBasedInterpolator();
if (isEarly) {
interpolator.addValueSource(new PrefixedObjectValueSource("this.", aProject));
interpolator.addValueSource(new PrefixedPropertiesValueSource("this.", aProject.getProperties()));
} else {
interpolator.addValueSource(new PrefixedObjectValueSource("project.", aProject));
interpolator.addValueSource(new MapBasedValueSource(aProject.getProperties()));
try {
interpolator.addValueSource(new EnvarBasedValueSource());
} catch (IOException e) {
// Prefer logging?
throw new SiteToolException("Cannot interpolate environment properties", e);
}
}
interpolator.addPostProcessor(new InterpolationPostProcessor() {
@Override
public Object execute(String expression, Object value) {
if (value != null) {
// we're going to parse this back in as XML so we need to escape XML markup
return value.toString()
.replace("&", "&")
.replace("<", "<")
.replace(">", ">")
.replace("\"", """)
.replace("'", "'");
}
return null;
}
});
try {
return interpolator.interpolate(siteDescriptorContent);
} catch (InterpolationException e) {
throw new SiteToolException("Cannot interpolate site descriptor", e);
}
}