[Python-checkins] python/dist/src/Doc/tools findcsyms,NONE,1.1

fdrake@sourceforge.net fdrake@sourceforge.net
2002年4月16日 14:27:20 -0700


Update of /cvsroot/python/python/dist/src/Doc/tools
In directory usw-pr-cvs1:/tmp/cvs-serv26912
Added Files:
	findcsyms 
Log Message:
Start of script to locate C symbols and segregate them into lists of
the documented and undocumented symbols.
--- NEW FILE: findcsyms ---
#! /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()

AltStyle によって変換されたページ (->オリジナル) /