Merged revisions 78818 via svnmerge from
[python/dscho.git] / Tools / scripts / ptags.py
blobac01356076441771697c04da114e3fc61f71c5af
1 #! /usr/bin/env python
3 # ptags
5 # Create a tags file for Python programs, usable with vi.
6 # Tagged are:
7 # - functions (even inside other defs or classes)
8 # - classes
9 # - filenames
10 # Warns about files it cannot open.
11 # No warnings about duplicate tags.
13 import sys, re, os
15 tags = [] # Modified global variable!
17 def main():
18 args = sys.argv[1:]
19 for filename in args:
20 treat_file(filename)
21 if tags:
22 fp = open('tags', 'w')
23 tags.sort()
24 for s in tags: fp.write(s)
27 expr = '^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*[:\(]'
28 matcher = re.compile(expr)
30 def treat_file(filename):
31 try:
32 fp = open(filename, 'r')
33 except:
34 sys.stderr.write('Cannot open %s\n' % filename)
35 return
36 base = os.path.basename(filename)
37 if base[-3:] == '.py':
38 base = base[:-3]
39 s = base + '\t' + filename + '\t' + '1\n'
40 tags.append(s)
41 while 1:
42 line = fp.readline()
43 if not line:
44 break
45 m = matcher.match(line)
46 if m:
47 content = m.group(0)
48 name = m.group(2)
49 s = name + '\t' + filename + '\t/^' + content + '/\n'
50 tags.append(s)
52 if __name__ == '__main__':
53 main()