summaryrefslogtreecommitdiff
path: root/sphinx/parsers.py
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2017-05-28 22:08:52 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2017-05-28 22:34:53 +0900
commit69cf328b8bdc0b2e9b6243bd0e6de2905d03637e (patch)
treeebe25f43fdf29e2be5f0d3cf5c75d9a6874c36f2 /sphinx/parsers.py
parent19e4462fd73e01dd6dd0c695cf9353153e8c54c8 (diff)
downloadsphinx-git-69cf328b8bdc0b2e9b6243bd0e6de2905d03637e.tar.gz
Add Sphinx own parser (refs: #3816)
Diffstat (limited to 'sphinx/parsers.py')
-rw-r--r--sphinx/parsers.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/sphinx/parsers.py b/sphinx/parsers.py
index 9aba947d3..d4123880c 100644
--- a/sphinx/parsers.py
+++ b/sphinx/parsers.py
@@ -10,9 +10,15 @@
"""
import docutils.parsers
+import docutils.parsers.rst
+from docutils.transforms.universal import SmartQuotes
+
+from sphinx.transforms import SphinxSmartQuotes
if False:
# For type annotation
+ from typing import Any, Dict, Type # NOQA
+ from docutils.transforms import Transform # NOQA
from sphinx.application import Sphinx # NOQA
@@ -47,3 +53,26 @@ class Parser(docutils.parsers.Parser):
self.env = app.env
self.warn = app.warn
self.info = app.info
+
+
+class RSTParser(docutils.parsers.rst.Parser):
+ """A reST parser customized for Sphinx."""
+
+ def get_transforms(self):
+ # type: () -> List[Type[Transform]]
+ """Sphinx's reST parser replaces a transform class for smart-quotes by own's"""
+ transforms = docutils.parsers.rst.Parser.get_transforms(self)
+ transforms.remove(SmartQuotes)
+ transforms.append(SphinxSmartQuotes)
+ return transforms
+
+
+def setup(app):
+ # type: (Sphinx) -> Dict[unicode, Any]
+ app.add_source_parser('*', RSTParser) # register as a special parser
+
+ return {
+ 'version': 'builtin',
+ 'parallel_read_safe': True,
+ 'parallel_write_safe': True,
+ }