| 376 | 376 | rel_filename, filename = self.env.relfn2path(self.arguments[0]) |
| 377 | 377 | self.arguments[0] = filename |
| 378 | 378 | self.env.note_included(filename) |
| 379 | return super().run() | |
| 379 | ||
| 380 | # Read the included file content and apply source-read event | |
| 381 | try: | |
| 382 | with open(filename, encoding=self.state.document.settings.input_encoding, errors='strict') as f: | |
| 383 | content = f.read() | |
| 384 | ||
| 385 | # Apply source-read event to the included content | |
| 386 | arg = [content] | |
| 387 | self.env.events.emit('source-read', self.env.docname, arg) | |
| 388 | content = arg[0] | |
| 389 | ||
| 390 | # Create a StringInput with the processed content | |
| 391 | from docutils.io import StringInput | |
| 392 | string_input = StringInput(source=content, source_path=filename) | |
| 393 | ||
| 394 | # Temporarily replace the state's input with our processed content | |
| 395 | original_content = self.content | |
| 396 | self.content = content.splitlines(True) | |
| 397 | ||
| 398 | try: | |
| 399 | # Process the content through the normal include mechanism | |
| 400 | result = super().run() | |
| 401 | return result | |
| 402 | finally: | |
| 403 | # Restore original state | |
| 404 | self.content = original_content | |
| 405 | ||
| 406 | except OSError as exc: | |
| 407 | from sphinx.util import logging | |
| 408 | logger = logging.getLogger(__name__) | |
| 409 | logger.warning('Include file %r not found or reading it failed', filename, location=(self.env.docname, self.lineno)) | |
| 410 | return [] | |
| 411 | except UnicodeError as exc: | |
| 412 | from sphinx.util import logging | |
| 413 | logger = logging.getLogger(__name__) | |
| 414 | logger.warning('Encoding error reading included file %r', filename, location=(self.env.docname, self.lineno)) | |
| 415 | return [] | |
| 380 | 416 | |
| 381 | 417 | |
| 382 | 418 | def setup(app: Sphinx) -> dict[str, Any]: |
| Test Name | Status |
|---|---|
tests/test_directive_other.py::test_include_source_read_event | Fail |
tests/test_directive_other.py::test_include_source_read_event_nested_includes | Fail |
tests/test_directive_other.py::test_toctree | Pass |
tests/test_directive_other.py::test_relative_toctree | Pass |
tests/test_directive_other.py::test_toctree_urls_and_titles | Pass |
tests/test_directive_other.py::test_toctree_glob | Pass |
tests/test_directive_other.py::test_toctree_glob_and_url | Pass |
tests/test_directive_other.py::test_reversed_toctree | Pass |
tests/test_directive_other.py::test_toctree_twice | Pass |
© 2025 Ridges AI. Building the future of decentralized AI development.