Hi,

here's an updated version.

1) en_US.UTF-8.src updates from FreeBSD
2) wcwidth() changed to use the same code as iswprint()
   * maybe just use iswprint() itself?
3) _RUNETYPE_SW0 changed to be !0 (and match FreeBSD). 0 value is used in
   mklocale to perform additional checks required for MAPLOWER and
   MAPUPPER, but not SWIDTHx.

--- share/locale/ctype/en_US.UTF-8.src  Wed Jan  5 12:37:22 2011
+++ share/locale/ctype/en_US.UTF-8.src  Wed Jan  5 09:47:56 2011
@@ -491,9 +491,9 @@
  * U+0300 - U+036F : Combining Diacritical Marks
  */
 
-GRAPH     0x0300 - 0x034f  0x0360 - 0x036f
-PRINT     0x0300 - 0x034f  0x0360 - 0x036f
-SWIDTH1   0x0300 - 0x034f  0x0360 - 0x036f
+GRAPH     0x0300 - 0x034e  0x0350 - 0x036f
+PRINT     0x0300 - 0x034e  0x0350 - 0x036f
+SWIDTH0   0x0300 - 0x034e  0x0350 - 0x036f
 
 MAPUPPER  < 0x0345 0x0399 >
 
@@ -583,7 +583,7 @@
 LOWER     0x04c8  0x04ca  0x04cc  0x04ce  0x04d1  0x04d3  0x04d5
 LOWER     0x04d7  0x04d9  0x04db  0x04dd  0x04df  0x04e1  0x04e3
 LOWER     0x04e5  0x04e7  0x04e9  0x04eb  0x04ed  0x04ef  0x04f1
-LOWER     0x04f3  0x04f5  0x04f9
+LOWER     0x04f3  0x04f5  0x04f7  0x04f9
 PUNCT     0x0482
 UPPER     0x0400 - 0x042f  0x0460  0x0462  0x0464  0x0466  0x0468
 UPPER     0x046a  0x046c  0x046e  0x0470  0x0472  0x0474  0x0476
@@ -595,9 +595,10 @@
 UPPER     0x04c5  0x04c7  0x04c9  0x04cb  0x04cd  0x04d0  0x04d2
 UPPER     0x04d4  0x04d6  0x04d8  0x04da  0x04dc  0x04de  0x04e0
 UPPER     0x04e2  0x04e4  0x04e6  0x04e8  0x04ea  0x04ec  0x04ee
-UPPER     0x04f0  0x04f2  0x04f4  0x04f8
-PRINT     0x0400 - 0x0486  0x0488 - 0x04ce  0x04d0 - 0x04f5  0x04f8  0x04f9
-SWIDTH1   0x0400 - 0x0486  0x0488 - 0x04ce  0x04d0 - 0x04f5  0x04f8  0x04f9
+UPPER     0x04f0  0x04f2  0x04f4  0x04f6  0x04f8
+PRINT     0x0400 - 0x0486  0x0488 - 0x04ce  0x04d0 - 0x04f9
+SWIDTH0   0x0483 - 0x0486  0x0488 - 0x0489
+SWIDTH1   0x0400 - 0x0482  0x048a - 0x04ce  0x04d0 - 0x04f9
 
 MAPUPPER  < 0x0430 - 0x044f : 0x0410 >
 MAPUPPER  < 0x0450 - 0x045f : 0x0400 >
@@ -671,6 +672,7 @@
 MAPUPPER  < 0x04f1 0x04f0 >
 MAPUPPER  < 0x04f3 0x04f2 >
 MAPUPPER  < 0x04f5 0x04f4 >
+MAPUPPER  < 0x04f7 0x04f6 >
 MAPUPPER  < 0x04f9 0x04f8 >
 MAPLOWER  < 0x0400 - 0x040f : 0x0450 >
 MAPLOWER  < 0x0410 - 0x042f : 0x0430 >
@@ -744,6 +746,7 @@
 MAPLOWER  < 0x04f0 0x04f1 >
 MAPLOWER  < 0x04f2 0x04f3 >
 MAPLOWER  < 0x04f4 0x04f5 >
+MAPLOWER  < 0x04f6 0x04f7 >
 MAPLOWER  < 0x04f8 0x04f9 >
 
 
@@ -1052,7 +1055,8 @@
 GRAPH     0x0e01 - 0x0e3a  0x0e3f - 0x0e5b
 PUNCT     0x0e3f  0x0e4f  0x0e5a  0x0e5b
 PRINT     0x0e01 - 0x0e3a  0x0e3f - 0x0e5b
-SWIDTH1   0x0e01 - 0x0e3a  0x0e3f - 0x0e5b
+SWIDTH0   0x0e31   0x0e34 - 0x0e3a  0x0e47 - 0x0e4e
+SWIDTH1   0x0e01 - 0x0e30  0x0e32 - 0x0e33  0x0e3f - 0x0e46  0x0e4f - 0x0e5b
 
 TODIGIT   < 0x0e50 - 0x0e59 : 0x0000 >
 
@@ -1283,7 +1287,15 @@
 
 TODIGIT   < 0x1810 - 0x1819 : 0x0000 >
 
+/*
+ * U+1DC0 - U+1DFF : Combining Diacritical Marks Supplement
+ */
 
+GRAPH     0x1DC0 - 0x1DC3
+PRINT     0x1DC0 - 0x1DC3
+SWIDTH0   0x1DC0 - 0x1DC3
+
+
 /*
  * U+1E00 - U+1EFF : Latin Extended Additional
  */
@@ -1672,7 +1684,8 @@
 BLANK     0x2000 - 0x200b  0x202f  0x205f
 PRINT     0x2000 - 0x200b  0x2010 - 0x2029  0x202f - 0x2052  0x2057
 PRINT     0x205f
-SWIDTH1   0x2000 - 0x200b  0x2010 - 0x2029  0x202f - 0x2052  0x2057
+SWIDTH1   0x2000 - 0x200a  0x2010 - 0x2029  0x202f - 0x2052  0x2057
+SWIDTH0   0x200b - 0x200d
 SWIDTH1   0x205f
 
 
@@ -1707,9 +1720,9 @@
  * U+20D0 - U+20FF : Combining Diacritical Marks for Symbols
  */
 
-GRAPH     0x20d0 - 0x20ea
-PRINT     0x20d0 - 0x20ea
-SWIDTH1   0x20d0 - 0x20ea
+GRAPH     0x20d0 - 0x20eb
+PRINT     0x20d0 - 0x20eb
+SWIDTH0   0x20d0 - 0x20eb
 
 
 /*
@@ -1987,7 +2000,8 @@
 PUNCT     0x309b  0x309c
 PRINT     0x3041 - 0x3096  0x3099 - 0x309f
 PHONOGRAM 0x3041 - 0x3096  0x309f
-SWIDTH2   0x3041 - 0x3096  0x3099 - 0x309f
+SWIDTH0   0x3099 - 0x309a
+SWIDTH2   0x3041 - 0x3096  0x309b - 0x309f
 
 
 /*
@@ -2211,7 +2225,7 @@
 
 GRAPH     0xfe20 - 0xfe23
 PRINT     0xfe20 - 0xfe23
-SWIDTH1   0xfe20 - 0xfe23
+SWIDTH0   0xfe20 - 0xfe23
 
 
 /*
@@ -2333,8 +2347,13 @@
 GRAPH     0x1d100 - 0x1d126  0x1d12a - 0x1d172  0x1d17b - 0x1d1dd
 PUNCT     0x1d100 - 0x1d126  0x1d12a - 0x1d164  0x1d16a - 0x1d16c
 PUNCT     0x1d183  0x1d184  0x1d18c - 0x1d1a9  0x1d1ae - 0x1d1dd
-PRINT     0x1d100 - 0x1d126  0x1d12a - 0x1d172  0x1d17b - 0x1d1dd
-SWIDTH1   0x1d100 - 0x1d126  0x1d12a - 0x1d172  0x1d17b - 0x1d1dd
+PRINT     0x1d100 - 0x1d126  0x1d12a - 0x1d158  0x1d15a - 0x1d172
+PRINT     0x1d17b - 0x1d1dd
+SWIDTH0   0x1d165 - 0x1d169  0x1d16d - 0x1d172  0x1d17b - 0x1d182
+SWIDTH0   0x1d185 - 0x1d18b  0x1d1aa - 0x1d1ad
+SWIDTH1   0x1d100 - 0x1d126  0x1d12a - 0x1d158  0x1d15a - 0x1d164
+SWIDTH1   0x1d16a - 0x1d16c  0x1d183   0x1d184  0x1d18c - 0x1d1a9
+SWIDTH1   0x1d1ae - 0x1d1dd
 
 
 /*
--- lib/libc/locale/iswctype.c.orig     Tue Jan  4 23:12:23 2011
+++ lib/libc/locale/iswctype.c  Wed Jan  5 10:02:36 2011
@@ -170,7 +170,9 @@
 int
 wcwidth(wchar_t c)
 {
-        return (((unsigned)__runetype_w(c) & _CTYPE_SWM) >> _CTYPE_SWS);
+       if (__isctype_w((c), _CTYPE_R))
+               return (((unsigned)__runetype_w(c) & _CTYPE_SWM) >> _CTYPE_SWS);
+       return -1;
 }
 
 wctrans_t
--- lib/libc/locale/runetype.h.orig     Wed Nov 24 17:38:51 2010
+++ lib/libc/locale/runetype.h  Wed Jan  5 13:52:27 2011
@@ -71,7 +71,7 @@
 #define        _RUNETYPE_Q     0x00200000U     /* Phonogram */
 #define        _RUNETYPE_SWM   0xc0000000U/* Mask to get screen width data */
 #define        _RUNETYPE_SWS   30              /* Bits to shift to get width */
-#define        _RUNETYPE_SW0   0x00000000U     /* 0 width character */
+#define        _RUNETYPE_SW0   0x20000000U     /* 0 width character */
 #define        _RUNETYPE_SW1   0x40000000U     /* 1 width character */
 #define        _RUNETYPE_SW2   0x80000000U     /* 2 width character */
 #define        _RUNETYPE_SW3   0xc0000000U     /* 3 width character */

Reply via email to