/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/doc_generate/autodoc_rstx.py

  • Committer: Alexander Belchenko
  • Date: 2007-08-07 14:56:50 UTC
  • mto: This revision was merged to the branch mainline in revision 2685.
  • Revision ID: bialix@ukr.net-20070807145650-jq9ss66genvith0n
rst2html: workaround for IE bug with id="tags"

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright 2006-2007 Canonical Ltd.
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
 
"""Generate reStructuredText source for the User Reference Manual.
 
17
"""Generate ReStructuredText source for the User Reference Manual.
18
18
Loosely based on the manpage generator autodoc_man.py.
19
19
 
20
 
Written by the Bazaar community.
 
20
Written by Alexander Belchenko and the Bazaar community.
21
21
"""
22
22
 
23
23
import os
24
24
import sys
 
25
import textwrap
25
26
import time
26
27
 
27
28
import bzrlib
28
29
import bzrlib.help
29
30
import bzrlib.help_topics
30
31
import bzrlib.commands
31
 
import bzrlib.osutils
32
32
 
33
33
 
34
34
def get_filename(options):
46
46
             "timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
47
47
             "version": bzrlib.__version__,
48
48
             }
49
 
    nominated_filename = getattr(options, 'filename', None)
50
 
    if nominated_filename is None:
51
 
        topic_dir = None
52
 
    else:
53
 
        topic_dir = bzrlib.osutils.dirname(nominated_filename)
54
49
    outfile.write(rstx_preamble % params)
55
50
    outfile.write(rstx_head % params)
56
 
    outfile.write(_get_body(params, topic_dir))
 
51
    outfile.write(_get_body(params))
57
52
    outfile.write(rstx_foot % params)
58
53
 
59
54
 
60
 
def _get_body(params, topic_dir):
 
55
def _get_body(params):
61
56
    """Build the manual content."""
62
57
    from bzrlib.help_topics import SECT_CONCEPT, SECT_LIST, SECT_PLUGIN
63
58
    registry = bzrlib.help_topics.topic_registry
64
59
    result = []
65
 
    result.append(_get_section(registry, SECT_CONCEPT, "Concepts",
66
 
        output_dir=topic_dir))
67
 
    result.append(_get_section(registry, SECT_LIST, "Lists",
68
 
        output_dir=topic_dir))
69
 
    result.append(_get_commands_section(registry, output_dir=topic_dir))
 
60
    result.append(_get_section(registry, SECT_CONCEPT, "Concepts"))
 
61
    result.append(_get_section(registry, SECT_LIST, "Lists"))
 
62
    result.append(_get_commands_section(registry))
 
63
    #result.append(_get_section(registry, SECT_PLUGIN, "Core Plug-ins"))
70
64
    return "\n".join(result)
71
65
 
72
66
 
73
 
def _get_section(registry, section, title, hdg_level1="#", hdg_level2="=",
74
 
        output_dir=None):
75
 
    """Build the manual part from topics matching that section.
76
 
    
77
 
    If output_dir is not None, topics are dumped into text files there
78
 
    during processing, as well as being included in the return result.
79
 
    """
80
 
    file_per_topic = output_dir is not None
81
 
    lines = [title, hdg_level1 * len(title), ""]
82
 
    if file_per_topic:
83
 
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
84
 
 
 
67
def _get_section(registry, section, title, hdg_level1="=", hdg_level2="-"):
 
68
    """Build the manual part from topics matching that section."""
85
69
    topics = sorted(registry.get_topics_for_section(section))
 
70
    lines = [title, hdg_level1 * len(title), ""]
86
71
    for topic in topics:
87
72
        help = registry.get_detail(topic)
88
 
        heading, text = help.split("\n", 1)
89
 
        if not text.startswith(hdg_level2):
90
 
            underline = hdg_level2 * len(heading)
91
 
            help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
92
 
        else:
93
 
            help = "%s\n%s\n\n" % (heading, text)
94
 
        if file_per_topic:
95
 
            topic_id = _dump_text(output_dir, topic, help)
96
 
            lines.append("   %s" % topic_id)
97
 
        else:
98
 
            lines.append(help)
99
 
 
 
73
        heading,text = help.split("\n", 1)
 
74
        lines.append(heading)
 
75
        lines.append(hdg_level2 * len(heading))
 
76
        lines.append(text)
 
77
        lines.append('')
100
78
    return "\n" + "\n".join(lines) + "\n"
101
79
 
102
80
 
103
 
def _get_commands_section(registry, title="Commands", hdg_level1="#",
104
 
        hdg_level2="=", output_dir=None):
105
 
    """Build the commands reference section of the manual."""
106
 
    file_per_topic = output_dir is not None
 
81
def _get_commands_section(registry, title="Commands", hdg_level1="=",
 
82
                          hdg_level2="-"):
 
83
    """Build the comands reference section of the manual."""
107
84
    lines = [title, hdg_level1 * len(title), ""]
108
 
    if file_per_topic:
109
 
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
110
 
 
111
85
    cmds = sorted(bzrlib.commands.builtin_command_names())
112
86
    for cmd_name in cmds:
113
87
        cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
114
88
        if cmd_object.hidden:
115
89
            continue
116
90
        heading = cmd_name
117
 
        underline = hdg_level2 * len(heading)
118
 
        text = cmd_object.get_help_text(plain=False, see_also_as_links=True)
119
 
        help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
120
 
        if file_per_topic:
121
 
            topic_id = _dump_text(output_dir, cmd_name, help)
122
 
            lines.append("   %s" % topic_id)
123
 
        else:
124
 
            lines.append(help)
125
 
 
 
91
        text = cmd_object.get_help_text(plain=False)
 
92
        lines.append(heading)
 
93
        lines.append(hdg_level2 * len(heading))
 
94
        lines.append(text)
 
95
        lines.append('')
126
96
    return "\n" + "\n".join(lines) + "\n"
127
97
 
128
98
 
129
 
def _dump_text(output_dir, topic, text):
130
 
    """Dump text for a topic to a file."""
131
 
    topic_id = "%s-%s" % (topic, "help")
132
 
    filename = bzrlib.osutils.pathjoin(output_dir, topic_id + ".txt")
133
 
    f =  open(filename, "w")
134
 
    f.writelines(text)
135
 
    f.close()
136
 
    return topic_id
137
 
 
138
 
 
139
99
##
140
100
# TEMPLATES
141
101
 
150
110
 
151
111
 
152
112
rstx_head = """\
153
 
#####################
 
113
=====================
154
114
Bazaar User Reference
155
 
#####################
 
115
=====================
 
116
 
 
117
:Version:   %(version)s
 
118
:Generated: %(datestamp)s
 
119
 
 
120
.. contents::
 
121
 
 
122
-----
156
123
 
157
124
About This Manual
158
 
#################
 
125
=================
159
126
 
160
127
This manual is generated from Bazaar's online help. To use
161
128
the online help system, try the following commands.
178
145
 
179
146
The following web sites provide further information on Bazaar:
180
147
 
181
 
:Home page:                     http://bazaar.canonical.com/
182
 
:Official docs:                 http://doc.bazaar.canonical.com/
 
148
:Home page:                     http://www.bazaar-vcs.org/
 
149
:Official docs:                 http://doc.bazaar-vcs.org/
183
150
:Launchpad:                     https://launchpad.net/bzr/
184
151
"""
185
152