///|
/// Templates by name, as a server keeps them: a layout, a page that extends
/// it, and macros imported from a library file.
let sources : Map[String, String] = Map([
  (
    "layout.html", "{% block title %}Site{% endblock %}
{% block body %}{% endblock %}
", ), ( "page.html", "{% extends 'layout.html' %}{% import 'ui.html' as ui %}{% block title %}{{ name }} ยท {{ super() }}{% endblock %}{% block body %}{{ ui.card(name, note) }}{% endblock %}", ), ( "ui.html", "{% macro card(head, text) %}

{{ head }}

{{ text }}

{% endmacro %}", ), ("nav.pug", "nav\n each l in links\n a(href=l.url)= l.label"), ]) ///| fn main { let env = @moonpug.Env::new(load=name => sources.get(name)) try { let page = env.template("page.html") println( page.render( @json.parse("{\"name\": \"Ada\", \"note\": \"\"}"), ), ) println( page.render(@json.parse("{\"name\": \"Grace\", \"note\": \"compilers\"}")), ) let nav = env.template("nav.pug") println( nav.render( @json.parse( "{\"links\": [{\"url\": \"/\", \"label\": \"Home\"}, {\"url\": \"/about\", \"label\": \"About\"}]}", ), ), ) } catch { e => println("refused: \{e}") } }