Preserve filename and line number for meta nodes

This commit is contained in:
Takeshi KOMIYA 2016-08-22 15:53:20 +09:00
parent 97c6cc4e10
commit e1e5ae4b65
2 changed files with 21 additions and 5 deletions

View File

@ -9,7 +9,9 @@
from docutils import nodes
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):
@ -35,5 +37,23 @@ class Figure(images.Figure):
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):
directives.register_directive('figure', Figure)
directives.register_directive('meta', Meta)

View File

@ -31,7 +31,6 @@ from docutils.core import Publisher
from docutils.utils import Reporter, relative_path, get_source_line
from docutils.parsers.rst import roles, directives
from docutils.parsers.rst.languages import en as english
from docutils.parsers.rst.directives.html import MetaBody
from docutils.frontend import OptionParser
from sphinx import addnodes
@ -776,9 +775,6 @@ class BuildEnvironment:
doctree.settings.warning_stream = None
doctree.settings.env = 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
self.temp_data.clear()