# Derived from code on Eric Holscher's blog, found at:
# https://www.ericholscher.com/blog/2016/jul/25/integrating-jinja-rst-sphinx/

import re

def render_with_jinja(docname, source):
    if re.search('^\s*.. jinja$', source[0], re.M):
        return True
    return False

def rstjinja(app, docname, source):
    """
    Render our pages as a jinja template for fancy templating goodness.
    """
    # Make sure we're outputting HTML
    if app.builder.format not in ("html", "latex"):
        return

    # we only want specific files to run through this func
    if not render_with_jinja(docname, source):
        return

    src = rendered = source[0]
    print(f"rendering {docname} as jinja templates")

    if app.builder.format == "html":
        rendered = app.builder.templates.render_string(
            src, app.config.html_context
        )
    else:
        from sphinx.util.template import BaseRenderer
        renderer = BaseRenderer()
        rendered = renderer.render_string(
            src,
            app.config.html_context
        )

    source[0] = rendered

def setup(app):
    app.connect("source-read", rstjinja)