* Alexander Polakov <polac...@gmail.com> [110105 17:20]:
> 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.

  4) _RUNETYPE_SWM changed to make (r&_RUNETYPE_SWM) == _RUNETYPE_SW0
  work


Index: lib/libc/locale/iswctype.c
===================================================================
RCS file: /OpenBSD/src/lib/libc/locale/iswctype.c,v
retrieving revision 1.1
diff -u -r1.1 iswctype.c
--- lib/libc/locale/iswctype.c  7 Aug 2005 10:16:23 -0000       1.1
+++ lib/libc/locale/iswctype.c  6 Jan 2011 16:24:20 -0000
@@ -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
Index: lib/libc/locale/runetype.h
===================================================================
RCS file: /OpenBSD/src/lib/libc/locale/runetype.h,v
retrieving revision 1.5
diff -u -r1.5 runetype.h
--- lib/libc/locale/runetype.h  8 Oct 2007 08:17:15 -0000       1.5
+++ lib/libc/locale/runetype.h  6 Jan 2011 16:24:20 -0000
@@ -69,9 +69,9 @@
 #define        _RUNETYPE_I     0x00080000U     /* Ideogram */
 #define        _RUNETYPE_T     0x00100000U     /* Special */
 #define        _RUNETYPE_Q     0x00200000U     /* Phonogram */
-#define        _RUNETYPE_SWM   0xc0000000U/* Mask to get screen width data */
+#define        _RUNETYPE_SWM   0xe0000000U     /* 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 */
Index: share/locale/ctype/en_US.UTF-8.src
===================================================================
RCS file: /OpenBSD/src/share/locale/ctype/en_US.UTF-8.src,v
retrieving revision 1.1
diff -u -r1.1 en_US.UTF-8.src
--- share/locale/ctype/en_US.UTF-8.src  7 Aug 2005 10:03:45 -0000       1.1
+++ share/locale/ctype/en_US.UTF-8.src  6 Jan 2011 16:24:39 -0000
@@ -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,6 +1287,14 @@
 
 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
 
 
 /*

Reply via email to