Extract translatable messages from a document tree.
(doctree: Element)
| 317 | |
| 318 | |
| 319 | def extract_messages(doctree: Element) -> Iterable[tuple[Element, str]]: |
| 320 | """Extract translatable messages from a document tree.""" |
| 321 | for node in doctree.findall(is_translatable): |
| 322 | if isinstance(node, addnodes.translatable): |
| 323 | for msg in node.extract_original_messages(): |
| 324 | yield node, msg # type: ignore[misc] |
| 325 | continue |
| 326 | if isinstance(node, LITERAL_TYPE_NODES): |
| 327 | msg = node.rawsource |
| 328 | if not msg: |
| 329 | msg = node.astext() |
| 330 | elif isinstance(node, nodes.image): |
| 331 | if node.get('alt'): |
| 332 | yield node, node['alt'] |
| 333 | if node.get('translatable'): |
| 334 | image_uri = node.get('original_uri', node['uri']) |
| 335 | msg = f'.. image:: {image_uri}' |
| 336 | else: |
| 337 | msg = '' |
| 338 | elif isinstance(node, nodes.meta): |
| 339 | msg = node['content'] |
| 340 | else: |
| 341 | text = node.rawsource # type: ignore[attr-defined] |
| 342 | msg = _clean_extracted_message(text) |
| 343 | |
| 344 | # XXX nodes rendering empty are likely a bug in sphinx.addnodes |
| 345 | if msg: |
| 346 | yield node, msg # type: ignore[misc] |
| 347 | |
| 348 | |
| 349 | def get_node_source(node: Element) -> str: |
searching dependent graphs…