buildframework/helium/external/python/lib/common/docutils-0.5-py2.5.egg/docutils/transforms/writer_aux.py
author wbernard
Wed, 23 Dec 2009 19:29:07 +0200
changeset 179 d8ac696cc51f
permissions -rw-r--r--
helium_7.0-r14027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
179
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     1
# $Id: writer_aux.py 5174 2007-05-31 00:01:52Z wiemann $
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     2
# Author: Lea Wiemann <LeWiemann@gmail.com>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     3
# Copyright: This module has been placed in the public domain.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     4
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     5
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     6
Auxiliary transforms mainly to be used by Writer components.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     7
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     8
This module is called "writer_aux" because otherwise there would be
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     9
conflicting imports like this one::
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    10
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    11
    from docutils import writers
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    12
    from docutils.transforms import writers
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    13
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    14
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    15
__docformat__ = 'reStructuredText'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    16
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    17
from docutils import nodes, utils, languages
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    18
from docutils.transforms import Transform
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    19
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    20
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    21
class Compound(Transform):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    22
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    23
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    24
    Flatten all compound paragraphs.  For example, transform ::
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    25
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    26
        <compound>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    27
            <paragraph>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    28
            <literal_block>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    29
            <paragraph>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    30
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    31
    into ::
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    32
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    33
        <paragraph>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    34
        <literal_block classes="continued">
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    35
        <paragraph classes="continued">
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    36
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    37
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    38
    default_priority = 910
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    39
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    40
    def apply(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    41
        for compound in self.document.traverse(nodes.compound):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    42
            first_child = 1
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    43
            for child in compound:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    44
                if first_child:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    45
                    if not isinstance(child, nodes.Invisible):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    46
                        first_child = 0
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    47
                else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    48
                    child['classes'].append('continued')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    49
            # Substitute children for compound.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    50
            compound.replace_self(compound[:])
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    51
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    52
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    53
class Admonitions(Transform):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    54
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    55
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    56
    Transform specific admonitions, like this:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    57
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    58
        <note>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    59
            <paragraph>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    60
                 Note contents ...
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    61
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    62
    into generic admonitions, like this::
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    63
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    64
        <admonition classes="note">
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    65
            <title>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    66
                Note
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    67
            <paragraph>
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    68
                Note contents ...
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    69
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    70
    The admonition title is localized.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    71
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    72
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    73
    default_priority = 920
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    74
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    75
    def apply(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    76
        lcode = self.document.settings.language_code
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    77
        language = languages.get_language(lcode)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    78
        for node in self.document.traverse(nodes.Admonition):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    79
            node_name = node.__class__.__name__
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    80
            # Set class, so that we know what node this admonition came from.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    81
            node['classes'].append(node_name)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    82
            if not isinstance(node, nodes.admonition):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    83
                # Specific admonition.  Transform into a generic admonition.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    84
                admonition = nodes.admonition(node.rawsource, *node.children,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    85
                                              **node.attributes)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    86
                title = nodes.title('', language.labels[node_name])
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    87
                admonition.insert(0, title)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    88
                node.replace_self(admonition)