2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 15:05:23 +00:00

Support Sphinx 1.6.7

Luckily we don't rely on SphinxDirective functionality which does not
exist in 1.6.7. Replace it with docutils Directive.

transform_content() callback was added only in Sphinx 3.0.0.
Detect if it was not called and call it manually.
The transform_content() function requires access to inner "contentnode"
which is created inside run(). This workaround relies on the order of
node as it was in the pre-3.0.0 versions, but it should not matter as
new versions will not trigger the workaround.
This commit is contained in:
Petr Špaček
2022-07-20 18:44:48 +02:00
parent ba10de32d3
commit f534ef291b

View File

@@ -23,7 +23,7 @@ https://www.sphinx-doc.org/en/master/development/tutorials/recipe.html
from collections import namedtuple from collections import namedtuple
from docutils.parsers.rst import directives from docutils.parsers.rst import Directive, directives
from docutils import nodes from docutils import nodes
from sphinx import addnodes from sphinx import addnodes
@@ -31,7 +31,6 @@ from sphinx.directives import ObjectDescription
from sphinx.domains import Domain from sphinx.domains import Domain
from sphinx.roles import XRefRole from sphinx.roles import XRefRole
from sphinx.util import logging from sphinx.util import logging
from sphinx.util.docutils import SphinxDirective
from sphinx.util.nodes import make_refnode from sphinx.util.nodes import make_refnode
import checkgrammar import checkgrammar
@@ -61,7 +60,7 @@ def domain_factory(domainname, domainlabel, todolist, grammar):
See StatementListDirective. See StatementListDirective.
""" """
class StatementListDirective(SphinxDirective): class StatementListDirective(Directive):
"""A custom directive to generate list of statements. """A custom directive to generate list of statements.
It only installs placeholder which is later replaced by It only installs placeholder which is later replaced by
process_statementlist_nodes() callback. process_statementlist_nodes() callback.
@@ -229,6 +228,7 @@ def domain_factory(domainname, domainlabel, todolist, grammar):
def transform_content(self, contentnode: addnodes.desc_content) -> None: def transform_content(self, contentnode: addnodes.desc_content) -> None:
"""autogenerate content from structured data""" """autogenerate content from structured data"""
self.workaround_transform_content = True
if self.isc_short: if self.isc_short:
contentnode.insert(0, self.isc_short_node) contentnode.insert(0, self.isc_short_node)
if self.isc_tags: if self.isc_tags:
@@ -263,6 +263,19 @@ def domain_factory(domainname, domainlabel, todolist, grammar):
if len(warn): if len(warn):
contentnode.insert(0, warn) contentnode.insert(0, warn)
def __init__(self, *args, **kwargs):
"""Compability with Sphinx < 3.0.0"""
self.workaround_transform_content = False
super().__init__(*args, **kwargs)
def run(self):
"""Compability with Sphinx < 3.0.0"""
nodelist = super().run()
if not self.workaround_transform_content:
# get access to "contentnode" created inside super.run()
self.transform_content(nodelist[1][-1])
return nodelist
name = domainname name = domainname
label = domainlabel label = domainlabel