mirror of
https://github.com/python/cpython.git
synced 2025-11-26 13:22:51 +00:00
Silly script I'd rather not throw away.
This commit is contained in:
parent
1e35e76532
commit
174ce20865
1 changed files with 93 additions and 0 deletions
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…
Add table
Add a link
Reference in a new issue