root/galaxy-central/lib/galaxy/util/docutils_ext/htmlfrag.py

リビジョン 2, 5.7 KB (コミッタ: hatakeyama, 14 年 前)

import galaxy-central

行番号 
1# Author: Ollie Rutherfurd
2# Contact: oliver@rutherfurd.net
3# Revision: $Revision: 2884 $
4# Date: $Date: 2004-12-08 20:49:05 +0100 (Wed, 08 Dec 2004) $
5# Copyright: This module has been placed in the public domain.
6
7"""
8Simple .ht (HyperText Template) document tree Writer.
9
10.ht tmeplate files are essentially normal HTML, with
11an option set of RFC 2822-like headers at the top of
12the file. There must be at least one blank line between
13the last header and the start of the body HTML.
14
15See http://ht2html.sf.net/ for more information on
16.ht files and ht2html..
17"""
18
19__docformat__ = 'reStructuredText'
20
21import os
22from docutils import nodes
23from docutils import writers
24from docutils import frontend
25from docutils.writers.html4css1 import HTMLTranslator, utils
26
27
28class Writer(writers.Writer):
29
30    supported = ('htmlfrag',)
31    """Formats this writer supports."""
32
33    settings_spec = (
34        'HTML-Specific Options',
35        None,
36        (('Specify a stylesheet URL, used verbatim.  Default is '
37          '"default.css".  Overrides --stylesheet-path.',
38          ['--stylesheet'],
39          {'default': 'default.css', 'metavar': '<URL>',
40           'overrides': 'stylesheet_path'}),
41         ('Specify a stylesheet file, relative to the current working '
42          'directory.  The path is adjusted relative to the output HTML '
43          'file.  Overrides --stylesheet.',
44          ['--stylesheet-path'],
45          {'metavar': '<file>', 'overrides': 'stylesheet'}),
46         ('Link to the stylesheet in the output HTML file.  This is the '
47          'default.',
48          ['--link-stylesheet'],
49          {'dest': 'embed_stylesheet', 'action': 'store_false',
50           'validator': frontend.validate_boolean}),
51         ('Embed the stylesheet in the output HTML file.  The stylesheet '
52          'file must be accessible during processing (--stylesheet-path is '
53          'recommended).  Default: link the stylesheet, do not embed it.',
54          ['--embed-stylesheet'],
55          {'action': 'store_true', 'validator': frontend.validate_boolean}),
56         ('Specify the initial header level.  Default is 1 for "<h1>".  '
57          'Does not affect document title & subtitle (see --no-doc-title).',
58          ['--initial-header-level'],
59          {'choices': '1 2 3 4 5 6'.split(), 'default': '3',
60           'metavar': '<level>'}),
61         ('Specify the maximum width (in characters) for one-column field '
62          'names.  Longer field names will span an entire row of the table '
63          'used to render the field list.  Default is 14 characters.  '
64          'Use 0 for "no limit".',
65          ['--field-name-limit'],
66          {'default': 14, 'metavar': '<level>',
67           'validator': frontend.validate_nonnegative_int}),
68         ('Specify the maximum width (in characters) for options in option '
69          'lists.  Longer options will span an entire row of the table used '
70          'to render the option list.  Default is 14 characters.  '
71          'Use 0 for "no limit".',
72          ['--option-limit'],
73          {'default': 14, 'metavar': '<level>',
74           'validator': frontend.validate_nonnegative_int}),
75         ('Format for footnote references: one of "superscript" or '
76          '"brackets".  Default is "brackets".',
77          ['--footnote-references'],
78          {'choices': ['superscript', 'brackets'], 'default': 'brackets',
79           'metavar': '<format>',
80           'overrides': 'trim_footnote_reference_space'}),
81         ('Format for block quote attributions: one of "dash" (em-dash '
82          'prefix), "parentheses"/"parens", or "none".  Default is "dash".',
83          ['--attribution'],
84          {'choices': ['dash', 'parentheses', 'parens', 'none'],
85           'default': 'dash', 'metavar': '<format>'}),
86         ('Remove extra vertical whitespace between items of bullet lists '
87          'and enumerated lists, when list items are "simple" (i.e., all '
88          'items each contain one paragraph and/or one "simple" sublist '
89          'only).  Default: enabled.',
90          ['--compact-lists'],
91          {'default': 1, 'action': 'store_true',
92           'validator': frontend.validate_boolean}),
93         ('Disable compact simple bullet and enumerated lists.',
94          ['--no-compact-lists'],
95          {'dest': 'compact_lists', 'action': 'store_false'}),
96         ('Omit the XML declaration.  Use with caution.',
97          ['--no-xml-declaration'],
98          {'dest': 'xml_declaration', 'default': 1, 'action': 'store_false',
99           'validator': frontend.validate_boolean}),
100         ('Scramble email addresses to confuse harvesters.  '
101          'For example, "abc@example.org" will become '
102          '``<a href="mailto:%61%62%63%40...">abc at example dot org</a>``.',
103          ['--cloak-email-addresses'],
104          {'action': 'store_true', 'validator': frontend.validate_boolean}),))
105
106
107    relative_path_settings = ('stylesheet_path',)
108
109    output = None
110
111    def __init__(self):
112        writers.Writer.__init__(self)
113        self.translator_class = HTMLFragTranslator
114
115    def translate(self):
116        visitor = self.translator_class(self.document)
117        self.document.walkabout(visitor)
118        self.output = visitor.astext()
119        self.stylesheet = visitor.stylesheet
120        self.body = visitor.body
121
122
123class HTMLFragTranslator(HTMLTranslator):
124
125    def __init__(self, document):
126        # I don't believe we can embed any style content
127        # the header, so always link to the stylesheet.
128        document.settings.embed_stylesheet = 0
129        HTMLTranslator.__init__(self, document)
130
131    def astext(self):
132        # kludge! want footer, but not '</body></html>'
133        body = self.body_pre_docinfo + self.docinfo + self.body + \
134                self.body_suffix[:-1]
135        return ''.join(body)
136
137# :indentSize=4:lineSeparator=\n:noTabs=true:tabSize=4:
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。