Mercurial > cpython-lru_cache-weakref
view Tools/scripts/make_ctype.py @ 51749:1408feec0084 3.0
Merged revisions 69798 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r69798 | benjamin.peterson | 2009-02-19 22:02:38 -0600 (Thu, 19 Feb 2009) | 13 lines
Merged revisions 69769,69776 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r69769 | georg.brandl | 2009-02-19 02:30:06 -0600 (Thu, 19 Feb 2009) | 1 line
#5310, #3558: fix operator precedence table.
........
r69776 | georg.brandl | 2009-02-19 10:34:51 -0600 (Thu, 19 Feb 2009) | 2 lines
#5317: update IronPython URL.
........
................
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Fri, 20 Feb 2009 04:05:32 +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) """)
