summaryrefslogtreecommitdiff
path: root/Modules/unicodedata.c
diff options
context:
space:
mode:
authorHye-Shik Chang <hyeshik@gmail.com>2004-08-04 07:38:35 +0000
committerHye-Shik Chang <hyeshik@gmail.com>2004-08-04 07:38:35 +0000
commitc2c7a8577c1305533d95e4184924d3fad4b917d9 (patch)
tree7250b14decfbe85f216a446b96cd763496797f1b /Modules/unicodedata.c
parent8ed3fc7c90ddc4aa7179edb8f3e7f7e7d66b2c19 (diff)
downloadcpython-c2c7a8577c1305533d95e4184924d3fad4b917d9.tar.gz
SF #989185: Drop unicode.iswide() and unicode.width() and add
unicodedata.east_asian_width(). You can still implement your own simple width() function using it like this: def width(u): w = 0 for c in unicodedata.normalize('NFC', u): cwidth = unicodedata.east_asian_width(c) if cwidth in ('W', 'F'): w += 2 else: w += 1 return w
Diffstat (limited to 'Modules/unicodedata.c')
-rw-r--r--Modules/unicodedata.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 8aa18f2336..4a1e94c83c 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -24,6 +24,8 @@ typedef struct {
const unsigned char bidirectional; /* index into
_PyUnicode_BidirectionalNames */
const unsigned char mirrored; /* true if mirrored in bidir mode */
+ const unsigned char east_asian_width; /* index into
+ _PyUnicode_EastAsianWidth */
} _PyUnicode_DatabaseRecord;
/* data file generated by Tools/unicode/makeunicodedata.py */
@@ -205,6 +207,24 @@ unicodedata_mirrored(PyObject *self, PyObject *args)
}
static PyObject *
+unicodedata_east_asian_width(PyObject *self, PyObject *args)
+{
+ PyUnicodeObject *v;
+ int index;
+
+ if (!PyArg_ParseTuple(args, "O!:east_asian_width",
+ &PyUnicode_Type, &v))
+ return NULL;
+ if (PyUnicode_GET_SIZE(v) != 1) {
+ PyErr_SetString(PyExc_TypeError,
+ "need a single Unicode character as parameter");
+ return NULL;
+ }
+ index = (int) _getrecord(v)->east_asian_width;
+ return PyString_FromString(_PyUnicode_EastAsianWidthNames[index]);
+}
+
+static PyObject *
unicodedata_decomposition(PyObject *self, PyObject *args)
{
PyUnicodeObject *v;
@@ -871,6 +891,7 @@ static PyMethodDef unicodedata_functions[] = {
{"bidirectional", unicodedata_bidirectional, METH_VARARGS},
{"combining", unicodedata_combining, METH_VARARGS},
{"mirrored", unicodedata_mirrored, METH_VARARGS},
+ {"east_asian_width", unicodedata_east_asian_width, METH_VARARGS},
{"decomposition",unicodedata_decomposition, METH_VARARGS},
{"name", unicodedata_name, METH_VARARGS},
{"lookup", unicodedata_lookup, METH_VARARGS},