64 lines
1.8 KiB
Python
Executable File
64 lines
1.8 KiB
Python
Executable File
#! /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()
|