~bzr-pqm/bzr/bzr.dev

2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
1
# Copyright 2006-2007 Canonical Ltd.
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1887.1.1 by Adeodato Simó
Do not separate paragraphs in the copyright statement with blank lines,
12
#
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
17
"""Generate ReStructuredText source for the User Reference Manual.
18
Loosely based on the manpage generator autodoc_man.py.
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
19
2677.1.4 by Alexander Belchenko
fixes after John's review
20
Written by the Bazaar community.
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
21
"""
22
23
import os
24
import sys
25
import textwrap
26
import time
27
28
import bzrlib
29
import bzrlib.help
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
30
import bzrlib.help_topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
31
import bzrlib.commands
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
32
import bzrlib.osutils
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
33
34
35
def get_filename(options):
36
    """Provides name of manual"""
37
    return "%s_man.txt" % (options.bzr_name)
38
39
40
def infogen(options, outfile):
41
    """Create manual in RSTX format"""
42
    t = time.time()
43
    tt = time.gmtime(t)
44
    params = \
45
           { "bzrcmd": options.bzr_name,
46
             "datestamp": time.strftime("%Y-%m-%d",tt),
47
             "timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
48
             "version": bzrlib.__version__,
49
             }
3089.3.17 by Ian Clatworthy
Fix case where filename not given
50
    nominated_filename = getattr(options, 'filename', None)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
51
    if nominated_filename is None:
52
        topic_dir = None
53
    else:
54
        topic_dir = bzrlib.osutils.dirname(nominated_filename)
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
55
    outfile.write(rstx_preamble % params)
56
    outfile.write(rstx_head % params)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
57
    outfile.write(_get_body(params, topic_dir))
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
58
    outfile.write(rstx_foot % params)
59
60
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
61
def _get_body(params, topic_dir):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
62
    """Build the manual content."""
63
    from bzrlib.help_topics import SECT_CONCEPT, SECT_LIST, SECT_PLUGIN
64
    registry = bzrlib.help_topics.topic_registry
65
    result = []
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
66
    result.append(_get_section(registry, SECT_CONCEPT, "Concepts",
67
        output_dir=topic_dir))
68
    result.append(_get_section(registry, SECT_LIST, "Lists",
69
        output_dir=topic_dir))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
70
    result.append(_get_commands_section(registry))
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
71
    #result.append(_get_section(registry, SECT_PLUGIN, "Standard Plug-ins"))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
72
    return "\n".join(result)
73
74
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
75
def _get_section(registry, section, title, hdg_level1="#", hdg_level2="=",
76
        output_dir=None):
77
    """Build the manual part from topics matching that section.
78
    
79
    If output_dir is not None, topics are dumped into text files there
80
    during processing, as well as being included in the return result.
81
    """
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
82
    topics = sorted(registry.get_topics_for_section(section))
83
    lines = [title, hdg_level1 * len(title), ""]
2677.1.4 by Alexander Belchenko
fixes after John's review
84
85
    # docutils treats section heading as implicit link target.
86
    # But in some cases topic and heading are different, e.g.:
87
    #
88
    # `bugs' vs. `Bug Trackers'
89
    # `working-tree' vs. `Working Trees'
90
    #
91
    # So for building proper cross-reference between topic names
92
    # and corresponding sections in document, we need provide
93
    # simple glue in the form:
94
    #
95
    # .. _topic: `heading`_
96
    links_glue = []
97
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
98
    for topic in topics:
99
        help = registry.get_detail(topic)
100
        heading,text = help.split("\n", 1)
101
        lines.append(heading)
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
102
        if not text.startswith(hdg_level2):
103
            lines.append(hdg_level2 * len(heading))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
104
        lines.append(text)
105
        lines.append('')
2677.1.4 by Alexander Belchenko
fixes after John's review
106
        # check that topic match heading
2677.1.2 by Alexander Belchenko
bzr_man: see also topics as cross-reference links
107
        if topic != heading.lower():
2677.1.4 by Alexander Belchenko
fixes after John's review
108
            links_glue.append((topic, heading))
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
109
        # dump the text if requested
110
        if output_dir is not None:
111
            out_file = bzrlib.osutils.pathjoin(output_dir, topic + ".txt")
112
            _dump_text(out_file, help)
2677.1.4 by Alexander Belchenko
fixes after John's review
113
114
    # provide links glue for topics that don't match headings
115
    lines.extend([".. _%s: `%s`_" % i for i in links_glue])
116
    lines.append('')
117
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
118
    return "\n" + "\n".join(lines) + "\n"
119
120
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
121
def _dump_text(filename, text):
122
    """Dump text to filename."""
123
    f =  open(filename, "w")
124
    f.writelines(text)
125
    f.close()
126
127
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
128
def _get_commands_section(registry, title="Commands", hdg_level1="#",
129
                          hdg_level2="="):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
130
    """Build the comands reference section of the manual."""
131
    lines = [title, hdg_level1 * len(title), ""]
132
    cmds = sorted(bzrlib.commands.builtin_command_names())
133
    for cmd_name in cmds:
134
        cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
135
        if cmd_object.hidden:
136
            continue
137
        heading = cmd_name
2677.1.2 by Alexander Belchenko
bzr_man: see also topics as cross-reference links
138
        text = cmd_object.get_help_text(plain=False, see_also_as_links=True)
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
139
        lines.append(heading)
140
        lines.append(hdg_level2 * len(heading))
141
        lines.append(text)
142
        lines.append('')
143
    return "\n" + "\n".join(lines) + "\n"
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
144
145
146
##
147
# TEMPLATES
148
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
149
rstx_preamble = """.. This file is autogenerated from the output of
150
..     %(bzrcmd)s help topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
151
..     %(bzrcmd)s help commands
152
..     %(bzrcmd)s help <cmd>
153
..
154
.. Generation time: %(timestamp)s
155
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
156
"""
157
158
159
rstx_head = """\
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
160
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
161
Bazaar User Reference
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
162
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
163
164
:Version:   %(version)s
165
:Generated: %(datestamp)s
166
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
167
.. contents:: :depth: 2
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
168
169
-----
170
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
171
About This Manual
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
172
#################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
173
174
This manual is generated from Bazaar's online help. To use
175
the online help system, try the following commands.
176
177
    Introduction including a list of commonly used commands::
178
179
        bzr help
180
181
    List of topics and a summary of each::
182
183
        bzr help topics
184
185
    List of commands and a summary of each::
186
187
        bzr help commands
188
189
    More information about a particular topic or command::
190
191
        bzr help topic-or-command-name
192
193
The following web sites provide further information on Bazaar:
194
195
:Home page:                     http://www.bazaar-vcs.org/
196
:Official docs:                 http://doc.bazaar-vcs.org/
197
:Launchpad:                     https://launchpad.net/bzr/
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
198
"""
199
200
201
rstx_foot = """
202
"""