summaryrefslogtreecommitdiffstats
path: root/sphinx/testing/restructuredtext.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/testing/restructuredtext.py')
-rw-r--r--sphinx/testing/restructuredtext.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/sphinx/testing/restructuredtext.py b/sphinx/testing/restructuredtext.py
new file mode 100644
index 0000000..1f89336
--- /dev/null
+++ b/sphinx/testing/restructuredtext.py
@@ -0,0 +1,35 @@
+from os import path
+
+from docutils import nodes
+from docutils.core import publish_doctree
+
+from sphinx.application import Sphinx
+from sphinx.io import SphinxStandaloneReader
+from sphinx.parsers import RSTParser
+from sphinx.util.docutils import sphinx_domains
+
+
+def parse(app: Sphinx, text: str, docname: str = 'index') -> nodes.document:
+ """Parse a string as reStructuredText with Sphinx application."""
+ try:
+ app.env.temp_data['docname'] = docname
+ reader = SphinxStandaloneReader()
+ reader.setup(app)
+ parser = RSTParser()
+ parser.set_application(app)
+ with sphinx_domains(app.env):
+ return publish_doctree(
+ text,
+ path.join(app.srcdir, docname + '.rst'),
+ reader=reader,
+ parser=parser,
+ settings_overrides={
+ 'env': app.env,
+ 'gettext_compact': True,
+ 'input_encoding': 'utf-8',
+ 'output_encoding': 'unicode',
+ 'traceback': True,
+ },
+ )
+ finally:
+ app.env.temp_data.pop('docname', None)