home *** CD-ROM | disk | FTP | other *** search
- #! /usr/local/bin/python
-
- # eptags
- #
- # Create a TAGS file for Python programs, usable with GNU Emacs (version 18).
- # Tagged are:
- # - functions (even inside other defs or classes)
- # - classes
- # Warns about files it cannot open.
- # No warnings about duplicate tags.
-
- import sys
- import regex
-
- def main():
- outfp = open('TAGS', 'w')
- args = sys.argv[1:]
- for file in args:
- treat_file(file, outfp)
-
- expr = '^[ \t]*\(def\|class\)[ \t]+\([a-zA-Z0-9_]+\)[ \t]*[:(]'
- matcher = regex.compile(expr)
-
- def treat_file(file, outfp):
- try:
- fp = open(file, 'r')
- except:
- print 'Cannot open', file
- return
- charno = 0
- lineno = 0
- tags = []
- size = 0
- while 1:
- line = fp.readline()
- if not line: break
- lineno = lineno + 1
- if matcher.search(line) >= 0:
- (a, b), (a1, b1), (a2, b2) = matcher.regs[:3]
- name = line[a2:b2]
- pat = line[a:b]
- tag = pat + '\177' + `lineno` + ',' + `charno` + '\n'
- tags.append(name, tag)
- size = size + len(tag)
- charno = charno + len(line)
- outfp.write('\f\n' + file + ',' + `size` + '\n')
- for name, tag in tags:
- outfp.write(tag)
-
- main()
-