]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Make lower/upper/title work for non-BMP characters.
authorMartin v. Löwis <martin@v.loewis.de>
Fri, 18 Oct 2002 16:40:36 +0000 (16:40 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Fri, 18 Oct 2002 16:40:36 +0000 (16:40 +0000)
Objects/unicodectype.c

index 2e67dc50ad3495d158a33c0b665e17b71a8665c5..106726d7fceefd26221446c6aa4e54942ad10437 100644 (file)
@@ -62,18 +62,17 @@ int _PyUnicode_IsLinebreak(Py_UNICODE ch)
 Py_UNICODE _PyUnicode_ToTitlecase(register Py_UNICODE ch)
 {
     const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
+    int delta;
 
     if (ctype->title)
-        ch += ctype->title;
+        delta = ctype->title;
     else
-       ch += ctype->upper;
+       delta = ctype->upper;
 
-#ifdef Py_UNICODE_WIDE
-    /* The database assumes that the values wrap around at 0x10000. */
-    if (ch > 0x10000)
-       ch -= 0x10000;
-#endif
-    return ch;
+    if (delta >= 32768)
+           delta -= 65536;
+
+    return ch + delta;
 }
 
 /* Returns 1 for Unicode characters having the category 'Lt', 0
@@ -358,14 +357,10 @@ int _PyUnicode_IsUppercase(Py_UNICODE ch)
 Py_UNICODE _PyUnicode_ToUppercase(Py_UNICODE ch)
 {
     const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
-
-    ch += ctype->upper;
-#ifdef Py_UNICODE_WIDE
-    /* The database assumes that the values wrap around at 0x10000. */
-    if (ch > 0x10000)
-       ch -= 0x10000;
-#endif
-    return ch;
+    int delta = ctype->upper;
+    if (delta >= 32768)
+           delta -= 65536;
+    return ch + delta;
 }
 
 /* Returns the lowercase Unicode characters corresponding to ch or just
@@ -374,14 +369,10 @@ Py_UNICODE _PyUnicode_ToUppercase(Py_UNICODE ch)
 Py_UNICODE _PyUnicode_ToLowercase(Py_UNICODE ch)
 {
     const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
-
-    ch += ctype->lower;
-#ifdef Py_UNICODE_WIDE
-    /* The database assumes that the values wrap around at 0x10000. */
-    if (ch > 0x10000)
-       ch -= 0x10000;
-#endif
-    return ch;
+    int delta = ctype->lower;
+    if (delta >= 32768)
+           delta -= 65536;
+    return ch + delta;
 }
 
 /* Returns 1 for Unicode characters having the category 'Ll', 'Lu', 'Lt',