mirror of
https://github.com/python/cpython.git
synced 2024-12-03 23:06:43 +08:00
Silly script I'd rather not throw away.
This commit is contained in:
parent
1e35e76532
commit
174ce20865
93
Tools/scripts/make_ctype.py
Normal file
93
Tools/scripts/make_ctype.py
Normal file
@ -0,0 +1,93 @@
|
||||
"""Script that generates the ctype.h-replacement in stringobject.c."""
|
||||
|
||||
NAMES = ("LOWER", "UPPER", "ALPHA", "DIGIT", "XDIGIT", "ALNUM", "SPACE")
|
||||
|
||||
print("""
|
||||
#define FLAG_LOWER 0x01
|
||||
#define FLAG_UPPER 0x02
|
||||
#define FLAG_ALPHA (FLAG_LOWER|FLAG_UPPER)
|
||||
#define FLAG_DIGIT 0x04
|
||||
#define FLAG_ALNUM (FLAG_ALPHA|FLAG_DIGIT)
|
||||
#define FLAG_SPACE 0x08
|
||||
#define FLAG_XDIGIT 0x10
|
||||
|
||||
static unsigned int ctype_table[256] = {""")
|
||||
|
||||
for i in range(128):
|
||||
c = chr(i)
|
||||
flags = []
|
||||
for name in NAMES:
|
||||
if name in ("ALPHA", "ALNUM"):
|
||||
continue
|
||||
if name == "XDIGIT":
|
||||
method = lambda: c.isdigit() or c.upper() in "ABCDEF"
|
||||
else:
|
||||
method = getattr(c, "is" + name.lower())
|
||||
if method():
|
||||
flags.append("FLAG_" + name)
|
||||
rc = repr(c)
|
||||
if c == '\v':
|
||||
rc = "'\\v'"
|
||||
elif c == '\f':
|
||||
rc = "'\\f'"
|
||||
if not flags:
|
||||
print(" 0, /* 0x%x %s */" % (i, rc))
|
||||
else:
|
||||
print(" %s, /* 0x%x %s */" % ("|".join(flags), i, rc))
|
||||
|
||||
for i in range(128, 256, 16):
|
||||
print(" %s," % ", ".join(16*["0"]))
|
||||
|
||||
print("};")
|
||||
print("")
|
||||
|
||||
for name in NAMES:
|
||||
print("#define IS%s(c) (ctype_table[Py_CHARMASK(c)] & FLAG_%s)" %
|
||||
(name, name))
|
||||
|
||||
print("")
|
||||
|
||||
for name in NAMES:
|
||||
name = "is" + name.lower()
|
||||
print("#undef %s" % name)
|
||||
print("#define %s(c) undefined_%s(c)" % (name, name))
|
||||
|
||||
print("""
|
||||
static unsigned char ctype_tolower[256] = {""")
|
||||
|
||||
for i in range(0, 256, 8):
|
||||
values = []
|
||||
for i in range(i, i+8):
|
||||
if i < 128:
|
||||
c = chr(i)
|
||||
if c.isupper():
|
||||
i = ord(c.lower())
|
||||
values.append("0x%02x" % i)
|
||||
print(" %s," % ", ".join(values))
|
||||
|
||||
print("};")
|
||||
|
||||
print("""
|
||||
static unsigned char ctype_toupper[256] = {""")
|
||||
|
||||
for i in range(0, 256, 8):
|
||||
values = []
|
||||
for i in range(i, i+8):
|
||||
if i < 128:
|
||||
c = chr(i)
|
||||
if c.islower():
|
||||
i = ord(c.upper())
|
||||
values.append("0x%02x" % i)
|
||||
print(" %s," % ", ".join(values))
|
||||
|
||||
print("};")
|
||||
|
||||
print("""
|
||||
#define TOLOWER(c) (ctype_tolower[Py_CHARMASK(c)])
|
||||
#define TOUPPER(c) (ctype_toupper[Py_CHARMASK(c)])
|
||||
|
||||
#undef tolower
|
||||
#define tolower(c) undefined_tolower(c)
|
||||
#undef toupper
|
||||
#define toupper(c) undefined_toupper(c)
|
||||
""")
|
Loading…
Reference in New Issue
Block a user