| #! /usr/bin/env python | 
 | #  -*- Python -*- | 
 |  | 
 | import fileinput | 
 | import getopt | 
 | import glob | 
 | import os | 
 | import re | 
 | import sys | 
 |  | 
 |  | 
 | declare_rx = re.compile( | 
 |     r"\\declaremodule(?:\[[a-zA-Z0-9]*\]*)?{[a-zA-Z_0-9]+}{([a-zA-Z_0-9]+)}") | 
 |  | 
 | module_rx = re.compile(r"\\module{([a-zA-Z_0-9]+)}") | 
 |  | 
 | def main(): | 
 |     try: | 
 |         just_list = 0 | 
 |         print_lineno = 0 | 
 |         opts, args = getopt.getopt(sys.argv[1:], "ln", ["list", "number"]) | 
 |         for opt, arg in opts: | 
 |             if opt in ("-l", "--list"): | 
 |                 just_list = 1 | 
 |             elif opt in ("-n", "--number"): | 
 |                 print_lineno = 1 | 
 |         files = args | 
 |         if not files: | 
 |             files = glob.glob("*.tex") | 
 |             files.sort() | 
 |         modulename = None | 
 |         for line in fileinput.input(files): | 
 |             if line[:9] == r"\section{": | 
 |                 modulename = None | 
 |                 continue | 
 |             if line[:16] == r"\modulesynopsys{": | 
 |                 continue | 
 |             m = declare_rx.match(line) | 
 |             if m: | 
 |                 modulename = m.group(1) | 
 |                 continue | 
 |             if not modulename: | 
 |                 continue | 
 |             m = module_rx.search(line) | 
 |             if m: | 
 |                 name = m.group(1) | 
 |                 if name != modulename: | 
 |                     filename = fileinput.filename() | 
 |                     if just_list: | 
 |                         print filename | 
 |                         fileinput.nextfile() | 
 |                         modulename = None | 
 |                     elif print_lineno: | 
 |                         print "%s(%d):%s" \ | 
 |                               % (filename, fileinput.filelineno(), line[:-1]) | 
 |                     else: | 
 |                         print "%s:%s" % (filename, line[:-1]) | 
 |     except KeyboardInterrupt: | 
 |         sys.exit(1) | 
 |  | 
 |  | 
 | if __name__ == "__main__": | 
 |     main() |