annotate Lib/cmd.py @ 17581:c1937faabb23 2.1

Added support for optional explanation parameter to the \versionadded macro. Refactored do_cmd_versionadded() and do_cmd_versionchanged() to do most of the work in a helper function, with the do_cmd_*() wrappers just supplying a portion of the replacement text.
author Fred Drake <fdrake@acm.org>
date Wed, 18 Apr 2001 17:29:14 +0000
parents 1550872249e9
children 01ae962df885
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
1 """A generic class to build line-oriented command interpreters.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
2
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
3 Interpreters constructed with this class obey the following conventions:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
4
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
5 1. End of file on input is processed as the command 'EOF'.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
6 2. A command is parsed out of each line by collecting the prefix composed
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
7 of characters in the identchars member.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
8 3. A command `foo' is dispatched to a method 'do_foo()'; the do_ method
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
9 is passed a single argument consisting of the remainder of the line.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
10 4. Typing an empty line repeats the last command. (Actually, it calls the
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
11 method `emptyline', which may be overridden in a subclass.)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
12 5. There is a predefined `help' method. Given an argument `topic', it
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
13 calls the command `help_topic'. With no arguments, it lists all topics
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
14 with defined help_ functions, broken into up to three topics; documented
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
15 commands, miscellaneous help topics, and undocumented commands.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
16 6. The command '?' is a synonym for `help'. The command '!' is a synonym
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
17 for `shell', if a do_shell method exists.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
18
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
19 The `default' method may be overridden to intercept commands for which there
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
20 is no do_ method.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
21
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
22 The data member `self.ruler' sets the character used to draw separator lines
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
23 in the help messages. If empty, no ruler line is drawn. It defaults to "=".
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
24
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
25 If the value of `self.intro' is nonempty when the cmdloop method is called,
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
26 it is printed out on interpreter startup. This value may be overridden
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
27 via an optional argument to the cmdloop() method.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
28
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
29 The data members `self.doc_header', `self.misc_header', and
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
30 `self.undoc_header' set the headers used for the help function's
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
31 listings of documented functions, miscellaneous topics, and undocumented
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
32 functions respectively.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
33
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
34 These interpreters use raw_input; thus, if the readline module is loaded,
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
35 they automatically support Emacs-like command history and editing features.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
36 """
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37
17155
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
38 import string, sys
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
16070
b5345e99596b added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents: 15543
diff changeset
40 __all__ = ["Cmd"]
b5345e99596b added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents: 15543
diff changeset
41
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 PROMPT = '(Cmd) '
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 IDENTCHARS = string.letters + string.digits + '_'
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 class Cmd:
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
46 prompt = PROMPT
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
47 identchars = IDENTCHARS
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
48 ruler = '='
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
49 lastcmd = ''
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
50 cmdqueue = []
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
51 intro = None
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
52 doc_leader = ""
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
53 doc_header = "Documented commands (type help <topic>):"
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
54 misc_header = "Miscellaneous help topics:"
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
55 undoc_header = "Undocumented commands:"
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
56 nohelp = "*** No help on %s"
17155
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
57 use_rawinput = 1
1315
acdc0b9a6c78 * aifc.py: don't die on invalid MARK chunk
Guido van Rossum <guido@python.org>
parents: 1086
diff changeset
58
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
59 def __init__(self): pass
8615
e7822b64a33d Gotta have an __init__() method -- pdb.py calls it!
Guido van Rossum <guido@python.org>
parents: 8584
diff changeset
60
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
61 def cmdloop(self, intro=None):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
62 self.preloop()
15543
785155e2cfca Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents: 13533
diff changeset
63 if intro is not None:
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
64 self.intro = intro
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
65 if self.intro:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
66 print self.intro
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
67 stop = None
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
68 while not stop:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
69 if self.cmdqueue:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
70 line = self.cmdqueue[0]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
71 del self.cmdqueue[0]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
72 else:
17155
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
73 if self.use_rawinput:
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
74 try:
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
75 line = raw_input(self.prompt)
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
76 except EOFError:
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
77 line = 'EOF'
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
78 else:
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
79 sys.stdout.write(self.prompt)
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
80 line = sys.stdin.readline()
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
81 if not len(line):
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
82 line = 'EOF'
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
83 else:
1550872249e9 This is SF patch #405952, by Anthony Baxter:
Guido van Rossum <guido@python.org>
parents: 16478
diff changeset
84 line = line[:-1] # chop \n
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
85 line = self.precmd(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
86 stop = self.onecmd(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
87 stop = self.postcmd(stop, line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
88 self.postloop()
8584
cb7fcfb56275 Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents: 8410
diff changeset
89
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
90 def precmd(self, line):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
91 return line
8584
cb7fcfb56275 Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents: 8410
diff changeset
92
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
93 def postcmd(self, stop, line):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
94 return stop
8584
cb7fcfb56275 Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents: 8410
diff changeset
95
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
96 def preloop(self):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
97 pass
8584
cb7fcfb56275 Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents: 8410
diff changeset
98
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
99 def postloop(self):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
100 pass
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
102 def onecmd(self, line):
16478
edc0c99a69d6 String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 16280
diff changeset
103 line = line.strip()
13533
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
104 if not line:
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
105 return self.emptyline()
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
106 elif line[0] == '?':
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
107 line = 'help ' + line[1:]
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
108 elif line[0] == '!':
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
109 if hasattr(self, 'do_shell'):
13533
1e7c32bddb8f Bug fix: ? and ! were not full aliases for `help' and `shell' as implied in
Eric S. Raymond <esr@thyrsus.com>
parents: 11691
diff changeset
110 line = 'shell ' + line[1:]
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
111 else:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
112 return self.default(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
113 self.lastcmd = line
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
114 i, n = 0, len(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
115 while i < n and line[i] in self.identchars: i = i+1
16478
edc0c99a69d6 String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 16280
diff changeset
116 cmd, arg = line[:i], line[i:].strip()
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
117 if cmd == '':
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
118 return self.default(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
119 else:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
120 try:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
121 func = getattr(self, 'do_' + cmd)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
122 except AttributeError:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
123 return self.default(line)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
124 return func(arg)
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
126 def emptyline(self):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
127 if self.lastcmd:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
128 return self.onecmd(self.lastcmd)
8584
cb7fcfb56275 Improved by Eric Raymond.
Guido van Rossum <guido@python.org>
parents: 8410
diff changeset
129
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
130 def default(self, line):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
131 print '*** Unknown syntax:', line
624
0e436200bf12 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
133 def do_help(self, arg):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
134 if arg:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
135 # XXX check arg syntax
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
136 try:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
137 func = getattr(self, 'help_' + arg)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
138 except:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
139 try:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
140 doc=getattr(self, 'do_' + arg).__doc__
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
141 if doc:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
142 print doc
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
143 return
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
144 except:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
145 pass
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
146 print self.nohelp % (arg,)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
147 return
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
148 func()
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
149 else:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
150 # Inheritance says we have to look in class and
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
151 # base classes; order is not important.
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
152 names = []
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
153 classes = [self.__class__]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
154 while classes:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
155 aclass = classes[0]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
156 if aclass.__bases__:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
157 classes = classes + list(aclass.__bases__)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
158 names = names + dir(aclass)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
159 del classes[0]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
160 cmds_doc = []
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
161 cmds_undoc = []
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
162 help = {}
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
163 for name in names:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
164 if name[:5] == 'help_':
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
165 help[name[5:]]=1
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
166 names.sort()
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
167 # There can be duplicates if routines overridden
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
168 prevname = ''
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
169 for name in names:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
170 if name[:3] == 'do_':
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
171 if name == prevname:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
172 continue
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
173 prevname = name
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
174 cmd=name[3:]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
175 if help.has_key(cmd):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
176 cmds_doc.append(cmd)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
177 del help[cmd]
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
178 elif getattr(self, name).__doc__:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
179 cmds_doc.append(cmd)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
180 else:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
181 cmds_undoc.append(cmd)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
182 print self.doc_leader
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
183 self.print_topics(self.doc_header, cmds_doc, 15,80)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
184 self.print_topics(self.misc_header, help.keys(),15,80)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
185 self.print_topics(self.undoc_header, cmds_undoc, 15,80)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1435
diff changeset
186
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
187 def print_topics(self, header, cmds, cmdlen, maxcol):
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
188 if cmds:
16280
8b81a7e58a1d unnecessary semicolon
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16070
diff changeset
189 print header
11691
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
190 if self.ruler:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
191 print self.ruler * len(header)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
192 (cmds_per_line,junk)=divmod(maxcol,cmdlen)
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
193 col=cmds_per_line
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
194 for cmd in cmds:
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
195 if col==0: print
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
196 print (("%-"+`cmdlen`+"s") % cmd),
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
197 col = (col+1) % cmds_per_line
e34991022571 Mass patch by Ka-Ping Yee:
Guido van Rossum <guido@python.org>
parents: 10820
diff changeset
198 print "\n"