buildframework/helium/external/python/lib/common/docutils-0.5-py2.5.egg/docutils/writers/pep_html/__init__.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: __init__.py 4564 2006-05-21 20:44:42Z wiemann $
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     2
# Author: David Goodger <goodger@python.org>
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
PEP HTML Writer.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     7
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     8
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     9
__docformat__ = 'reStructuredText'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    10
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    11
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    12
import sys
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    13
import os
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    14
import os.path
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    15
import codecs
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    16
import docutils
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    17
from docutils import frontend, nodes, utils, writers
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    18
from docutils.writers import html4css1
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 Writer(html4css1.Writer):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    22
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    23
    default_stylesheet = 'pep.css'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    24
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    25
    default_stylesheet_path = utils.relative_path(
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    26
        os.path.join(os.getcwd(), 'dummy'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    27
        os.path.join(os.path.dirname(__file__), default_stylesheet))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    28
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    29
    default_template = 'template.txt'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    30
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    31
    default_template_path = utils.relative_path(
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    32
        os.path.join(os.getcwd(), 'dummy'),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    33
        os.path.join(os.path.dirname(__file__), default_template))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    34
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    35
    settings_spec = html4css1.Writer.settings_spec + (
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    36
        'PEP/HTML-Specific Options',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    37
        'For the PEP/HTML writer, the default value for the --stylesheet-path '
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    38
        'option is "%s", and the default value for --template is "%s". '
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    39
        'See HTML-Specific Options above.'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    40
        % (default_stylesheet_path, default_template_path),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    41
        (('Python\'s home URL.  Default is "http://www.python.org".',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    42
          ['--python-home'],
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    43
          {'default': 'http://www.python.org', 'metavar': '<URL>'}),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    44
         ('Home URL prefix for PEPs.  Default is "." (current directory).',
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    45
          ['--pep-home'],
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    46
          {'default': '.', 'metavar': '<URL>'}),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    47
         # For testing.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    48
         (frontend.SUPPRESS_HELP,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    49
          ['--no-random'],
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    50
          {'action': 'store_true', 'validator': frontend.validate_boolean}),))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    51
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    52
    settings_default_overrides = {'stylesheet_path': default_stylesheet_path,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    53
                                  'template': default_template_path,}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    54
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    55
    relative_path_settings = (html4css1.Writer.relative_path_settings
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    56
                              + ('template',))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    57
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    58
    config_section = 'pep_html writer'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    59
    config_section_dependencies = ('writers', 'html4css1 writer')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    60
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    61
    def __init__(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    62
        html4css1.Writer.__init__(self)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    63
        self.translator_class = HTMLTranslator
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    64
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    65
    def interpolation_dict(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    66
        subs = html4css1.Writer.interpolation_dict(self)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    67
        settings = self.document.settings
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    68
        pyhome = settings.python_home
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    69
        subs['pyhome'] = pyhome
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    70
        subs['pephome'] = settings.pep_home
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    71
        if pyhome == '..':
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    72
            subs['pepindex'] = '.'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    73
        else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    74
            subs['pepindex'] = pyhome + '/dev/peps'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    75
        index = self.document.first_child_matching_class(nodes.field_list)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    76
        header = self.document[index]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    77
        self.pepnum = header[0][1].astext()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    78
        subs['pep'] = self.pepnum
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    79
        if settings.no_random:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    80
            subs['banner'] = 0
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    81
        else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    82
            import random
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    83
            subs['banner'] = random.randrange(64)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    84
        try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    85
            subs['pepnum'] = '%04i' % int(self.pepnum)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    86
        except ValueError:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    87
            subs['pepnum'] = pepnum
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    88
        self.title = header[1][1].astext()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    89
        subs['title'] = self.title
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    90
        subs['body'] = ''.join(
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    91
            self.body_pre_docinfo + self.docinfo + self.body)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    92
        return subs
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    93
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    94
    def assemble_parts(self):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    95
        html4css1.Writer.assemble_parts(self)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    96
        self.parts['title'] = [self.title]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    97
        self.parts['pepnum'] = self.pepnum
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    98
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    99
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   100
class HTMLTranslator(html4css1.HTMLTranslator):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   101
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   102
    def depart_field_list(self, node):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   103
        html4css1.HTMLTranslator.depart_field_list(self, node)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   104
        if 'rfc2822' in node['classes']:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   105
             self.body.append('<hr />\n')