| # $Id: writer_aux.py 5174 2007-05-31 00:01:52Z wiemann $ | |
| # Author: Lea Wiemann <[email protected]> | |
| # Copyright: This module has been placed in the public domain. | |
| """ | |
| Auxiliary transforms mainly to be used by Writer components. | |
| This module is called "writer_aux" because otherwise there would be | |
| conflicting imports like this one:: | |
| from docutils import writers | |
| from docutils.transforms import writers | |
| """ | |
| __docformat__ = 'reStructuredText' | |
| from docutils import nodes, utils, languages | |
| from docutils.transforms import Transform | |
| class Compound(Transform): | |
| """ | |
| Flatten all compound paragraphs. For example, transform :: | |
| <compound> | |
| <paragraph> | |
| <literal_block> | |
| <paragraph> | |
| into :: | |
| <paragraph> | |
| <literal_block classes="continued"> | |
| <paragraph classes="continued"> | |
| """ | |
| default_priority = 910 | |
| def apply(self): | |
| for compound in self.document.traverse(nodes.compound): | |
| first_child = 1 | |
| for child in compound: | |
| if first_child: | |
| if not isinstance(child, nodes.Invisible): | |
| first_child = 0 | |
| else: | |
| child['classes'].append('continued') | |
| # Substitute children for compound. | |
| compound.replace_self(compound[:]) | |
| class Admonitions(Transform): | |
| """ | |
| Transform specific admonitions, like this: | |
| <note> | |
| <paragraph> | |
| Note contents ... | |
| into generic admonitions, like this:: | |
| <admonition classes="note"> | |
| <title> | |
| Note | |
| <paragraph> | |
| Note contents ... | |
| The admonition title is localized. | |
| """ | |
| default_priority = 920 | |
| def apply(self): | |
| lcode = self.document.settings.language_code | |
| language = languages.get_language(lcode) | |
| for node in self.document.traverse(nodes.Admonition): | |
| node_name = node.__class__.__name__ | |
| # Set class, so that we know what node this admonition came from. | |
| node['classes'].append(node_name) | |
| if not isinstance(node, nodes.admonition): | |
| # Specific admonition. Transform into a generic admonition. | |
| admonition = nodes.admonition(node.rawsource, *node.children, | |
| **node.attributes) | |
| title = nodes.title('', language.labels[node_name]) | |
| admonition.insert(0, title) | |
| node.replace_self(admonition) |