summaryrefslogtreecommitdiffstats
path: root/Doc/tools
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2002-04-16 21:27:17 (GMT)
committerFred Drake <fdrake@acm.org>2002-04-16 21:27:17 (GMT)
commit34a05f7a1f9378f2869fd26f319c45cfaa908423 (patch)
tree0befc4263796e3b4b1d3ee8df00365a253bab279 /Doc/tools
parent08e7295ef8492bcf88dda45b15953bbb4d35914d (diff)
downloadcpython-34a05f7a1f9378f2869fd26f319c45cfaa908423.zip
cpython-34a05f7a1f9378f2869fd26f319c45cfaa908423.tar.gz
cpython-34a05f7a1f9378f2869fd26f319c45cfaa908423.tar.bz2
Start of script to locate C symbols and segregate them into lists of
the documented and undocumented symbols.
Diffstat (limited to 'Doc/tools')
-rwxr-xr-xDoc/tools/findcsyms107
1 files changed, 107 insertions, 0 deletions
diff --git a/Doc/tools/findcsyms b/Doc/tools/findcsyms
new file mode 100755
index 0000000..cffc237
--- /dev/null
+++ b/Doc/tools/findcsyms
@@ -0,0 +1,107 @@
+#! /usr/bin/env python
+
+import errno
+import os
+import sys
+
+if __name__ == "__main__":
+ _base = sys.argv[0]
+else:
+ _base = __file__
+
+_script_home = os.path.abspath(os.path.dirname(_base))
+
+srcdir = os.path.dirname(os.path.dirname(_script_home))
+
+EXCLUDES = ["bitset.h", "cStringIO.h", "graminit.h", "grammar.h",
+ "longintrepr.h", "metagrammar.h",
+ "node.h", "opcode.h", "osdefs.h", "pgenheaders.h",
+ "py_curses.h", "parsetok.h", "symtable.h", "token.h"]
+
+
+def list_headers():
+ """Return a list of headers."""
+ incdir = os.path.join(srcdir, "Include")
+ return [fn for fn in os.listdir(incdir)
+ if fn.endswith(".h") and fn not in EXCLUDES]
+
+def list_documented_items():
+ """Return a list of everything that's already documented."""
+ docdir = os.path.join(srcdir, "Doc")
+ return []
+
+def split_documented(all, documented):
+ """Split the list of all symbols into documented and undocumented
+ categories."""
+ doc = []
+ undoc = []
+ for t in all:
+ if t[0] in documented:
+ doc.append(t)
+ else:
+ undoc.append(t)
+ return doc, undoc
+
+def print_list(L, title=None):
+ """Dump a list to stdout."""
+ if title:
+ print title + ":"
+ print "-" * (len(title) + 1)
+ w = 0
+ for sym, filename in L:
+ w = max(w, len(sym))
+ if w % 4 == 0:
+ w += 4
+ else:
+ w += (4 - (w % 4))
+ for sym, filename in L:
+ print "%-*s%s" % (w, sym, filename)
+
+
+_spcjoin = ' '.join
+
+def main():
+ args = sys.argv[1:]
+ if args:
+ headers = args
+ documented = []
+ else:
+ os.chdir(os.path.join(srcdir, "Include"))
+ headers = list_headers()
+ documented = list_documented_items()
+
+ cmd = ("ctags -f - --file-scope=no --c-types=-mv "
+ "-Istaticforward -Istatichere "
+ + _spcjoin(headers))
+ fp = os.popen(cmd)
+ L = []
+ prevsym = None
+ while 1:
+ line = fp.readline()
+ if not line:
+ break
+ sym, filename = line.split()[:2]
+ if sym == prevsym:
+ continue
+ if not sym.endswith("_H"):
+ L.append((sym, filename))
+ prevsym = sym
+ L.sort()
+ fp.close()
+
+ try:
+ if documented:
+ documented, undocumented = split_documented(L, documented)
+ print_list(documented, "Documented symbols")
+ if undocumented:
+ print
+ print_list(undocumented, "Undocumented symbols")
+ else:
+ print_list(L)
+ except IOError, e:
+ if e.errno != errno.EPIPE:
+ raise
+
+
+if __name__ == "__main__":
+ main()