3
# Copyright (C) 2005 by Hans Ulrich Niedermann
4
# Portions Copyright (C) 2005 by Canonical Ltd
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
#<<< code taken from bzr (C) Canonical
24
import bzrlib, bzrlib.help
26
#>>> code taken from bzr (C) Canonical
34
def man_escape(string):
35
result = string.replace("\\","\\\\")
36
result = result.replace("`","\\`")
37
result = result.replace("'","\\'")
38
result = result.replace("-","\\-")
44
def parse_line(self, line):
48
class CommandListParser(Parser):
50
"""Parser for output of "bzr help commands".
52
The parsed content can then be used to
53
- write a "COMMAND OVERVIEW" section into a man page
54
- provide a list of all commands
57
def __init__(self,params):
59
self.command_usage = []
60
self.all_commands = []
61
self.usage_exp = re.compile("([a-z0-9-]+).*")
62
self.descr_exp = re.compile(" ([A-Z].*)\s*")
68
def parse_line(self, line):
69
m = self.usage_exp.match(line)
75
self.command_usage.append((self.command,self.usage,self.descr))
76
self.all_commands.append(self.command)
77
self.usage = " ".join(line.split(" ")[1:])
78
self.command = m.groups()[0]
80
raise RuntimeError, "matching usage line in state %d" % state
83
m = self.descr_exp.match(line)
86
self.descr = m.groups()[0]
88
raise RuntimeError, "matching descr line in state %d" % state
91
raise RuntimeError, "Cannot parse this line ('%s')." % line
96
self.command_usage.append((self.command,self.usage,self.descr))
97
self.all_commands.append(self.command)
99
raise RuntimeError, "ending parse in state %d" % state
101
def write_to_manpage(self, outfile):
102
bzrcmd = self.params["bzrcmd"]
103
outfile.write('.SH "COMMAND OVERVIEW"\n')
104
for (command,usage,descr) in self.command_usage:
105
outfile.write('.TP\n.B "%s %s"\n%s\n' % (bzrcmd, usage, descr))
110
def __init__(self, parser):
113
def write(self, data):
116
for line in data.split('\n'):
117
self.parser.parse_line(line)
120
def write_command_details(params, command, usage, descr, outfile):
121
x = ('.SS "%s %s"\n.B "%s"\n.PP\n.B "Usage:"\n%s %s\n\n' %
127
outfile.write(man_escape(x))
131
.\\\" Man page for %(bzrcmd)s (bazaar-ng)
133
.\\\" Large parts of this file are autogenerated from the output of
134
.\\\" \"%(bzrcmd)s help commands\"
135
.\\\" \"%(bzrcmd)s help <cmd>\"
137
.\\\" Generation time: %(timestamp)s
141
# The DESCRIPTION text was taken from http://www.bazaar-ng.org/
142
# and is thus (C) Canonical
144
.TH bzr 1 "%(datestamp)s" "%(version)s" "bazaar-ng"
146
%(bzrcmd)s - bazaar-ng next-generation distributed version control
163
) is a project of Canonical to develop an open source distributed version control system that is powerful, friendly, and scalable. Version control means a system that keeps track of previous revisions of software source code or similar information and helps people work on it in teams.
165
bazaar-ng is at an early stage of development, and the design is still changing from week to week. This man page here may be inconsistent with itself, with other documentation or with the code, and sometimes refer to features that are planned but not yet written. Comments are still very welcome; please send them to bazaar-ng@lists.canonical.com.
171
.UR http://bazaar.canonical.com/IntroductionToBzr
172
.BR http://bazaar.canonical.com/IntroductionToBzr
176
Per-user \'home\' directory. Default on Unix like systems is
182
is to look for external command.
185
E-Mail address of the user. Overrides settings from
186
.I "~/.bazaar/bazaar.conf" and
189
John Doe <john@example.com>
192
E-Mail address of the user. Overridden by the settings in the file
193
.I "~/.bazaar/bazaar.conf"
194
and of the environment variable
199
Directory where all the user\'s settings are stored.
201
.I "~/.bazaar/bazaar.conf"
202
Stores default settings like name and email address of the
203
user. Settings in this file override the content of
205
environment variable. Example content:
208
email=John Doe <john@example.com>
210
check_signatures=check-available
211
create_signatures=when-required
214
.UR http://www.bazaar-ng.org/
215
.BR http://www.bazaar-ng.org/,
216
.UR http://www.bazaar-ng.org/doc/
217
.BR http://www.bazaar-ng.org/doc/,
218
.UR http://bazaar.canonical.com/BzrDocumentation
219
.BR http://bazaar.canonical.com/BzrDocumentation
227
"datestamp": time.strftime("%Y-%m-%d",tt),
228
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S +0000",tt),
229
"version": bzrlib.__version__,
232
clp = CommandListParser(params)
233
bzrlib.help.help("commands", outfile=HelpReader(clp))
237
if len(sys.argv) == 2:
238
filename = sys.argv[1]
242
outfile = open(filename,"w")
244
outfile.write(man_preamble % params)
245
outfile.write(man_escape(man_head % params))
246
clp.write_to_manpage(outfile)
249
# This doesn't do more than the summary so far.
250
#outfile.write('.SH "DETAILED COMMAND DESCRIPTION"\n')
251
#for (command,usage,descr) in clp.command_usage:
252
# write_command_details(params, command, usage, descr, outfile = outfile)
254
outfile.write(man_escape(man_foot % params))
257
if __name__ == '__main__':