""");
+
+ for (var index = 0; index < snippets.Count; index++)
+ {
+ string classList = "";
+ if (index == 0)
+ {
+ classList = " show active";
+ }
+
+ var snippet = snippets[index];
+ string html = RenderHtml(snippet);
+ builder.AppendLine($"""
+
+ """);
+ builder.AppendLine(html);
+ builder.AppendLine("
");
+ }
+
+ builder.AppendLine("
");
+
+ return builder.ToString();
+ }
+
+ private string RenderHtml(ICodeSnippet snippet)
+ {
+ return Markdig.Markdown.ToHtml($"```{snippet.Language}\n{snippet.Content}\n```", _markdownPipeline.Value);
+ }
+
+ private static string DefaultRender(TemplateInline template)
+ {
+ return template.ArgumentList.Count == 0
+ ? $"{{{{{template.Name}}}}}"
+ : $"{{{{{template.Name}|{string.Join('|', template.ArgumentList)}}}}}";
+ }
+}
diff --git a/OliverBooth/Markdown/Template/CustomTemplateRenderer.cs b/OliverBooth/Markdown/Template/CustomTemplateRenderer.cs
new file mode 100644
index 0000000..1d3f122
--- /dev/null
+++ b/OliverBooth/Markdown/Template/CustomTemplateRenderer.cs
@@ -0,0 +1,32 @@
+using Microsoft.EntityFrameworkCore;
+using OliverBooth.Data.Web;
+
+namespace OliverBooth.Markdown.Template;
+
+///