Mercurial > cpython-lru_cache-weakref
view Tools/scripts/make_ctype.py @ 64166:d0e9febfa00a 3.1
Merged revisions 84172 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84172 | martin.v.loewis | 2010-08-18 18:12:23 +0200 (Mi, 18 Aug 2010) | 2 lines
Restore GIL in nis_cat in case of error.
........
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Thu, 19 Aug 2010 09:03:03 +0000 |
| parents | 4a72fc5dfb79 |
| children | 65d5ecefd50d |
line wrap: on
line source
"""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) """)
