blob: 59873f29a0737849688b935990e0a3b7406e8da2 [file] [log] [blame]
Gregory P. Smith60d241f2007-10-16 06:31:30 +00001#ifndef Py_BYTES_CTYPE_H
2#define Py_BYTES_CTYPE_H
3
4/*
5 * The internal implementation behind PyString (bytes) and PyBytes (buffer)
6 * methods of the given names, they operate on ASCII byte strings.
7 */
8extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len);
9extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len);
10extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len);
11extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len);
12extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len);
13extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len);
14extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len);
15
16/* These store their len sized answer in the given preallocated *result arg. */
17extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len);
18extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len);
19extern void _Py_bytes_title(char *result, char *s, Py_ssize_t len);
20extern void _Py_bytes_capitalize(char *result, char *s, Py_ssize_t len);
21extern void _Py_bytes_swapcase(char *result, char *s, Py_ssize_t len);
22
23/* Shared __doc__ strings. */
24extern const char _Py_isspace__doc__[];
25extern const char _Py_isalpha__doc__[];
26extern const char _Py_isalnum__doc__[];
27extern const char _Py_isdigit__doc__[];
28extern const char _Py_islower__doc__[];
29extern const char _Py_isupper__doc__[];
30extern const char _Py_istitle__doc__[];
31extern const char _Py_lower__doc__[];
32extern const char _Py_upper__doc__[];
33extern const char _Py_title__doc__[];
34extern const char _Py_capitalize__doc__[];
35extern const char _Py_swapcase__doc__[];
36
37#define FLAG_LOWER 0x01
38#define FLAG_UPPER 0x02
39#define FLAG_ALPHA (FLAG_LOWER|FLAG_UPPER)
40#define FLAG_DIGIT 0x04
41#define FLAG_ALNUM (FLAG_ALPHA|FLAG_DIGIT)
42#define FLAG_SPACE 0x08
43#define FLAG_XDIGIT 0x10
44
45extern const unsigned int _Py_ctype_table[256];
46
47#define ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_LOWER)
48#define ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_UPPER)
49#define ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_ALPHA)
50#define ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_DIGIT)
51#define ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_XDIGIT)
52#define ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_ALNUM)
53#define ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_SPACE)
54
55#undef islower
56#define islower(c) undefined_islower(c)
57#undef isupper
58#define isupper(c) undefined_isupper(c)
59#undef isalpha
60#define isalpha(c) undefined_isalpha(c)
61#undef isdigit
62#define isdigit(c) undefined_isdigit(c)
63#undef isxdigit
64#define isxdigit(c) undefined_isxdigit(c)
65#undef isalnum
66#define isalnum(c) undefined_isalnum(c)
67#undef isspace
68#define isspace(c) undefined_isspace(c)
69
70extern const unsigned char _Py_ctype_tolower[256];
71extern const unsigned char _Py_ctype_toupper[256];
72
73#define TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
74#define TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)])
75
76#undef tolower
77#define tolower(c) undefined_tolower(c)
78#undef toupper
79#define toupper(c) undefined_toupper(c)
80
81/* this is needed because some docs are shared from the .o, not static */
82#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str)
83
84#endif /* !Py_BYTES_CTYPE_H */