Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Follow new structure of docutils-0.18 #9701

Merged
merged 2 commits into from
Oct 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion sphinx/addnodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
from docutils import nodes
from docutils.nodes import Element

from sphinx.util import docutils

if TYPE_CHECKING:
from sphinx.application import Sphinx

Expand Down Expand Up @@ -563,14 +565,16 @@ def setup(app: "Sphinx") -> Dict[str, Any]:
app.add_node(start_of_file)
app.add_node(highlightlang)
app.add_node(tabular_col_spec)
app.add_node(meta)
app.add_node(pending_xref)
app.add_node(number_reference)
app.add_node(download_reference)
app.add_node(literal_emphasis)
app.add_node(literal_strong)
app.add_node(manpage)

if docutils.__version_info__ < (0, 18):
app.add_node(meta)

return {
'version': 'builtin',
'parallel_read_safe': True,
Expand Down
19 changes: 14 additions & 5 deletions sphinx/directives/patches.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from docutils import nodes
from docutils.nodes import Node, make_id, system_message
from docutils.parsers.rst import directives
from docutils.parsers.rst.directives import html, images, tables
from docutils.parsers.rst.directives import images, tables

from sphinx import addnodes
from sphinx.deprecation import RemovedInSphinx60Warning
Expand All @@ -27,6 +27,15 @@
from sphinx.util.osutil import SEP, os_path, relpath
from sphinx.util.typing import OptionSpec

try:
from docutils.nodes import meta as meta_node # type: ignore
from docutils.parsers.rst.directives.misc import Meta as MetaBase # type: ignore
except ImportError:
# docutils-0.17 or older
from docutils.parsers.rst.directives.html import Meta as MetaBase
from docutils.parsers.rst.directives.html import MetaBody
meta_node = MetaBody.meta

if TYPE_CHECKING:
from sphinx.application import Sphinx

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


class Meta(html.Meta, SphinxDirective):
class Meta(MetaBase, SphinxDirective):
def run(self) -> List[Node]:
result = super().run()
for node in result:
if (isinstance(node, nodes.pending) and
isinstance(node.details['nodes'][0], html.MetaBody.meta)):
isinstance(node.details['nodes'][0], meta_node)):
meta = node.details['nodes'][0]
meta.source = self.env.doc2path(self.env.docname)
meta.line = self.lineno
meta.rawcontent = meta['content'] # type: ignore
meta.rawcontent = meta['content']

# docutils' meta nodes aren't picklable because the class is nested
meta.__class__ = addnodes.meta # type: ignore
meta.__class__ = addnodes.meta

return result

Expand Down
2 changes: 2 additions & 0 deletions sphinx/environment/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
logger = logging.getLogger(__name__)

default_settings: Dict[str, Any] = {
'embed_images': False,
'embed_stylesheet': False,
'cloak_email_addresses': True,
'pep_base_url': 'https://www.python.org/dev/peps/',
Expand All @@ -54,6 +55,7 @@
'input_encoding': 'utf-8-sig',
'doctitle_xform': False,
'sectsubtitle_xform': False,
'section_self_link': False,
'halt_level': 5,
'file_insertion_enabled': True,
'smartquotes_locales': [],
Expand Down
9 changes: 7 additions & 2 deletions tests/test_versioning.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,17 @@
import pickle

import pytest
from docutils.parsers.rst.directives.html import MetaBody

from sphinx import addnodes
from sphinx.testing.util import SphinxTestApp
from sphinx.versioning import add_uids, get_ratio, merge_doctrees

try:
from docutils.parsers.rst.directives.html import MetaBody
meta = MetaBody.meta
except ImportError:
from docutils.nodes import meta

app = original = original_uids = None


Expand Down Expand Up @@ -64,7 +69,7 @@ def test_picklablility():
copy.settings.warning_stream = None
copy.settings.env = None
copy.settings.record_dependencies = None
for metanode in copy.traverse(MetaBody.meta):
for metanode in copy.traverse(meta):
metanode.__class__ = addnodes.meta
loaded = pickle.loads(pickle.dumps(copy, pickle.HIGHEST_PROTOCOL))
assert all(getattr(n, 'uid', False) for n in loaded.traverse(is_paragraph))
Expand Down