diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/LiquidRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/LiquidRenderer.java index 78893a2b4..739773801 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/LiquidRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/LiquidRenderer.java @@ -32,12 +32,30 @@ public class LiquidRenderer extends ResourceRenderer { this.rcontext = rcontext; this.liquidTemplate = liquidTemplate; } + + /** + * This class provides an implementation of the ILiquidEngineIncludeResolver that makes use of the + * template provider available in the rendering context to support resolving includes. + */ + private class LiquidRendererIncludeResolver implements LiquidEngine.ILiquidEngineIncludeResolver { + public LiquidRendererIncludeResolver(RenderingContext context) { + this.context = context; + } + + private RenderingContext context; + + @Override + public String fetchInclude(LiquidEngine engine, String name) { + return context.getTemplateProvider().findTemplate(name); + } + } @Override public boolean render(XhtmlNode x, Resource r) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome { LiquidEngine engine = new LiquidEngine(context.getWorker(), context.getServices()); XhtmlNode xn; try { + engine.setIncludeResolver(new LiquidRendererIncludeResolver(context.getTemplateProvider())); LiquidDocument doc = engine.parse(liquidTemplate, "template"); String html = engine.evaluate(doc, r, rcontext); xn = new XhtmlParser().parseFragment(html);