Ping's new version -- more efficient at finding the keywords.

This commit is contained in:
Guido van Rossum 1997-03-20 20:40:45 +00:00
parent 3d99e35884
commit 4d81984011
1 changed files with 13 additions and 37 deletions

View File

@ -60,58 +60,34 @@ def main():
else: optfile = "Lib/keyword.py" else: optfile = "Lib/keyword.py"
# scan the source file for keywords # scan the source file for keywords
try: fp = open(iptfile)
fp = open(iptfile)
except IOError, err:
sys.stderr.write("I/O error reading from %s: %s\n" % (optfile, err))
sys.exit(1)
strprog = regex.compile('"\([^"]+\)"') strprog = regex.compile('"\([^"]+\)"')
labelprog = regex.compile('static[ \t]+label.*=[ \t]+{') lines = []
keywordlist = []
while 1: while 1:
line = fp.readline() line = fp.readline()
if not line: break if not line: break
if labelprog.search(line) > -1: break if string.find(line, '{1, "') > -1 and strprog.search(line) > -1:
while line: lines.append(" '" + strprog.group(1) + "',\n")
line = fp.readline()
if string.find(line, ';') > -1: break
if strprog.search(line) > -1: keywordlist.append(strprog.group(1))
fp.close() fp.close()
lines.sort()
keywordlist.sort()
keywordlist.remove("EMPTY")
# load the output skeleton from the target # load the output skeleton from the target
try: fp = open(optfile)
fp = open(optfile) format = fp.readlines()
format = fp.readlines() fp.close()
fp.close()
except IOError, err:
sys.stderr.write("I/O error reading from %s: %s\n" % (optfile, err))
sys.exit(2)
# insert the lines of keywords
try: try:
start = format.index("#--start keywords--\n") + 1 start = format.index("#--start keywords--\n") + 1
end = format.index("#--end keywords--\n") end = format.index("#--end keywords--\n")
format[start:end] = lines
except ValueError: except ValueError:
sys.stderr.write("target does not contain format markers\n") sys.stderr.write("target does not contain format markers\n")
sys.exit(3) sys.exit(1)
# insert the lines of keywords
lines = []
for keyword in keywordlist:
lines.append(" '" + keyword + "',\n")
format[start:end] = lines
# write the output file # write the output file
try: fp = open(optfile, 'w')
fp = open(optfile, 'w')
except IOError, err:
sys.stderr.write("I/O error writing to %s: %s\n" % (optfile, err))
sys.exit(4)
fp.write(string.join(format, '')) fp.write(string.join(format, ''))
fp.close() fp.close()
if __name__ == "__main__": if __name__ == "__main__": main()
main()