42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
# 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)
|