Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sphinx-doc/sphinx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2018-12-05 16:53:36 +0300
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2018-12-05 17:11:16 +0300
commit8a6179aa61ee17f234f7522b2d6f69ee9ff3d9bf (patch)
treec29060c0d67092d086b64dde05a8f0be1d2e7ce8 /sphinx/parsers.py
parentca793d35955d8625ed212cc26b104e69e837b588 (diff)
Process prolog and epilog on RSTParser (instead Input component)
Diffstat (limited to 'sphinx/parsers.py')
-rw-r--r--sphinx/parsers.py50
1 files changed, 31 insertions, 19 deletions
diff --git a/sphinx/parsers.py b/sphinx/parsers.py
index cf14d6ff6..ac95c1d4d 100644
--- a/sphinx/parsers.py
+++ b/sphinx/parsers.py
@@ -15,9 +15,11 @@ from docutils.parsers.rst import states
from docutils.statemachine import StringList
from docutils.transforms.universal import SmartQuotes
+from sphinx.util.rst import append_epilog, prepend_prolog
+
if False:
# For type annotation
- from typing import Any, Dict, List, Type # NOQA
+ from typing import Any, Dict, List, Type, Union # NOQA
from docutils import nodes # NOQA
from docutils.transforms import Transform # NOQA
from sphinx.application import Sphinx # NOQA
@@ -65,30 +67,40 @@ class RSTParser(docutils.parsers.rst.Parser, Parser):
# type: () -> List[Type[Transform]]
"""Sphinx's reST parser replaces a transform class for smart-quotes by own's
- refs: sphinx.io.SphinxStandaloneReader"""
+ refs: sphinx.io.SphinxStandaloneReader
+ """
transforms = super(RSTParser, self).get_transforms()
transforms.remove(SmartQuotes)
return transforms
def parse(self, inputstring, document):
- # type: (Any, nodes.document) -> None
- """Parse text and generate a document tree.
-
- This accepts StringList as an inputstring parameter.
- It enables to handle mixed contents (cf. :confval:`rst_prolog`) correctly.
- """
- if isinstance(inputstring, StringList):
- self.setup_parse(inputstring, document)
- self.statemachine = states.RSTStateMachine(
- state_classes=self.state_classes,
- initial_state=self.initial_state,
- debug=document.reporter.debug_flag)
- # Give inputstring directly to statemachine.
- self.statemachine.run(inputstring, document, inliner=self.inliner)
- self.finish_parse()
+ # type: (Union[str, StringList], nodes.document) -> None
+ """Parse text and generate a document tree."""
+ self.setup_parse(inputstring, document)
+ self.statemachine = states.RSTStateMachine(
+ state_classes=self.state_classes,
+ initial_state=self.initial_state,
+ debug=document.reporter.debug_flag)
+
+ # preprocess inputstring
+ if isinstance(inputstring, str):
+ lines = docutils.statemachine.string2lines(
+ inputstring, tab_width=document.settings.tab_width,
+ convert_whitespace=True)
+
+ inputlines = StringList(lines, document.current_source)
else:
- # otherwise, inputstring might be a string. It will be handled by superclass.
- super(RSTParser, self).parse(inputstring, document)
+ inputlines = inputstring
+
+ self.decorate(inputlines)
+ self.statemachine.run(inputlines, document, inliner=self.inliner)
+ self.finish_parse()
+
+ def decorate(self, content):
+ # type: (StringList) -> None
+ """Preprocess reST content before parsing."""
+ prepend_prolog(content, self.config.rst_prolog)
+ append_epilog(content, self.config.rst_epilog)
def setup(app):