1212from pathlib import Path
1313from warnings import catch_warnings
1414
15+ from docutils .writers import pseudoxml
16+ from docutils .io import FileOutput
1517from sphinx .application import Sphinx
1618from sphinx .util .docutils import docutils_namespace
1719from sphinx .testing .restructuredtext import parse as sphinx_parse
@@ -79,6 +81,13 @@ class MinimalSphinxTemplate(DocumentTemplate):
7981register_template ('minimal_sphinx' , MinimalSphinxTemplate )
8082
8183
84+ def write_pseudoxml (docutils_doctree , out_filepath ):
85+ out_filepath .parent .mkdir (parents = True , exist_ok = True )
86+ pxml_writer = pseudoxml .Writer ()
87+ output = FileOutput (encoding = 'utf-8' , destination_path = out_filepath )
88+ pxml_writer .write (docutils_doctree , output )
89+
90+
8291def render_md_file (md_path , out_filename , reference_path ):
8392 reader = CommonMarkReader ()
8493 doctree = reader .parse (md_path )
@@ -87,10 +96,13 @@ def render_md_file(md_path, out_filename, reference_path):
8796
8897
8998def render_rst_file (rst_path , out_filename , reference_path ):
99+ output_dir = TEST_DIR / 'rst_output'
90100 reader = ReStructuredTextReader ()
91101 doctree = reader .parse (rst_path )
92- return _render_file (rst_path , doctree , TEST_DIR / 'rst_output' ,
93- out_filename , reference_path )
102+ pseudoxml_path = (output_dir / out_filename / out_filename ).with_suffix ('.pxml' )
103+ write_pseudoxml (doctree .source .node , pseudoxml_path )
104+ return _render_file (rst_path , doctree , output_dir , out_filename ,
105+ reference_path )
94106
95107
96108def render_sphinx_rst_file (rst_path , out_filename , reference_path ):
@@ -103,6 +115,8 @@ def render_sphinx_rst_file(rst_path, out_filename, reference_path):
103115 contents = rst_file .read ()
104116 sphinx_doctree = sphinx_parse (app , contents )
105117 doctree = from_doctree (sphinx_doctree )
118+ pseudoxml_path = (output_dir / out_filename / out_filename ).with_suffix ('.pxml' )
119+ write_pseudoxml (sphinx_doctree , pseudoxml_path )
106120 docinfo = sphinx_doctree .settings .env .metadata ['index' ]
107121 warnings = docinfo .get ('warnings' , '' ).splitlines ()
108122 return _render_file (rst_path , doctree , output_dir , out_filename ,
0 commit comments