Skip to content

Commit 7f6d8e9

Browse files
authored
Merge pull request sphinx-doc#9701 from tk0miya/docutils-0.18
Follow new structure of docutils-0.18
2 parents 7dc4a75 + c97c488 commit 7f6d8e9

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

sphinx/addnodes.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
from docutils import nodes
1414
from docutils.nodes import Element
1515

16+
from sphinx.util import docutils
17+
1618
if TYPE_CHECKING:
1719
from sphinx.application import Sphinx
1820

@@ -563,14 +565,16 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
563565
app.add_node(start_of_file)
564566
app.add_node(highlightlang)
565567
app.add_node(tabular_col_spec)
566-
app.add_node(meta)
567568
app.add_node(pending_xref)
568569
app.add_node(number_reference)
569570
app.add_node(download_reference)
570571
app.add_node(literal_emphasis)
571572
app.add_node(literal_strong)
572573
app.add_node(manpage)
573574

575+
if docutils.__version_info__ < (0, 18):
576+
app.add_node(meta)
577+
574578
return {
575579
'version': 'builtin',
576580
'parallel_read_safe': True,

sphinx/directives/patches.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from docutils import nodes
1515
from docutils.nodes import Node, make_id, system_message
1616
from docutils.parsers.rst import directives
17-
from docutils.parsers.rst.directives import html, images, tables
17+
from docutils.parsers.rst.directives import images, tables
1818

1919
from sphinx import addnodes
2020
from sphinx.deprecation import RemovedInSphinx60Warning
@@ -27,6 +27,15 @@
2727
from sphinx.util.osutil import SEP, os_path, relpath
2828
from sphinx.util.typing import OptionSpec
2929

30+
try:
31+
from docutils.nodes import meta as meta_node # type: ignore
32+
from docutils.parsers.rst.directives.misc import Meta as MetaBase # type: ignore
33+
except ImportError:
34+
# docutils-0.17 or older
35+
from docutils.parsers.rst.directives.html import Meta as MetaBase
36+
from docutils.parsers.rst.directives.html import MetaBody
37+
meta_node = MetaBody.meta
38+
3039
if TYPE_CHECKING:
3140
from sphinx.application import Sphinx
3241

@@ -60,19 +69,19 @@ def run(self) -> List[Node]:
6069
return [figure_node]
6170

6271

63-
class Meta(html.Meta, SphinxDirective):
72+
class Meta(MetaBase, SphinxDirective):
6473
def run(self) -> List[Node]:
6574
result = super().run()
6675
for node in result:
6776
if (isinstance(node, nodes.pending) and
68-
isinstance(node.details['nodes'][0], html.MetaBody.meta)):
77+
isinstance(node.details['nodes'][0], meta_node)):
6978
meta = node.details['nodes'][0]
7079
meta.source = self.env.doc2path(self.env.docname)
7180
meta.line = self.lineno
72-
meta.rawcontent = meta['content'] # type: ignore
81+
meta.rawcontent = meta['content']
7382

7483
# docutils' meta nodes aren't picklable because the class is nested
75-
meta.__class__ = addnodes.meta # type: ignore
84+
meta.__class__ = addnodes.meta
7685

7786
return result
7887

sphinx/environment/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
logger = logging.getLogger(__name__)
4646

4747
default_settings: Dict[str, Any] = {
48+
'embed_images': False,
4849
'embed_stylesheet': False,
4950
'cloak_email_addresses': True,
5051
'pep_base_url': 'https://www.python.org/dev/peps/',
@@ -54,6 +55,7 @@
5455
'input_encoding': 'utf-8-sig',
5556
'doctitle_xform': False,
5657
'sectsubtitle_xform': False,
58+
'section_self_link': False,
5759
'halt_level': 5,
5860
'file_insertion_enabled': True,
5961
'smartquotes_locales': [],

tests/test_versioning.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,17 @@
1111
import pickle
1212

1313
import pytest
14-
from docutils.parsers.rst.directives.html import MetaBody
1514

1615
from sphinx import addnodes
1716
from sphinx.testing.util import SphinxTestApp
1817
from sphinx.versioning import add_uids, get_ratio, merge_doctrees
1918

19+
try:
20+
from docutils.parsers.rst.directives.html import MetaBody
21+
meta = MetaBody.meta
22+
except ImportError:
23+
from docutils.nodes import meta
24+
2025
app = original = original_uids = None
2126

2227

@@ -64,7 +69,7 @@ def test_picklablility():
6469
copy.settings.warning_stream = None
6570
copy.settings.env = None
6671
copy.settings.record_dependencies = None
67-
for metanode in copy.traverse(MetaBody.meta):
72+
for metanode in copy.traverse(meta):
6873
metanode.__class__ = addnodes.meta
6974
loaded = pickle.loads(pickle.dumps(copy, pickle.HIGHEST_PROTOCOL))
7075
assert all(getattr(n, 'uid', False) for n in loaded.traverse(is_paragraph))

0 commit comments

Comments
 (0)