| #! /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() |