summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2016-08-22 15:53:20 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2016-09-01 23:31:45 +0900
commite1e5ae4b651cb7ad391fb537459155b4a10bade1 (patch)
tree613797f0a3f71a2c403f1c688e144fd3d7edb14e
parent97c6cc4e1057dfa91dc1caf1f14d49f5320d7680 (diff)
downloadsphinx-git-e1e5ae4b651cb7ad391fb537459155b4a10bade1.tar.gz
Preserve filename and line number for meta nodes
-rw-r--r--sphinx/directives/patches.py22
-rw-r--r--sphinx/environment.py4
2 files changed, 21 insertions, 5 deletions
diff --git a/sphinx/directives/patches.py b/sphinx/directives/patches.py
index a4a046917..6a88db09a 100644
--- a/sphinx/directives/patches.py
+++ b/sphinx/directives/patches.py
@@ -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)
diff --git a/sphinx/environment.py b/sphinx/environment.py
index 95ca3904b..7947838f4 100644
--- a/sphinx/environment.py
+++ b/sphinx/environment.py
@@ -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()