1#! /usr/bin/env python 2 3# ptags 4# 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. 12 13import sys, re, os 14 15tags = [] # Modified global variable! 16 17def 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) 25 26 27expr = '^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*[:\(]' 28matcher = re.compile(expr) 29 30def 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) 51 52if __name__ == '__main__': 53 main() 54