~bzr-pqm/bzr/bzr.dev

4763.2.4 by John Arbash Meinel
merge bzr.2.1 in preparation for NEWS entry.
1
# Copyright (C) 2006-2010 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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
16
4927.2.2 by Ian Clatworthy
User Reference as topics
17
"""Generate reStructuredText source for the User Reference Manual.
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
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
6379.6.7 by Jelmer Vernooij
Move importing from future until after doc string, otherwise the doc string will disappear.
23
from __future__ import absolute_import
24
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
25
import time
26
27
import bzrlib
28
import bzrlib.help
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
29
import bzrlib.help_topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
30
import bzrlib.commands
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
31
import bzrlib.osutils
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
32
33
34
def get_filename(options):
35
    """Provides name of manual"""
36
    return "%s_man.txt" % (options.bzr_name)
37
38
39
def infogen(options, outfile):
40
    """Create manual in RSTX format"""
6621.1.1 by Florent Gallaire
Fix for Windows and 32-bit platforms buggy gmtime().
41
    tt = bzrlib.osutils.gmtime()
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
42
    params = \
43
           { "bzrcmd": options.bzr_name,
44
             "datestamp": time.strftime("%Y-%m-%d",tt),
45
             "timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
46
             "version": bzrlib.__version__,
47
             }
3089.3.17 by Ian Clatworthy
Fix case where filename not given
48
    nominated_filename = getattr(options, 'filename', None)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
49
    if nominated_filename is None:
50
        topic_dir = None
51
    else:
52
        topic_dir = bzrlib.osutils.dirname(nominated_filename)
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
53
    outfile.write(rstx_preamble % params)
54
    outfile.write(rstx_head % params)
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
55
    outfile.write(_get_body(params, topic_dir))
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
56
    outfile.write(rstx_foot % params)
57
58
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
59
def _get_body(params, topic_dir):
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
60
    """Build the manual content."""
61
    from bzrlib.help_topics import SECT_CONCEPT, SECT_LIST, SECT_PLUGIN
62
    registry = bzrlib.help_topics.topic_registry
63
    result = []
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
64
    result.append(_get_section(registry, SECT_CONCEPT, "Concepts",
65
        output_dir=topic_dir))
66
    result.append(_get_section(registry, SECT_LIST, "Lists",
67
        output_dir=topic_dir))
4927.2.2 by Ian Clatworthy
User Reference as topics
68
    result.append(_get_commands_section(registry, output_dir=topic_dir))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
69
    return "\n".join(result)
70
71
3089.3.16 by Ian Clatworthy
Dump help topics into text files in doc/en/user-reference
72
def _get_section(registry, section, title, hdg_level1="#", hdg_level2="=",
73
        output_dir=None):
74
    """Build the manual part from topics matching that section.
75
    
76
    If output_dir is not None, topics are dumped into text files there
77
    during processing, as well as being included in the return result.
78
    """
4927.2.10 by Ian Clatworthy
fix test failures
79
    file_per_topic = output_dir is not None
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
80
    lines = [title, hdg_level1 * len(title), ""]
4927.2.10 by Ian Clatworthy
fix test failures
81
    if file_per_topic:
4927.2.2 by Ian Clatworthy
User Reference as topics
82
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
2677.1.4 by Alexander Belchenko
fixes after John's review
83
4927.2.2 by Ian Clatworthy
User Reference as topics
84
    topics = sorted(registry.get_topics_for_section(section))
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
85
    for topic in topics:
86
        help = registry.get_detail(topic)
4927.2.2 by Ian Clatworthy
User Reference as topics
87
        heading, text = help.split("\n", 1)
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
88
        if not text.startswith(hdg_level2):
4927.2.2 by Ian Clatworthy
User Reference as topics
89
            underline = hdg_level2 * len(heading)
90
            help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
91
        else:
92
            help = "%s\n%s\n\n" % (heading, text)
4927.2.10 by Ian Clatworthy
fix test failures
93
        if file_per_topic:
4927.2.2 by Ian Clatworthy
User Reference as topics
94
            topic_id = _dump_text(output_dir, topic, help)
95
            lines.append("   %s" % topic_id)
96
        else:
97
            lines.append(help)
98
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
99
    return "\n" + "\n".join(lines) + "\n"
100
101
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
102
def _get_commands_section(registry, title="Commands", hdg_level1="#",
4927.2.2 by Ian Clatworthy
User Reference as topics
103
        hdg_level2="=", output_dir=None):
3565.2.1 by Christophe Troestler
(trivial) Corrected typos.
104
    """Build the commands reference section of the manual."""
4927.2.10 by Ian Clatworthy
fix test failures
105
    file_per_topic = output_dir is not None
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
106
    lines = [title, hdg_level1 * len(title), ""]
4927.2.10 by Ian Clatworthy
fix test failures
107
    if file_per_topic:
4927.2.2 by Ian Clatworthy
User Reference as topics
108
        lines.extend([".. toctree::", "   :maxdepth: 1", ""])
109
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
110
    cmds = sorted(bzrlib.commands.builtin_command_names())
111
    for cmd_name in cmds:
112
        cmd_object = bzrlib.commands.get_cmd_object(cmd_name)
113
        if cmd_object.hidden:
114
            continue
115
        heading = cmd_name
4927.2.2 by Ian Clatworthy
User Reference as topics
116
        underline = hdg_level2 * len(heading)
2677.1.2 by Alexander Belchenko
bzr_man: see also topics as cross-reference links
117
        text = cmd_object.get_help_text(plain=False, see_also_as_links=True)
4927.2.2 by Ian Clatworthy
User Reference as topics
118
        help = "%s\n%s\n\n%s\n\n" % (heading, underline, text)
4927.2.10 by Ian Clatworthy
fix test failures
119
        if file_per_topic:
4927.2.2 by Ian Clatworthy
User Reference as topics
120
            topic_id = _dump_text(output_dir, cmd_name, help)
121
            lines.append("   %s" % topic_id)
122
        else:
123
            lines.append(help)
124
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
125
    return "\n" + "\n".join(lines) + "\n"
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
126
127
4927.2.2 by Ian Clatworthy
User Reference as topics
128
def _dump_text(output_dir, topic, text):
129
    """Dump text for a topic to a file."""
130
    topic_id = "%s-%s" % (topic, "help")
131
    filename = bzrlib.osutils.pathjoin(output_dir, topic_id + ".txt")
132
    f =  open(filename, "w")
6606.2.1 by Jelmer Vernooij
Fix auodoc_rstx when running with LANG=C.
133
    f.write(text.encode('utf-8'))
4927.2.2 by Ian Clatworthy
User Reference as topics
134
    f.close()
135
    return topic_id
136
137
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
138
##
139
# TEMPLATES
140
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
141
rstx_preamble = """.. This file is autogenerated from the output of
142
..     %(bzrcmd)s help topics
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
143
..     %(bzrcmd)s help commands
144
..     %(bzrcmd)s help <cmd>
145
..
146
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
147
"""
148
149
150
rstx_head = """\
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
151
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
152
Bazaar User Reference
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
153
#####################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
154
155
About This Manual
3089.3.1 by Ian Clatworthy
move reference material out of User Guide into User Reference
156
#################
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
157
158
This manual is generated from Bazaar's online help. To use
159
the online help system, try the following commands.
160
161
    Introduction including a list of commonly used commands::
162
163
        bzr help
164
165
    List of topics and a summary of each::
166
167
        bzr help topics
168
169
    List of commands and a summary of each::
170
171
        bzr help commands
172
173
    More information about a particular topic or command::
174
175
        bzr help topic-or-command-name
176
177
The following web sites provide further information on Bazaar:
178
4927.2.2 by Ian Clatworthy
User Reference as topics
179
:Home page:                     http://bazaar.canonical.com/
180
:Official docs:                 http://doc.bazaar.canonical.com/
2666.1.1 by Ian Clatworthy
Bazaar User Reference generated from online help
181
:Launchpad:                     https://launchpad.net/bzr/
1662.1.17 by Martin Pool
[patch] html manual generator (Alexander Belchenko)
182
"""
183
184
185
rstx_foot = """
186
"""