mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Preserve filename and line number for meta nodes
This commit is contained in:
parent
97c6cc4e10
commit
e1e5ae4b65
@ -9,7 +9,9 @@
|
|||||||
|
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.parsers.rst import directives
|
from docutils.parsers.rst import directives
|
||||||
from docutils.parsers.rst.directives import images
|
from docutils.parsers.rst.directives import images, html
|
||||||
|
|
||||||
|
from sphinx import addnodes
|
||||||
|
|
||||||
|
|
||||||
class Figure(images.Figure):
|
class Figure(images.Figure):
|
||||||
@ -35,5 +37,23 @@ class Figure(images.Figure):
|
|||||||
return [figure_node]
|
return [figure_node]
|
||||||
|
|
||||||
|
|
||||||
|
class Meta(html.Meta):
|
||||||
|
def run(self):
|
||||||
|
env = self.state.document.settings.env
|
||||||
|
result = html.Meta.run(self)
|
||||||
|
for node in result:
|
||||||
|
if (isinstance(node, nodes.pending) and
|
||||||
|
isinstance(node.details['nodes'][0], html.MetaBody.meta)):
|
||||||
|
meta = node.details['nodes'][0]
|
||||||
|
meta.source = env.doc2path(env.docname)
|
||||||
|
meta.line = self.lineno
|
||||||
|
|
||||||
|
# docutils' meta nodes aren't picklable because the class is nested
|
||||||
|
meta.__class__ = addnodes.meta
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
directives.register_directive('figure', Figure)
|
directives.register_directive('figure', Figure)
|
||||||
|
directives.register_directive('meta', Meta)
|
||||||
|
@ -31,7 +31,6 @@ from docutils.core import Publisher
|
|||||||
from docutils.utils import Reporter, relative_path, get_source_line
|
from docutils.utils import Reporter, relative_path, get_source_line
|
||||||
from docutils.parsers.rst import roles, directives
|
from docutils.parsers.rst import roles, directives
|
||||||
from docutils.parsers.rst.languages import en as english
|
from docutils.parsers.rst.languages import en as english
|
||||||
from docutils.parsers.rst.directives.html import MetaBody
|
|
||||||
from docutils.frontend import OptionParser
|
from docutils.frontend import OptionParser
|
||||||
|
|
||||||
from sphinx import addnodes
|
from sphinx import addnodes
|
||||||
@ -776,9 +775,6 @@ class BuildEnvironment:
|
|||||||
doctree.settings.warning_stream = None
|
doctree.settings.warning_stream = None
|
||||||
doctree.settings.env = None
|
doctree.settings.env = None
|
||||||
doctree.settings.record_dependencies = None
|
doctree.settings.record_dependencies = None
|
||||||
for metanode in doctree.traverse(MetaBody.meta):
|
|
||||||
# docutils' meta nodes aren't picklable because the class is nested
|
|
||||||
metanode.__class__ = addnodes.meta
|
|
||||||
|
|
||||||
# cleanup
|
# cleanup
|
||||||
self.temp_data.clear()
|
self.temp_data.clear()
|
||||||
|
Loading…
Reference in New Issue
Block a user