#! /usr/bin/env python
|
|
# ptags
|
#
|
# Create a tags file for Python programs, usable with vi.
|
# Tagged are:
|
# - functions (even inside other defs or classes)
|
# - classes
|
# - filenames
|
# Warns about files it cannot open.
|
# No warnings about duplicate tags.
|
|
import sys, re, os
|
|
tags = [] # Modified global variable!
|
|
def main():
|
args = sys.argv[1:]
|
for filename in args:
|
treat_file(filename)
|
if tags:
|
fp = open('tags', 'w')
|
tags.sort()
|
for s in tags: fp.write(s)
|
|
|
expr = '^[ \t]*(def|class)[ \t]+([a-zA-Z0-9_]+)[ \t]*[:\(]'
|
matcher = re.compile(expr)
|
|
def treat_file(filename):
|
try:
|
fp = open(filename, 'r')
|
except:
|
sys.stderr.write('Cannot open %s\n' % filename)
|
return
|
base = os.path.basename(filename)
|
if base[-3:] == '.py':
|
base = base[:-3]
|
s = base + '\t' + filename + '\t' + '1\n'
|
tags.append(s)
|
while 1:
|
line = fp.readline()
|
if not line:
|
break
|
m = matcher.match(line)
|
if m:
|
content = m.group(0)
|
name = m.group(2)
|
s = name + '\t' + filename + '\t/^' + content + '/\n'
|
tags.append(s)
|
|
if __name__ == '__main__':
|
main()
|