This repository has been archived on 2023-09-24. You can view files and clone it, but cannot push or open issues or pull requests.
takahe/docs/extensions/canonical_fix.py

31 lines
1.0 KiB
Python
Raw Normal View History

2022-11-28 00:16:01 +01:00
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