initial source import
diff --git a/doc/tools/findmodrefs b/doc/tools/findmodrefs
new file mode 100755
index 0000000..8c5f93f
--- /dev/null
+++ b/doc/tools/findmodrefs
@@ -0,0 +1,63 @@
+#! /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()