| """Docutils-native XML and pseudo-XML writers.""" |
| |
| from __future__ import annotations |
| |
| from typing import TYPE_CHECKING, Any |
| |
| from docutils.writers.docutils_xml import Writer as BaseXMLWriter |
| |
| if TYPE_CHECKING: |
| from sphinx.builders import Builder |
| |
| |
| class XMLWriter(BaseXMLWriter): |
| output: str |
| |
| def __init__(self, builder: Builder) -> None: |
| super().__init__() |
| self.builder = builder |
| |
| # A lambda function to generate translator lazily |
| self.translator_class = lambda document: self.builder.create_translator(document) |
| |
| def translate(self, *args: Any, **kwargs: Any) -> None: |
| self.document.settings.newlines = \ |
| self.document.settings.indents = \ |
| self.builder.env.config.xml_pretty |
| self.document.settings.xml_declaration = True |
| self.document.settings.doctype_declaration = True |
| return super().translate() |
| |
| |
| class PseudoXMLWriter(BaseXMLWriter): |
| |
| supported = ('pprint', 'pformat', 'pseudoxml') |
| """Formats this writer supports.""" |
| |
| config_section = 'pseudoxml writer' |
| config_section_dependencies = ('writers',) |
| |
| output: str |
| """Final translated form of `document`.""" |
| |
| def __init__(self, builder: Builder) -> None: |
| super().__init__() |
| self.builder = builder |
| |
| def translate(self) -> None: |
| self.output = self.document.pformat() |
| |
| def supports(self, format: str) -> bool: |
| """This writer supports all format-specific elements.""" |
| return True |