charencode.h
59 lines
| 2.1 KiB
| text/x-c
|
CLexer
Yuya Nishihara
|
r33753 | /* | ||
charencode.h - miscellaneous character encoding | ||||
This software may be used and distributed according to the terms of | ||||
the GNU General Public License, incorporated herein by reference. | ||||
*/ | ||||
#ifndef _HG_CHARENCODE_H_ | ||||
#define _HG_CHARENCODE_H_ | ||||
#include <Python.h> | ||||
#include "compat.h" | ||||
/* This should be kept in sync with normcasespecs in encoding.py. */ | ||||
enum normcase_spec { | ||||
NORMCASE_LOWER = -1, | ||||
NORMCASE_UPPER = 1, | ||||
NORMCASE_OTHER = 0 | ||||
}; | ||||
Yuya Nishihara
|
r33754 | PyObject *unhexlify(const char *str, Py_ssize_t len); | ||
Yuya Nishihara
|
r33927 | PyObject *isasciistr(PyObject *self, PyObject *args); | ||
Yuya Nishihara
|
r33753 | PyObject *asciilower(PyObject *self, PyObject *args); | ||
PyObject *asciiupper(PyObject *self, PyObject *args); | ||||
PyObject *make_file_foldmap(PyObject *self, PyObject *args); | ||||
Yuya Nishihara
|
r33926 | PyObject *jsonescapeu8fast(PyObject *self, PyObject *args); | ||
Yuya Nishihara
|
r33753 | |||
static const int8_t hextable[256] = { | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, /* 0-9 */ | ||||
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* A-F */ | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* a-f */ | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, | ||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 | ||||
}; | ||||
static inline int hexdigit(const char *p, Py_ssize_t off) | ||||
{ | ||||
int8_t val = hextable[(unsigned char)p[off]]; | ||||
if (val >= 0) { | ||||
return val; | ||||
} | ||||
PyErr_SetString(PyExc_ValueError, "input contains non-hex character"); | ||||
return 0; | ||||
} | ||||
#endif /* _HG_CHARENCODE_H_ */ | ||||