* Alexander Polakov <[email protected]> [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
/*