From dee86c644ecdf6aba7ae85eccb58b90d95f214fc Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Wed, 15 Mar 2000 14:57:59 +0000 Subject: [PATCH] Script to annotate api.tex with reference count information. --- Doc/tools/anno-api.py | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 Doc/tools/anno-api.py diff --git a/Doc/tools/anno-api.py b/Doc/tools/anno-api.py new file mode 100755 index 00000000000..33f85fba927 --- /dev/null +++ b/Doc/tools/anno-api.py @@ -0,0 +1,63 @@ +#! /usr/bin/env python +"""Add reference count annotations to the Python/C API Reference.""" +__version__ = '$Revision$' + +import getopt +import os +import string +import sys + +import refcounts + + +PREFIX = r"\begin{cfuncdesc}{PyObject*}{" + + +def main(): + rcfile = os.path.join(os.path.dirname(refcounts.__file__), os.pardir, + "api", "refcounts.dat") + outfile = "-" + opts, args = getopt.getopt(sys.argv[1:], "o:r:", ["output=", "refcounts="]) + for opt, arg in opts: + if opt in ("-o", "--output"): + outfile = arg + elif opt in ("-r", "--refcounts"): + rcfile = arg + rcdict = refcounts.load(rcfile) + if outfile == "-": + output = sys.stdout + else: + output = open(outfile, "w") + if not args: + args = ["-"] + prefix = PREFIX + prefix_len = len(prefix) + for infile in args: + if infile == "-": + input = sys.stdin + else: + input = open(infile) + while 1: + line = input.readline() + if not line: + break + if line[:prefix_len] == prefix: + s = string.split(line[prefix_len:], '}', 1)[0] + try: + info = rcdict[s] + except KeyError: + sys.stderr.write("No refcount data for %s\n" % s) + else: + if info.result_type == "PyObject*": + rc = info.result_refs and "New" or "Borrowed" + line = r"\begin{cfuncdesc}[%s]{PyObject*}{" % rc \ + + line[prefix_len:] + output.write(line) + if infile != "-": + input.close() + if outfile != "-": + output.close() + + +if __name__ == "__main__": + main()