|
15 | 15 | from time import asctime
|
16 | 16 | from pprint import pformat
|
17 | 17 |
|
| 18 | +import sphinx |
18 | 19 | from docutils import nodes
|
19 | 20 | from docutils.io import StringOutput
|
20 | 21 | from docutils.utils import new_document, unescape
|
21 | 22 | from sphinx import addnodes
|
22 | 23 | from sphinx.builders import Builder
|
| 24 | +from sphinx.domains.changeset import VersionChange, versionlabels, versionlabel_classes |
23 | 25 | from sphinx.domains.python import PyFunction, PyMethod
|
24 | 26 | from sphinx.errors import NoUri
|
25 | 27 | from sphinx.locale import _ as sphinx_gettext
|
@@ -393,56 +395,34 @@ def run(self):
|
393 | 395 |
|
394 | 396 | # Support for documenting version of removal in deprecations
|
395 | 397 |
|
396 |
| -class DeprecatedRemoved(SphinxDirective): |
397 |
| - has_content = True |
| 398 | +class DeprecatedRemoved(VersionChange): |
398 | 399 | required_arguments = 2
|
399 |
| - optional_arguments = 1 |
400 |
| - final_argument_whitespace = True |
401 |
| - option_spec = {} |
402 | 400 |
|
403 |
| - _deprecated_label = sphinx_gettext('Deprecated since version {deprecated}, will be removed in version {removed}') |
404 |
| - _removed_label = sphinx_gettext('Deprecated since version {deprecated}, removed in version {removed}') |
| 401 | + _deprecated_label = sphinx_gettext('Deprecated since version %s, will be removed in version %s') |
| 402 | + _removed_label = sphinx_gettext('Deprecated since version %s, removed in version %s') |
405 | 403 |
|
406 | 404 | def run(self):
|
407 |
| - node = addnodes.versionmodified() |
408 |
| - node.document = self.state.document |
409 |
| - node['type'] = 'deprecated-removed' |
410 |
| - version = (self.arguments[0], self.arguments[1]) |
411 |
| - node['version'] = version |
412 |
| - current_version = tuple(int(e) for e in self.config.version.split('.')) |
413 |
| - removed_version = tuple(int(e) for e in self.arguments[1].split('.')) |
| 405 | + # Replace the first two arguments (deprecated version and removed version) |
| 406 | + # with a single tuple of both versions. |
| 407 | + version_deprecated = self.arguments[0] |
| 408 | + version_removed = self.arguments.pop(1) |
| 409 | + self.arguments[0] = version_deprecated, version_removed |
| 410 | + |
| 411 | + # Set the label based on if we have reached the removal version |
| 412 | + current_version = tuple(map(int, self.config.version.split('.'))) |
| 413 | + removed_version = tuple(map(int, version_removed.split('.'))) |
414 | 414 | if current_version < removed_version:
|
415 |
| - label = self._deprecated_label |
416 |
| - else: |
417 |
| - label = self._removed_label |
418 |
| - |
419 |
| - text = label.format(deprecated=self.arguments[0], removed=self.arguments[1]) |
420 |
| - if len(self.arguments) == 3: |
421 |
| - inodes, messages = self.state.inline_text(self.arguments[2], |
422 |
| - self.lineno+1) |
423 |
| - para = nodes.paragraph(self.arguments[2], '', *inodes, translatable=False) |
424 |
| - node.append(para) |
| 415 | + versionlabels[self.name] = self._deprecated_label |
| 416 | + versionlabel_classes[self.name] = 'deprecated' |
425 | 417 | else:
|
426 |
| - messages = [] |
427 |
| - if self.content: |
428 |
| - self.state.nested_parse(self.content, self.content_offset, node) |
429 |
| - if len(node): |
430 |
| - if isinstance(node[0], nodes.paragraph) and node[0].rawsource: |
431 |
| - content = nodes.inline(node[0].rawsource, translatable=True) |
432 |
| - content.source = node[0].source |
433 |
| - content.line = node[0].line |
434 |
| - content += node[0].children |
435 |
| - node[0].replace_self(nodes.paragraph('', '', content, translatable=False)) |
436 |
| - node[0].insert(0, nodes.inline('', '%s: ' % text, |
437 |
| - classes=['versionmodified'])) |
438 |
| - else: |
439 |
| - para = nodes.paragraph('', '', |
440 |
| - nodes.inline('', '%s.' % text, |
441 |
| - classes=['versionmodified']), |
442 |
| - translatable=False) |
443 |
| - node.append(para) |
444 |
| - self.env.get_domain('changeset').note_changeset(node) |
445 |
| - return [node] + messages |
| 418 | + versionlabels[self.name] = self._removed_label |
| 419 | + versionlabel_classes[self.name] = 'removed' |
| 420 | + try: |
| 421 | + return super().run() |
| 422 | + finally: |
| 423 | + # reset versionlabels and versionlabel_classes |
| 424 | + versionlabels[self.name] = '' |
| 425 | + versionlabel_classes[self.name] = '' |
446 | 426 |
|
447 | 427 |
|
448 | 428 | # Support for including Misc/NEWS
|
|
0 commit comments