1e0d0090e76075a983d42aedad1c4fc2e77db847cAndrew M. Kuchling"""Constants and membership tests for ASCII characters"""
22b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
3bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumNUL     = 0x00  # ^@
4bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSOH     = 0x01  # ^A
5bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSTX     = 0x02  # ^B
6bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumETX     = 0x03  # ^C
7bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumEOT     = 0x04  # ^D
8bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumENQ     = 0x05  # ^E
9bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumACK     = 0x06  # ^F
10bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumBEL     = 0x07  # ^G
11bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumBS      = 0x08  # ^H
12bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumTAB     = 0x09  # ^I
13bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumHT      = 0x09  # ^I
14bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumLF      = 0x0a  # ^J
15bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumNL      = 0x0a  # ^J
16bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumVT      = 0x0b  # ^K
17bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumFF      = 0x0c  # ^L
18bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumCR      = 0x0d  # ^M
19bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSO      = 0x0e  # ^N
20bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSI      = 0x0f  # ^O
21bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDLE     = 0x10  # ^P
22bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDC1     = 0x11  # ^Q
23bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDC2     = 0x12  # ^R
24bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDC3     = 0x13  # ^S
25bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDC4     = 0x14  # ^T
26bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumNAK     = 0x15  # ^U
27bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSYN     = 0x16  # ^V
28bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumETB     = 0x17  # ^W
29bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumCAN     = 0x18  # ^X
30bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumEM      = 0x19  # ^Y
31bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSUB     = 0x1a  # ^Z
32bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumESC     = 0x1b  # ^[
33bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumFS      = 0x1c  # ^\
34bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumGS      = 0x1d  # ^]
35bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumRS      = 0x1e  # ^^
36bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumUS      = 0x1f  # ^_
37bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumSP      = 0x20  # space
38bffa52f07fc73b3c8eb4b30e30e2417bc406d2eeGuido van RossumDEL     = 0x7f  # delete
392b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
402b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingcontrolnames = [
412b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
422b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling"BS",  "HT",  "LF",  "VT",  "FF",  "CR",  "SO",  "SI",
432b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB",
442b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling"CAN", "EM",  "SUB", "ESC", "FS",  "GS",  "RS",  "US",
452b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling"SP"
462b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling]
472b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
482b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef _ctoi(c):
492b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if type(c) == type(""):
502b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return ord(c)
512b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    else:
522b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return c
532b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
542b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef isalnum(c): return isalpha(c) or isdigit(c)
552b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef isalpha(c): return isupper(c) or islower(c)
56283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isascii(c): return 0 <= _ctoi(c) <= 127          # ?
57514f9736a712923756cdd1d3a5e845bf3fdb0994Serhiy Storchakadef isblank(c): return _ctoi(c) in (9, 32)
58283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127
59283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isdigit(c): return 48 <= _ctoi(c) <= 57
60283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isgraph(c): return 33 <= _ctoi(c) <= 126
61283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef islower(c): return 97 <= _ctoi(c) <= 122
62283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isprint(c): return 32 <= _ctoi(c) <= 126
63514f9736a712923756cdd1d3a5e845bf3fdb0994Serhiy Storchakadef ispunct(c): return isgraph(c) and not isalnum(c)
640cc87f37b3d3f5ad7250de5b828ca60e981eab2fAndrew M. Kuchlingdef isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32)
65283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isupper(c): return 65 <= _ctoi(c) <= 90
662b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef isxdigit(c): return isdigit(c) or \
67283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchaka    (65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102)
68283de2b9c18e38c9a573526d6c398ade7dd6f8e9Serhiy Storchakadef isctrl(c): return 0 <= _ctoi(c) < 32
692b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef ismeta(c): return _ctoi(c) > 127
702b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
712b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef ascii(c):
722b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if type(c) == type(""):
732b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return chr(_ctoi(c) & 0x7f)
742b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    else:
752b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return _ctoi(c) & 0x7f
762b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
772b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef ctrl(c):
782b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if type(c) == type(""):
792b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return chr(_ctoi(c) & 0x1f)
802b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    else:
812b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return _ctoi(c) & 0x1f
822b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
832b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef alt(c):
842b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if type(c) == type(""):
852b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return chr(_ctoi(c) | 0x80)
862b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    else:
872b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return _ctoi(c) | 0x80
882b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling
892b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchlingdef unctrl(c):
902b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    bits = _ctoi(c)
912b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if bits == 0x7f:
922b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        rep = "^?"
93b738041c5db7a04b71ed4c3c8128dabc935ad60bAndrew M. Kuchling    elif isprint(bits & 0x7f):
94b738041c5db7a04b71ed4c3c8128dabc935ad60bAndrew M. Kuchling        rep = chr(bits & 0x7f)
952b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    else:
962b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        rep = "^" + chr(((bits & 0x7f) | 0x20) + 0x20)
972b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    if bits & 0x80:
982b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling        return "!" + rep
992b9d0bcf83a9e16563be9b088c2fb58ea015c742Andrew M. Kuchling    return rep
100