Skip to content

Commit a1639a7

Browse files
authored
Refactor render_partial() to do less work (#13664)
1 parent e1bd9cb commit a1639a7

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

sphinx/builders/html/__init__.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from urllib.parse import quote
1818

1919
import docutils.readers.doctree
20+
import docutils.utils
2021
import jinja2.exceptions
2122
from docutils import nodes
2223
from docutils.core import Publisher
@@ -429,12 +430,18 @@ def render_partial(self, node: Node | None) -> dict[str, str]:
429430
"""Utility: Render a lone doctree node."""
430431
if node is None:
431432
return {'fragment': ''}
432-
433-
doc = new_document('<partial node>')
433+
pub = self._publisher
434+
doc = docutils.utils.new_document('<partial node>', pub.settings)
434435
doc.append(node)
435-
self._publisher.set_source(doc)
436-
self._publisher.publish()
437-
return self._publisher.writer.parts
436+
doc.transformer.populate_from_components((pub.reader, pub.parser, pub.writer))
437+
doc.transformer.apply_transforms()
438+
visitor: HTML5Translator = self.create_translator(doc, self) # type: ignore[assignment]
439+
doc.walkabout(visitor)
440+
parts = {
441+
'fragment': ''.join(visitor.fragment),
442+
'title': ''.join(visitor.title),
443+
}
444+
return parts
438445

439446
def prepare_writing(self, docnames: Set[str]) -> None:
440447
# create the search indexer

0 commit comments

Comments
 (0)