31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
from sphinx.application import Sphinx
|
|
from sphinx.builders.dirhtml import DirectoryHTMLBuilder
|
|
|
|
|
|
def setup(app: Sphinx):
|
|
app.connect("html-page-context", canonical_url)
|
|
|
|
|
|
def canonical_url(app: Sphinx, pagename, templatename, context, doctree):
|
|
"""Sphinx 1.8 builds a canonical URL if ``html_baseurl`` config is
|
|
set. However, it builds a URL ending with ".html" when using the
|
|
dirhtml builder, which is incorrect. Detect this and generate the
|
|
correct URL for each page.
|
|
Also accepts the custom, deprecated ``canonical_url`` config as the
|
|
base URL. This will be removed in version 2.1.
|
|
"""
|
|
base = app.config.html_baseurl
|
|
|
|
if (
|
|
not base
|
|
or not isinstance(app.builder, DirectoryHTMLBuilder)
|
|
or not context["pageurl"]
|
|
or not context["pageurl"].endswith(".html")
|
|
):
|
|
return
|
|
|
|
# Fix pageurl for dirhtml builder if this version of Sphinx still
|
|
# generates .html URLs.
|
|
target = app.builder.get_target_uri(pagename)
|
|
context["pageurl"] = base + target
|