[PATCH/RFA] Extended wctomb/mbtowc conversion and more stuff
Jeff Johnston
jjohnstn@redhat.com
Mon Mar 23 18:07:00 GMT 2009
Corinna Vinschen wrote:
> On Mar 22 17:30, Corinna Vinschen wrote:
>
>> Ok,
>>
>> this is the new patch about the extended wctomb_r/mbtowc_r stuff.
>> [...]
>> Again, the patch is split in two. The first one containing all changes
>> except those in ctype, the second one containg the ctype changes.
>>
>
> This is part two of the patch, just the ctype stuff.
>
>
Ok.
-- Jeff J.
> Corinna
>
>
> Index: libc/ctype/iswalpha.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswalpha.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswalpha.c
> --- libc/ctype/iswalpha.c 3 Mar 2009 09:28:44 -0000 1.5
> +++ libc/ctype/iswalpha.c 22 Mar 2009 16:25:06 -0000
> @@ -70,270 +70,253 @@ int
> _DEFUN(iswalpha,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> + unsigned const char *table;
> + unsigned char *ptr;
> + unsigned char ctmp;
> + int size;
> + wint_t x;
>
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> + c = __jp2uc (c, JP_EUCJP);
> +
> + x = (c >> 8);
> + /* for some large sections, all characters are alphabetic so handle them here */
> + if ((x >= 0x34 && x <= 0x4c) ||
> + (x >= 0x4e && x <= 0x9e) ||
> + (x >= 0xac && x <= 0xd6) ||
> + (x >= 0x200 && x <= 0x2a5))
> + return 1;
> +
> + switch (x)
> {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> + case 0x00:
> + table = u0;
> + size = sizeof(u0);
> + break;
> + case 0x01:
> + case 0x15:
> + case 0xa0:
> + case 0xa1:
> + case 0xa2:
> + case 0xa3:
> + case 0xf9:
> + case 0xfc:
> + case 0x2f8:
> + case 0x2f9:
> + return 1;
> + case 0x02:
> + table = u2;
> + size = sizeof(u2);
> + break;
> + case 0x03:
> + table = u3;
> + size = sizeof(u3);
> + break;
> + case 0x04:
> + table = u4;
> + size = sizeof(u4);
> + break;
> + case 0x05:
> + table = u5;
> + size = sizeof(u5);
> + break;
> + case 0x06:
> + table = u6;
> + size = sizeof(u6);
> + break;
> + case 0x07:
> + table = u7;
> + size = sizeof(u7);
> + break;
> + case 0x09:
> + table = u9;
> + size = sizeof(u9);
> + break;
> + case 0x0a:
> + table = ua;
> + size = sizeof(ua);
> + break;
> + case 0x0b:
> + table = ub;
> + size = sizeof(ub);
> + break;
> + case 0x0c:
> + table = uc;
> + size = sizeof(uc);
> + break;
> + case 0x0d:
> + table = ud;
> + size = sizeof(ud);
> + break;
> + case 0x0e:
> + table = ue;
> + size = sizeof(ue);
> + break;
> + case 0x0f:
> + table = uf;
> + size = sizeof(uf);
> + break;
> + case 0x10:
> + table = u10;
> + size = sizeof(u10);
> + break;
> + case 0x11:
> + table = u11;
> + size = sizeof(u11);
> + break;
> + case 0x12:
> + table = u12;
> + size = sizeof(u12);
> + break;
> + case 0x13:
> + table = u13;
> + size = sizeof(u13);
> + break;
> + case 0x14:
> + table = u14;
> + size = sizeof(u14);
> + break;
> + case 0x16:
> + table = u16;
> + size = sizeof(u16);
> + break;
> + case 0x17:
> + table = u17;
> + size = sizeof(u17);
> + break;
> + case 0x18:
> + table = u18;
> + size = sizeof(u18);
> + break;
> + case 0x1e:
> + table = u1e;
> + size = sizeof(u1e);
> + break;
> + case 0x1f:
> + table = u1f;
> + size = sizeof(u1f);
> + break;
> + case 0x20:
> + table = u20;
> + size = sizeof(u20);
> + break;
> + case 0x21:
> + table = u21;
> + size = sizeof(u21);
> + break;
> + case 0x24:
> + table = u24;
> + size = sizeof(u24);
> + break;
> + case 0x30:
> + table = u30;
> + size = sizeof(u30);
> + break;
> + case 0x31:
> + table = u31;
> + size = sizeof(u31);
> + break;
> + case 0x4d:
> + table = u4d;
> + size = sizeof(u4d);
> + break;
> + case 0x9f:
> + table = u9f;
> + size = sizeof(u9f);
> + break;
> + case 0xa4:
> + table = ua4;
> + size = sizeof(ua4);
> + break;
> + case 0xd7:
> + table = ud7;
> + size = sizeof(ud7);
> + break;
> + case 0xfa:
> + table = ufa;
> + size = sizeof(ufa);
> + break;
> + case 0xfb:
> + table = ufb;
> + size = sizeof(ufb);
> + break;
> + case 0xfd:
> + table = ufd;
> + size = sizeof(ufd);
> + break;
> + case 0xfe:
> + table = ufe;
> + size = sizeof(ufe);
> + break;
> + case 0xff:
> + table = uff;
> + size = sizeof(uff);
> + break;
> + case 0x103:
> + table = u103;
> + size = sizeof(u103);
> + break;
> + case 0x104:
> + table = u104;
> + size = sizeof(u104);
> + break;
> + case 0x1d4:
> + table = u1d4;
> + size = sizeof(u1d4);
> + break;
> + case 0x1d5:
> + table = u1d5;
> + size = sizeof(u1d5);
> + break;
> + case 0x1d6:
> + table = u1d6;
> + size = sizeof(u1d6);
> + break;
> + case 0x1d7:
> + table = u1d7;
> + size = sizeof(u1d7);
> + break;
> + case 0x2a6:
> + table = u2a6;
> + size = sizeof(u2a6);
> + break;
> + case 0x2fa:
> + table = u2fa;
> + size = sizeof(u2fa);
> + break;
> + default:
> + return 0;
> }
> -
> - if (unicode)
> + /* we have narrowed down to a section of 256 characters to check */
> + /* now check if c matches the alphabetic wide-chars within that section */
> + ptr = (unsigned char *)table;
> + ctmp = (unsigned char)c;
> + while (ptr < table + size)
> {
> - unsigned const char *table;
> - unsigned char *ptr;
> - unsigned char ctmp;
> - int size;
> - wint_t x = (c >> 8);
> -
> - /* for some large sections, all characters are alphabetic so handle them here */
> - if ((x >= 0x34 && x <= 0x4c) ||
> - (x >= 0x4e && x <= 0x9e) ||
> - (x >= 0xac && x <= 0xd6) ||
> - (x >= 0x200 && x <= 0x2a5))
> + if (ctmp == *ptr)
> return 1;
> -
> - switch (x)
> - {
> - case 0x00:
> - table = u0;
> - size = sizeof(u0);
> - break;
> - case 0x01:
> - case 0x15:
> - case 0xa0:
> - case 0xa1:
> - case 0xa2:
> - case 0xa3:
> - case 0xf9:
> - case 0xfc:
> - case 0x2f8:
> - case 0x2f9:
> - return 1;
> - case 0x02:
> - table = u2;
> - size = sizeof(u2);
> - break;
> - case 0x03:
> - table = u3;
> - size = sizeof(u3);
> - break;
> - case 0x04:
> - table = u4;
> - size = sizeof(u4);
> - break;
> - case 0x05:
> - table = u5;
> - size = sizeof(u5);
> - break;
> - case 0x06:
> - table = u6;
> - size = sizeof(u6);
> - break;
> - case 0x07:
> - table = u7;
> - size = sizeof(u7);
> - break;
> - case 0x09:
> - table = u9;
> - size = sizeof(u9);
> - break;
> - case 0x0a:
> - table = ua;
> - size = sizeof(ua);
> - break;
> - case 0x0b:
> - table = ub;
> - size = sizeof(ub);
> - break;
> - case 0x0c:
> - table = uc;
> - size = sizeof(uc);
> - break;
> - case 0x0d:
> - table = ud;
> - size = sizeof(ud);
> - break;
> - case 0x0e:
> - table = ue;
> - size = sizeof(ue);
> - break;
> - case 0x0f:
> - table = uf;
> - size = sizeof(uf);
> - break;
> - case 0x10:
> - table = u10;
> - size = sizeof(u10);
> - break;
> - case 0x11:
> - table = u11;
> - size = sizeof(u11);
> - break;
> - case 0x12:
> - table = u12;
> - size = sizeof(u12);
> - break;
> - case 0x13:
> - table = u13;
> - size = sizeof(u13);
> - break;
> - case 0x14:
> - table = u14;
> - size = sizeof(u14);
> - break;
> - case 0x16:
> - table = u16;
> - size = sizeof(u16);
> - break;
> - case 0x17:
> - table = u17;
> - size = sizeof(u17);
> - break;
> - case 0x18:
> - table = u18;
> - size = sizeof(u18);
> - break;
> - case 0x1e:
> - table = u1e;
> - size = sizeof(u1e);
> - break;
> - case 0x1f:
> - table = u1f;
> - size = sizeof(u1f);
> - break;
> - case 0x20:
> - table = u20;
> - size = sizeof(u20);
> - break;
> - case 0x21:
> - table = u21;
> - size = sizeof(u21);
> - break;
> - case 0x24:
> - table = u24;
> - size = sizeof(u24);
> - break;
> - case 0x30:
> - table = u30;
> - size = sizeof(u30);
> - break;
> - case 0x31:
> - table = u31;
> - size = sizeof(u31);
> - break;
> - case 0x4d:
> - table = u4d;
> - size = sizeof(u4d);
> - break;
> - case 0x9f:
> - table = u9f;
> - size = sizeof(u9f);
> - break;
> - case 0xa4:
> - table = ua4;
> - size = sizeof(ua4);
> - break;
> - case 0xd7:
> - table = ud7;
> - size = sizeof(ud7);
> - break;
> - case 0xfa:
> - table = ufa;
> - size = sizeof(ufa);
> - break;
> - case 0xfb:
> - table = ufb;
> - size = sizeof(ufb);
> - break;
> - case 0xfd:
> - table = ufd;
> - size = sizeof(ufd);
> - break;
> - case 0xfe:
> - table = ufe;
> - size = sizeof(ufe);
> - break;
> - case 0xff:
> - table = uff;
> - size = sizeof(uff);
> - break;
> - case 0x103:
> - table = u103;
> - size = sizeof(u103);
> - break;
> - case 0x104:
> - table = u104;
> - size = sizeof(u104);
> - break;
> - case 0x1d4:
> - table = u1d4;
> - size = sizeof(u1d4);
> - break;
> - case 0x1d5:
> - table = u1d5;
> - size = sizeof(u1d5);
> - break;
> - case 0x1d6:
> - table = u1d6;
> - size = sizeof(u1d6);
> - break;
> - case 0x1d7:
> - table = u1d7;
> - size = sizeof(u1d7);
> - break;
> - case 0x2a6:
> - table = u2a6;
> - size = sizeof(u2a6);
> - break;
> - case 0x2fa:
> - table = u2fa;
> - size = sizeof(u2fa);
> - break;
> - default:
> - return 0;
> - }
> - /* we have narrowed down to a section of 256 characters to check */
> - /* now check if c matches the alphabetic wide-chars within that section */
> - ptr = (unsigned char *)table;
> - ctmp = (unsigned char)c;
> - while (ptr < table + size)
> + if (ctmp < *ptr)
> + return 0;
> + /* otherwise c > *ptr */
> + /* look for 0x0 as next element which indicates a range */
> + ++ptr;
> + if (*ptr == 0x0)
> {
> - if (ctmp == *ptr)
> + /* we have a range..see if c falls within range */
> + ++ptr;
> + if (ctmp <= *ptr)
> return 1;
> - if (ctmp < *ptr)
> - return 0;
> - /* otherwise c > *ptr */
> - /* look for 0x0 as next element which indicates a range */
> ++ptr;
> - if (*ptr == 0x0)
> - {
> - /* we have a range..see if c falls within range */
> - ++ptr;
> - if (ctmp <= *ptr)
> - return 1;
> - ++ptr;
> - }
> }
> - /* not in table */
> - return 0;
> }
> -#endif /* _MB_CAPABLE */
> -
> + /* not in table */
> + return 0;
> +#else
> return (c < (wint_t)0x100 ? isalpha (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/iswblank.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswblank.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswblank.c
> --- libc/ctype/iswblank.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/iswblank.c 22 Mar 2009 16:25:06 -0000
> @@ -66,37 +66,18 @@ int
> _DEFUN(iswblank,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> - {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> - }
> -
> - if (unicode)
> - {
> - return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
> - (c >= 0x2000 && c <= 0x2006) ||
> - (c >= 0x2008 && c <= 0x200b) ||
> - c == 0x205f || c == 0x3000);
> - }
> -#endif /* _MB_CAPABLE */
> -
> + c = __jp2uc (c, JP_EUCJP);
> + return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
> + (c >= 0x2000 && c <= 0x2006) ||
> + (c >= 0x2008 && c <= 0x200b) ||
> + c == 0x205f || c == 0x3000);
> +#else
> return (c < 0x100 ? isblank (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/iswcntrl.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswcntrl.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswcntrl.c
> --- libc/ctype/iswcntrl.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/iswcntrl.c 22 Mar 2009 16:25:06 -0000
> @@ -66,36 +66,17 @@ int
> _DEFUN(iswcntrl,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> - {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> - }
> -
> - if (unicode)
> - {
> - return ((c >= 0x0000 && c <= 0x001f) ||
> - (c >= 0x007f && c <= 0x009f) ||
> - c == 0x2028 || c == 0x2029);
> - }
> -#endif /* _MB_CAPABLE */
> -
> + c = __jp2uc (c, JP_EUCJP);
> + return ((c >= 0x0000 && c <= 0x001f) ||
> + (c >= 0x007f && c <= 0x009f) ||
> + c == 0x2028 || c == 0x2029);
> +#else
> return (c < 0x100 ? iscntrl (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/iswprint.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswprint.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswprint.c
> --- libc/ctype/iswprint.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/iswprint.c 22 Mar 2009 16:25:06 -0000
> @@ -70,325 +70,308 @@ int
> _DEFUN(iswprint,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> + unsigned const char *table;
> + unsigned char *ptr;
> + unsigned char ctmp;
> + int size;
> + wint_t x;
> +
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> + c = __jp2uc (c, JP_EUCJP);
> +
> + x = (c >> 8);
> + /* for some large sections, all characters are printuation so handle them here */
> + if ((x >= 0x34 && x <= 0x4c) ||
> + (x >= 0x4e && x <= 0x9e) ||
> + (x >= 0xac && x <= 0xd6) ||
> + (x >= 0xe0 && x <= 0xf9) ||
> + (x >= 0x200 && x <= 0x2a5) ||
> + (x >= 0xf00 && x <= 0xffe) ||
> + (x >= 0x1000 && x <= 0x10fe))
> + return 1;
> +
> + switch (x)
> {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> + case 0x01:
> + case 0x15:
> + case 0x22:
> + case 0x25:
> + case 0x28:
> + case 0x29:
> + case 0x2a:
> + case 0xa0:
> + case 0xa1:
> + case 0xa2:
> + case 0xa3:
> + case 0xfc:
> + case 0x2f8:
> + case 0x2f9:
> + return 1;
> + case 0x00:
> + table = u0;
> + size = sizeof(u0);
> + break;
> + case 0x02:
> + table = u2;
> + size = sizeof(u2);
> + break;
> + case 0x03:
> + table = u3;
> + size = sizeof(u3);
> + break;
> + case 0x04:
> + table = u4;
> + size = sizeof(u4);
> + break;
> + case 0x05:
> + table = u5;
> + size = sizeof(u5);
> + break;
> + case 0x06:
> + table = u6;
> + size = sizeof(u6);
> + break;
> + case 0x07:
> + table = u7;
> + size = sizeof(u7);
> + break;
> + case 0x09:
> + table = u9;
> + size = sizeof(u9);
> + break;
> + case 0x0a:
> + table = ua;
> + size = sizeof(ua);
> + break;
> + case 0x0b:
> + table = ub;
> + size = sizeof(ub);
> + break;
> + case 0x0c:
> + table = uc;
> + size = sizeof(uc);
> + break;
> + case 0x0d:
> + table = ud;
> + size = sizeof(ud);
> + break;
> + case 0x0e:
> + table = ue;
> + size = sizeof(ue);
> + break;
> + case 0x0f:
> + table = uf;
> + size = sizeof(uf);
> + break;
> + case 0x10:
> + table = u10;
> + size = sizeof(u10);
> + break;
> + case 0x11:
> + table = u11;
> + size = sizeof(u11);
> + break;
> + case 0x12:
> + table = u12;
> + size = sizeof(u12);
> + break;
> + case 0x13:
> + table = u13;
> + size = sizeof(u13);
> + break;
> + case 0x14:
> + table = u14;
> + size = sizeof(u14);
> + break;
> + case 0x16:
> + table = u16;
> + size = sizeof(u16);
> + break;
> + case 0x17:
> + table = u17;
> + size = sizeof(u17);
> + break;
> + case 0x18:
> + table = u18;
> + size = sizeof(u18);
> + break;
> + case 0x1e:
> + table = u1e;
> + size = sizeof(u1e);
> + break;
> + case 0x1f:
> + table = u1f;
> + size = sizeof(u1f);
> + break;
> + case 0x20:
> + table = u20;
> + size = sizeof(u20);
> + break;
> + case 0x21:
> + table = u21;
> + size = sizeof(u21);
> + break;
> + case 0x23:
> + table = u23;
> + size = sizeof(u23);
> + break;
> + case 0x24:
> + table = u24;
> + size = sizeof(u24);
> + break;
> + case 0x26:
> + table = u26;
> + size = sizeof(u26);
> + break;
> + case 0x27:
> + table = u27;
> + size = sizeof(u27);
> + break;
> + case 0x2e:
> + table = u2e;
> + size = sizeof(u2e);
> + break;
> + case 0x2f:
> + table = u2f;
> + size = sizeof(u2f);
> + break;
> + case 0x30:
> + table = u30;
> + size = sizeof(u30);
> + break;
> + case 0x31:
> + table = u31;
> + size = sizeof(u31);
> + break;
> + case 0x32:
> + table = u32;
> + size = sizeof(u32);
> + break;
> + case 0x33:
> + table = u33;
> + size = sizeof(u33);
> + break;
> + case 0x4d:
> + table = u4d;
> + size = sizeof(u4d);
> + break;
> + case 0x9f:
> + table = u9f;
> + size = sizeof(u9f);
> + break;
> + case 0xa4:
> + table = ua4;
> + size = sizeof(ua4);
> + break;
> + case 0xd7:
> + table = ud7;
> + size = sizeof(ud7);
> + break;
> + case 0xfa:
> + table = ufa;
> + size = sizeof(ufa);
> + break;
> + case 0xfb:
> + table = ufb;
> + size = sizeof(ufb);
> + break;
> + case 0xfd:
> + table = ufd;
> + size = sizeof(ufd);
> + break;
> + case 0xfe:
> + table = ufe;
> + size = sizeof(ufe);
> + break;
> + case 0xff:
> + table = uff;
> + size = sizeof(uff);
> + break;
> + case 0x103:
> + table = u103;
> + size = sizeof(u103);
> + break;
> + case 0x104:
> + table = u104;
> + size = sizeof(u104);
> + break;
> + case 0x1d0:
> + table = u1d0;
> + size = sizeof(u1d0);
> + break;
> + case 0x1d1:
> + table = u1d1;
> + size = sizeof(u1d1);
> + break;
> + case 0x1d4:
> + table = u1d4;
> + size = sizeof(u1d4);
> + break;
> + case 0x1d5:
> + table = u1d5;
> + size = sizeof(u1d5);
> + break;
> + case 0x1d6:
> + table = u1d6;
> + size = sizeof(u1d6);
> + break;
> + case 0x1d7:
> + table = u1d7;
> + size = sizeof(u1d7);
> + break;
> + case 0x2a6:
> + table = u2a6;
> + size = sizeof(u2a6);
> + break;
> + case 0x2fa:
> + table = u2fa;
> + size = sizeof(u2fa);
> + break;
> + case 0xe00:
> + table = ue00;
> + size = sizeof(ue00);
> + break;
> + case 0xfff:
> + table = ufff;
> + size = sizeof(ufff);
> + break;
> + case 0x10ff:
> + table = u10ff;
> + size = sizeof(u10ff);
> + break;
> + default:
> + return 0;
> }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> + /* we have narrowed down to a section of 256 characters to check */
> + /* now check if c matches the printuation wide-chars within that section */
> + ptr = (unsigned char *)table;
> + ctmp = (unsigned char)c;
> + while (ptr < table + size)
> {
> - unicode = 1;
> - }
> -
> - if (unicode)
> - {
> - unsigned const char *table;
> - unsigned char *ptr;
> - unsigned char ctmp;
> - int size;
> - wint_t x = (c >> 8);
> -
> - /* for some large sections, all characters are printuation so handle them here */
> - if ((x >= 0x34 && x <= 0x4c) ||
> - (x >= 0x4e && x <= 0x9e) ||
> - (x >= 0xac && x <= 0xd6) ||
> - (x >= 0xe0 && x <= 0xf9) ||
> - (x >= 0x200 && x <= 0x2a5) ||
> - (x >= 0xf00 && x <= 0xffe) ||
> - (x >= 0x1000 && x <= 0x10fe))
> + if (ctmp == *ptr)
> return 1;
> -
> - switch (x)
> - {
> - case 0x01:
> - case 0x15:
> - case 0x22:
> - case 0x25:
> - case 0x28:
> - case 0x29:
> - case 0x2a:
> - case 0xa0:
> - case 0xa1:
> - case 0xa2:
> - case 0xa3:
> - case 0xfc:
> - case 0x2f8:
> - case 0x2f9:
> - return 1;
> - case 0x00:
> - table = u0;
> - size = sizeof(u0);
> - break;
> - case 0x02:
> - table = u2;
> - size = sizeof(u2);
> - break;
> - case 0x03:
> - table = u3;
> - size = sizeof(u3);
> - break;
> - case 0x04:
> - table = u4;
> - size = sizeof(u4);
> - break;
> - case 0x05:
> - table = u5;
> - size = sizeof(u5);
> - break;
> - case 0x06:
> - table = u6;
> - size = sizeof(u6);
> - break;
> - case 0x07:
> - table = u7;
> - size = sizeof(u7);
> - break;
> - case 0x09:
> - table = u9;
> - size = sizeof(u9);
> - break;
> - case 0x0a:
> - table = ua;
> - size = sizeof(ua);
> - break;
> - case 0x0b:
> - table = ub;
> - size = sizeof(ub);
> - break;
> - case 0x0c:
> - table = uc;
> - size = sizeof(uc);
> - break;
> - case 0x0d:
> - table = ud;
> - size = sizeof(ud);
> - break;
> - case 0x0e:
> - table = ue;
> - size = sizeof(ue);
> - break;
> - case 0x0f:
> - table = uf;
> - size = sizeof(uf);
> - break;
> - case 0x10:
> - table = u10;
> - size = sizeof(u10);
> - break;
> - case 0x11:
> - table = u11;
> - size = sizeof(u11);
> - break;
> - case 0x12:
> - table = u12;
> - size = sizeof(u12);
> - break;
> - case 0x13:
> - table = u13;
> - size = sizeof(u13);
> - break;
> - case 0x14:
> - table = u14;
> - size = sizeof(u14);
> - break;
> - case 0x16:
> - table = u16;
> - size = sizeof(u16);
> - break;
> - case 0x17:
> - table = u17;
> - size = sizeof(u17);
> - break;
> - case 0x18:
> - table = u18;
> - size = sizeof(u18);
> - break;
> - case 0x1e:
> - table = u1e;
> - size = sizeof(u1e);
> - break;
> - case 0x1f:
> - table = u1f;
> - size = sizeof(u1f);
> - break;
> - case 0x20:
> - table = u20;
> - size = sizeof(u20);
> - break;
> - case 0x21:
> - table = u21;
> - size = sizeof(u21);
> - break;
> - case 0x23:
> - table = u23;
> - size = sizeof(u23);
> - break;
> - case 0x24:
> - table = u24;
> - size = sizeof(u24);
> - break;
> - case 0x26:
> - table = u26;
> - size = sizeof(u26);
> - break;
> - case 0x27:
> - table = u27;
> - size = sizeof(u27);
> - break;
> - case 0x2e:
> - table = u2e;
> - size = sizeof(u2e);
> - break;
> - case 0x2f:
> - table = u2f;
> - size = sizeof(u2f);
> - break;
> - case 0x30:
> - table = u30;
> - size = sizeof(u30);
> - break;
> - case 0x31:
> - table = u31;
> - size = sizeof(u31);
> - break;
> - case 0x32:
> - table = u32;
> - size = sizeof(u32);
> - break;
> - case 0x33:
> - table = u33;
> - size = sizeof(u33);
> - break;
> - case 0x4d:
> - table = u4d;
> - size = sizeof(u4d);
> - break;
> - case 0x9f:
> - table = u9f;
> - size = sizeof(u9f);
> - break;
> - case 0xa4:
> - table = ua4;
> - size = sizeof(ua4);
> - break;
> - case 0xd7:
> - table = ud7;
> - size = sizeof(ud7);
> - break;
> - case 0xfa:
> - table = ufa;
> - size = sizeof(ufa);
> - break;
> - case 0xfb:
> - table = ufb;
> - size = sizeof(ufb);
> - break;
> - case 0xfd:
> - table = ufd;
> - size = sizeof(ufd);
> - break;
> - case 0xfe:
> - table = ufe;
> - size = sizeof(ufe);
> - break;
> - case 0xff:
> - table = uff;
> - size = sizeof(uff);
> - break;
> - case 0x103:
> - table = u103;
> - size = sizeof(u103);
> - break;
> - case 0x104:
> - table = u104;
> - size = sizeof(u104);
> - break;
> - case 0x1d0:
> - table = u1d0;
> - size = sizeof(u1d0);
> - break;
> - case 0x1d1:
> - table = u1d1;
> - size = sizeof(u1d1);
> - break;
> - case 0x1d4:
> - table = u1d4;
> - size = sizeof(u1d4);
> - break;
> - case 0x1d5:
> - table = u1d5;
> - size = sizeof(u1d5);
> - break;
> - case 0x1d6:
> - table = u1d6;
> - size = sizeof(u1d6);
> - break;
> - case 0x1d7:
> - table = u1d7;
> - size = sizeof(u1d7);
> - break;
> - case 0x2a6:
> - table = u2a6;
> - size = sizeof(u2a6);
> - break;
> - case 0x2fa:
> - table = u2fa;
> - size = sizeof(u2fa);
> - break;
> - case 0xe00:
> - table = ue00;
> - size = sizeof(ue00);
> - break;
> - case 0xfff:
> - table = ufff;
> - size = sizeof(ufff);
> - break;
> - case 0x10ff:
> - table = u10ff;
> - size = sizeof(u10ff);
> - break;
> - default:
> - return 0;
> - }
> - /* we have narrowed down to a section of 256 characters to check */
> - /* now check if c matches the printuation wide-chars within that section */
> - ptr = (unsigned char *)table;
> - ctmp = (unsigned char)c;
> - while (ptr < table + size)
> + if (ctmp < *ptr)
> + return 0;
> + /* otherwise c > *ptr */
> + /* look for 0x0 as next element which indicates a range */
> + ++ptr;
> + if (*ptr == 0x0)
> {
> - if (ctmp == *ptr)
> + /* we have a range..see if c falls within range */
> + ++ptr;
> + if (ctmp <= *ptr)
> return 1;
> - if (ctmp < *ptr)
> - return 0;
> - /* otherwise c > *ptr */
> - /* look for 0x0 as next element which indicates a range */
> ++ptr;
> - if (*ptr == 0x0)
> - {
> - /* we have a range..see if c falls within range */
> - ++ptr;
> - if (ctmp <= *ptr)
> - return 1;
> - ++ptr;
> - }
> }
> - /* not in table */
> - return 0;
> }
> -#endif /* _MB_CAPABLE */
> -
> + /* not in table */
> + return 0;
> +#else
> return (c < (wint_t)0x100 ? isprint (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/iswpunct.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswpunct.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswpunct.c
> --- libc/ctype/iswpunct.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/iswpunct.c 22 Mar 2009 16:25:06 -0000
> @@ -70,260 +70,243 @@ int
> _DEFUN(iswpunct,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> + unsigned const char *table;
> + unsigned char *ptr;
> + unsigned char ctmp;
> + int size;
> + wint_t x;
>
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> + c = __jp2uc (c, JP_EUCJP);
> +
> + x = (c >> 8);
> + /* for some large sections, all characters are punctuation so handle them here */
> + if ((x >= 0xe0 && x <= 0xf8) ||
> + (x >= 0xf00 && x <= 0xffe) ||
> + (x >= 0x1000 && x <= 0x10fe))
> + return 1;
> +
> + switch (x)
> {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> + case 0x22:
> + case 0x25:
> + case 0x28:
> + case 0x29:
> + case 0x2a:
> + return 1;
> + case 0x00:
> + table = u0;
> + size = sizeof(u0);
> + break;
> + case 0x02:
> + table = u2;
> + size = sizeof(u2);
> + break;
> + case 0x03:
> + table = u3;
> + size = sizeof(u3);
> + break;
> + case 0x04:
> + table = u4;
> + size = sizeof(u4);
> + break;
> + case 0x05:
> + table = u5;
> + size = sizeof(u5);
> + break;
> + case 0x06:
> + table = u6;
> + size = sizeof(u6);
> + break;
> + case 0x07:
> + table = u7;
> + size = sizeof(u7);
> + break;
> + case 0x09:
> + table = u9;
> + size = sizeof(u9);
> + break;
> + case 0x0a:
> + table = ua;
> + size = sizeof(ua);
> + break;
> + case 0x0b:
> + table = ub;
> + size = sizeof(ub);
> + break;
> + case 0x0c:
> + table = uc;
> + size = sizeof(uc);
> + break;
> + case 0x0d:
> + table = ud;
> + size = sizeof(ud);
> + break;
> + case 0x0e:
> + table = ue;
> + size = sizeof(ue);
> + break;
> + case 0x0f:
> + table = uf;
> + size = sizeof(uf);
> + break;
> + case 0x10:
> + table = u10;
> + size = sizeof(u10);
> + break;
> + case 0x13:
> + table = u13;
> + size = sizeof(u13);
> + break;
> + case 0x16:
> + table = u16;
> + size = sizeof(u16);
> + break;
> + case 0x17:
> + table = u17;
> + size = sizeof(u17);
> + break;
> + case 0x18:
> + table = u18;
> + size = sizeof(u18);
> + break;
> + case 0x1f:
> + table = u1f;
> + size = sizeof(u1f);
> + break;
> + case 0x20:
> + table = u20;
> + size = sizeof(u20);
> + break;
> + case 0x21:
> + table = u21;
> + size = sizeof(u21);
> + break;
> + case 0x23:
> + table = u23;
> + size = sizeof(u23);
> + break;
> + case 0x24:
> + table = u24;
> + size = sizeof(u24);
> + break;
> + case 0x26:
> + table = u26;
> + size = sizeof(u26);
> + break;
> + case 0x27:
> + table = u27;
> + size = sizeof(u27);
> + break;
> + case 0x2e:
> + table = u2e;
> + size = sizeof(u2e);
> + break;
> + case 0x2f:
> + table = u2f;
> + size = sizeof(u2f);
> + break;
> + case 0x30:
> + table = u30;
> + size = sizeof(u30);
> + break;
> + case 0x31:
> + table = u31;
> + size = sizeof(u31);
> + break;
> + case 0x32:
> + table = u32;
> + size = sizeof(u32);
> + break;
> + case 0x33:
> + table = u33;
> + size = sizeof(u33);
> + break;
> + case 0xa4:
> + table = ua4;
> + size = sizeof(ua4);
> + break;
> + case 0xfb:
> + table = ufb;
> + size = sizeof(ufb);
> + break;
> + case 0xfd:
> + table = ufd;
> + size = sizeof(ufd);
> + break;
> + case 0xfe:
> + table = ufe;
> + size = sizeof(ufe);
> + break;
> + case 0xff:
> + table = uff;
> + size = sizeof(uff);
> + break;
> + case 0x103:
> + table = u103;
> + size = sizeof(u103);
> + break;
> + case 0x1d0:
> + table = u1d0;
> + size = sizeof(u1d0);
> + break;
> + case 0x1d1:
> + table = u1d1;
> + size = sizeof(u1d1);
> + break;
> + case 0x1d6:
> + table = u1d6;
> + size = sizeof(u1d6);
> + break;
> + case 0x1d7:
> + table = u1d7;
> + size = sizeof(u1d7);
> + break;
> + case 0xe00:
> + table = ue00;
> + size = sizeof(ue00);
> + break;
> + case 0xfff:
> + table = ufff;
> + size = sizeof(ufff);
> + break;
> + case 0x10ff:
> + table = u10ff;
> + size = sizeof(u10ff);
> + break;
> + default:
> + return 0;
> }
> -
> - if (unicode)
> + /* we have narrowed down to a section of 256 characters to check */
> + /* now check if c matches the punctuation wide-chars within that section */
> + ptr = (unsigned char *)table;
> + ctmp = (unsigned char)c;
> + while (ptr < table + size)
> {
> - unsigned const char *table;
> - unsigned char *ptr;
> - unsigned char ctmp;
> - int size;
> - wint_t x = (c >> 8);
> -
> - /* for some large sections, all characters are punctuation so handle them here */
> - if ((x >= 0xe0 && x <= 0xf8) ||
> - (x >= 0xf00 && x <= 0xffe) ||
> - (x >= 0x1000 && x <= 0x10fe))
> + if (ctmp == *ptr)
> return 1;
> -
> - switch (x)
> - {
> - case 0x22:
> - case 0x25:
> - case 0x28:
> - case 0x29:
> - case 0x2a:
> - return 1;
> - case 0x00:
> - table = u0;
> - size = sizeof(u0);
> - break;
> - case 0x02:
> - table = u2;
> - size = sizeof(u2);
> - break;
> - case 0x03:
> - table = u3;
> - size = sizeof(u3);
> - break;
> - case 0x04:
> - table = u4;
> - size = sizeof(u4);
> - break;
> - case 0x05:
> - table = u5;
> - size = sizeof(u5);
> - break;
> - case 0x06:
> - table = u6;
> - size = sizeof(u6);
> - break;
> - case 0x07:
> - table = u7;
> - size = sizeof(u7);
> - break;
> - case 0x09:
> - table = u9;
> - size = sizeof(u9);
> - break;
> - case 0x0a:
> - table = ua;
> - size = sizeof(ua);
> - break;
> - case 0x0b:
> - table = ub;
> - size = sizeof(ub);
> - break;
> - case 0x0c:
> - table = uc;
> - size = sizeof(uc);
> - break;
> - case 0x0d:
> - table = ud;
> - size = sizeof(ud);
> - break;
> - case 0x0e:
> - table = ue;
> - size = sizeof(ue);
> - break;
> - case 0x0f:
> - table = uf;
> - size = sizeof(uf);
> - break;
> - case 0x10:
> - table = u10;
> - size = sizeof(u10);
> - break;
> - case 0x13:
> - table = u13;
> - size = sizeof(u13);
> - break;
> - case 0x16:
> - table = u16;
> - size = sizeof(u16);
> - break;
> - case 0x17:
> - table = u17;
> - size = sizeof(u17);
> - break;
> - case 0x18:
> - table = u18;
> - size = sizeof(u18);
> - break;
> - case 0x1f:
> - table = u1f;
> - size = sizeof(u1f);
> - break;
> - case 0x20:
> - table = u20;
> - size = sizeof(u20);
> - break;
> - case 0x21:
> - table = u21;
> - size = sizeof(u21);
> - break;
> - case 0x23:
> - table = u23;
> - size = sizeof(u23);
> - break;
> - case 0x24:
> - table = u24;
> - size = sizeof(u24);
> - break;
> - case 0x26:
> - table = u26;
> - size = sizeof(u26);
> - break;
> - case 0x27:
> - table = u27;
> - size = sizeof(u27);
> - break;
> - case 0x2e:
> - table = u2e;
> - size = sizeof(u2e);
> - break;
> - case 0x2f:
> - table = u2f;
> - size = sizeof(u2f);
> - break;
> - case 0x30:
> - table = u30;
> - size = sizeof(u30);
> - break;
> - case 0x31:
> - table = u31;
> - size = sizeof(u31);
> - break;
> - case 0x32:
> - table = u32;
> - size = sizeof(u32);
> - break;
> - case 0x33:
> - table = u33;
> - size = sizeof(u33);
> - break;
> - case 0xa4:
> - table = ua4;
> - size = sizeof(ua4);
> - break;
> - case 0xfb:
> - table = ufb;
> - size = sizeof(ufb);
> - break;
> - case 0xfd:
> - table = ufd;
> - size = sizeof(ufd);
> - break;
> - case 0xfe:
> - table = ufe;
> - size = sizeof(ufe);
> - break;
> - case 0xff:
> - table = uff;
> - size = sizeof(uff);
> - break;
> - case 0x103:
> - table = u103;
> - size = sizeof(u103);
> - break;
> - case 0x1d0:
> - table = u1d0;
> - size = sizeof(u1d0);
> - break;
> - case 0x1d1:
> - table = u1d1;
> - size = sizeof(u1d1);
> - break;
> - case 0x1d6:
> - table = u1d6;
> - size = sizeof(u1d6);
> - break;
> - case 0x1d7:
> - table = u1d7;
> - size = sizeof(u1d7);
> - break;
> - case 0xe00:
> - table = ue00;
> - size = sizeof(ue00);
> - break;
> - case 0xfff:
> - table = ufff;
> - size = sizeof(ufff);
> - break;
> - case 0x10ff:
> - table = u10ff;
> - size = sizeof(u10ff);
> - break;
> - default:
> - return 0;
> - }
> - /* we have narrowed down to a section of 256 characters to check */
> - /* now check if c matches the punctuation wide-chars within that section */
> - ptr = (unsigned char *)table;
> - ctmp = (unsigned char)c;
> - while (ptr < table + size)
> + if (ctmp < *ptr)
> + return 0;
> + /* otherwise c > *ptr */
> + /* look for 0x0 as next element which indicates a range */
> + ++ptr;
> + if (*ptr == 0x0)
> {
> - if (ctmp == *ptr)
> + /* we have a range..see if c falls within range */
> + ++ptr;
> + if (ctmp <= *ptr)
> return 1;
> - if (ctmp < *ptr)
> - return 0;
> - /* otherwise c > *ptr */
> - /* look for 0x0 as next element which indicates a range */
> ++ptr;
> - if (*ptr == 0x0)
> - {
> - /* we have a range..see if c falls within range */
> - ++ptr;
> - if (ctmp <= *ptr)
> - return 1;
> - ++ptr;
> - }
> }
> - /* not in table */
> - return 0;
> }
> -#endif /* _MB_CAPABLE */
> -
> + /* not in table */
> + return 0;
> +#else
> return (c < (wint_t)0x100 ? ispunct (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/iswspace.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswspace.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswspace.c
> --- libc/ctype/iswspace.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/iswspace.c 22 Mar 2009 16:25:06 -0000
> @@ -66,38 +66,19 @@ int
> _DEFUN(iswspace,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> - {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> - }
> -
> - if (unicode)
> - {
> - return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
> - (c >= 0x2000 && c <= 0x2006) ||
> - (c >= 0x2008 && c <= 0x200b) ||
> - c == 0x2028 || c == 0x2029 ||
> - c == 0x205f || c == 0x3000);
> - }
> -#endif /* _MB_CAPABLE */
> -
> + c = __jp2uc (c, JP_EUCJP);
> + return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
> + (c >= 0x2000 && c <= 0x2006) ||
> + (c >= 0x2008 && c <= 0x200b) ||
> + c == 0x2028 || c == 0x2029 ||
> + c == 0x205f || c == 0x3000);
> +#else
> return (c < 0x100 ? isspace (c) : 0);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/jp2uc.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/jp2uc.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 jp2uc.c
> --- libc/ctype/jp2uc.c 23 Apr 2004 21:44:21 -0000 1.3
> +++ libc/ctype/jp2uc.c 22 Mar 2009 16:25:06 -0000
> @@ -41,6 +41,11 @@
> wint_t
> _DEFUN (__jp2uc, (c, type), wint_t c _AND int type)
> {
> +/* Under Cygwin, the incoming wide character is already given in UTF due
> + to the requirements of the underlying OS. */
> +#ifdef __CYGWIN__
> + return c;
> +#else
> int index, adj;
> unsigned char byte1, byte2;
> wint_t ret;
> @@ -140,6 +145,7 @@ _DEFUN (__jp2uc, (c, type), wint_t c _AN
> }
>
> return WEOF;
> +#endif
> }
>
> #endif /* _MB_CAPABLE */
> Index: libc/ctype/towlower.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/towlower.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 towlower.c
> --- libc/ctype/towlower.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/towlower.c 22 Mar 2009 16:25:06 -0000
> @@ -70,405 +70,388 @@ wint_t
> _DEFUN(towlower,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> + c = __jp2uc (c, JP_EUCJP);
> +
> + if (c < 0x100)
> {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> - }
> + if ((c >= 0x0041 && c <= 0x005a) ||
> + (c >= 0x00c0 && c <= 0x00de))
> + return (c + 0x20);
>
> - if (unicode)
> + if (c == 0x00b5)
> + return 0x03bc;
> +
> + return c;
> + }
> + else if (c < 0x300)
> {
> - if (c < 0x100)
> + if ((c >= 0x0100 && c <= 0x012e) ||
> + (c >= 0x0132 && c <= 0x0136) ||
> + (c >= 0x014a && c <= 0x0176) ||
> + (c >= 0x01de && c <= 0x01ee) ||
> + (c >= 0x01f8 && c <= 0x021e) ||
> + (c >= 0x0222 && c <= 0x0232))
> {
> - if ((c >= 0x0041 && c <= 0x005a) ||
> - (c >= 0x00c0 && c <= 0x00de))
> - return (c + 0x20);
> + if (!(c & 0x01))
> + return (c + 1);
> + return c;
> + }
>
> - if (c == 0x00b5)
> - return 0x03bc;
> -
> + if ((c >= 0x0139 && c <= 0x0147) ||
> + (c >= 0x01cd && c <= 0x91db))
> + {
> + if (c & 0x01)
> + return (c + 1);
> return c;
> }
> - else if (c < 0x300)
> +
> + if (c >= 0x178 && c <= 0x01f7)
> {
> - if ((c >= 0x0100 && c <= 0x012e) ||
> - (c >= 0x0132 && c <= 0x0136) ||
> - (c >= 0x014a && c <= 0x0176) ||
> - (c >= 0x01de && c <= 0x01ee) ||
> - (c >= 0x01f8 && c <= 0x021e) ||
> - (c >= 0x0222 && c <= 0x0232))
> + wint_t k;
> + switch (c)
> {
> - if (!(c & 0x01))
> - return (c + 1);
> - return c;
> + case 0x0178:
> + k = 0x00ff;
> + break;
> + case 0x0179:
> + case 0x017b:
> + case 0x017d:
> + case 0x0182:
> + case 0x0184:
> + case 0x0187:
> + case 0x018b:
> + case 0x0191:
> + case 0x0198:
> + case 0x01a0:
> + case 0x01a2:
> + case 0x01a4:
> + case 0x01a7:
> + case 0x01ac:
> + case 0x01af:
> + case 0x01b3:
> + case 0x01b5:
> + case 0x01b8:
> + case 0x01bc:
> + case 0x01c5:
> + case 0x01c8:
> + case 0x01cb:
> + case 0x01cd:
> + case 0x01cf:
> + case 0x01d1:
> + case 0x01d3:
> + case 0x01d5:
> + case 0x01d7:
> + case 0x01d9:
> + case 0x01db:
> + case 0x01f2:
> + case 0x01f4:
> + k = c + 1;
> + break;
> + case 0x017f:
> + k = 0x0073;
> + break;
> + case 0x0181:
> + k = 0x0253;
> + break;
> + case 0x0186:
> + k = 0x0254;
> + break;
> + case 0x0189:
> + k = 0x0256;
> + break;
> + case 0x018a:
> + k = 0x0257;
> + break;
> + case 0x018e:
> + k = 0x01dd;
> + break;
> + case 0x018f:
> + k = 0x0259;
> + break;
> + case 0x0190:
> + k = 0x025b;
> + break;
> + case 0x0193:
> + k = 0x0260;
> + break;
> + case 0x0194:
> + k = 0x0263;
> + break;
> + case 0x0196:
> + k = 0x0269;
> + break;
> + case 0x0197:
> + k = 0x0268;
> + break;
> + case 0x019c:
> + k = 0x026f;
> + break;
> + case 0x019d:
> + k = 0x0272;
> + break;
> + case 0x019f:
> + k = 0x0275;
> + break;
> + case 0x01a6:
> + k = 0x0280;
> + break;
> + case 0x01a9:
> + k = 0x0283;
> + break;
> + case 0x01ae:
> + k = 0x0288;
> + break;
> + case 0x01b1:
> + k = 0x028a;
> + break;
> + case 0x01b2:
> + k = 0x028b;
> + break;
> + case 0x01b7:
> + k = 0x0292;
> + break;
> + case 0x01c4:
> + case 0x01c7:
> + case 0x01ca:
> + case 0x01f1:
> + k = c + 2;
> + break;
> + case 0x01f6:
> + k = 0x0195;
> + break;
> + case 0x01f7:
> + k = 0x01bf;
> + break;
> + default:
> + k = 0;
> }
> + if (k != 0)
> + return k;
> + }
>
> - if ((c >= 0x0139 && c <= 0x0147) ||
> - (c >= 0x01cd && c <= 0x91db))
> - {
> - if (c & 0x01)
> - return (c + 1);
> - return c;
> - }
> -
> - if (c >= 0x178 && c <= 0x01f7)
> + if (c == 0x0220)
> + return 0x019e;
> + }
> + else if (c < 0x0400)
> + {
> + if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
> + return (c + 0x20);
> + if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
> + return (c + 1);
> + if (c >= 0x0386 && c <= 0x03f5)
> + {
> + wint_t k;
> + switch (c)
> {
> - wint_t k;
> - switch (c)
> - {
> - case 0x0178:
> - k = 0x00ff;
> - break;
> - case 0x0179:
> - case 0x017b:
> - case 0x017d:
> - case 0x0182:
> - case 0x0184:
> - case 0x0187:
> - case 0x018b:
> - case 0x0191:
> - case 0x0198:
> - case 0x01a0:
> - case 0x01a2:
> - case 0x01a4:
> - case 0x01a7:
> - case 0x01ac:
> - case 0x01af:
> - case 0x01b3:
> - case 0x01b5:
> - case 0x01b8:
> - case 0x01bc:
> - case 0x01c5:
> - case 0x01c8:
> - case 0x01cb:
> - case 0x01cd:
> - case 0x01cf:
> - case 0x01d1:
> - case 0x01d3:
> - case 0x01d5:
> - case 0x01d7:
> - case 0x01d9:
> - case 0x01db:
> - case 0x01f2:
> - case 0x01f4:
> - k = c + 1;
> - break;
> - case 0x017f:
> - k = 0x0073;
> - break;
> - case 0x0181:
> - k = 0x0253;
> - break;
> - case 0x0186:
> - k = 0x0254;
> - break;
> - case 0x0189:
> - k = 0x0256;
> - break;
> - case 0x018a:
> - k = 0x0257;
> - break;
> - case 0x018e:
> - k = 0x01dd;
> - break;
> - case 0x018f:
> - k = 0x0259;
> - break;
> - case 0x0190:
> - k = 0x025b;
> - break;
> - case 0x0193:
> - k = 0x0260;
> - break;
> - case 0x0194:
> - k = 0x0263;
> - break;
> - case 0x0196:
> - k = 0x0269;
> - break;
> - case 0x0197:
> - k = 0x0268;
> - break;
> - case 0x019c:
> - k = 0x026f;
> - break;
> - case 0x019d:
> - k = 0x0272;
> - break;
> - case 0x019f:
> - k = 0x0275;
> - break;
> - case 0x01a6:
> - k = 0x0280;
> - break;
> - case 0x01a9:
> - k = 0x0283;
> - break;
> - case 0x01ae:
> - k = 0x0288;
> - break;
> - case 0x01b1:
> - k = 0x028a;
> - break;
> - case 0x01b2:
> - k = 0x028b;
> - break;
> - case 0x01b7:
> - k = 0x0292;
> - break;
> - case 0x01c4:
> - case 0x01c7:
> - case 0x01ca:
> - case 0x01f1:
> - k = c + 2;
> - break;
> - case 0x01f6:
> - k = 0x0195;
> - break;
> - case 0x01f7:
> - k = 0x01bf;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> + case 0x0386:
> + k = 0x03ac;
> + break;
> + case 0x0388:
> + k = 0x03ad;
> + break;
> + case 0x0389:
> + k = 0x03ae;
> + break;
> + case 0x038a:
> + k = 0x03af;
> + break;
> + case 0x038c:
> + k = 0x03cc;
> + break;
> + case 0x038e:
> + k = 0x03cd;
> + break;
> + case 0x038f:
> + k = 0x038f;
> + break;
> + case 0x03c2:
> + k = 0x03c3;
> + break;
> + case 0x03d0:
> + k = 0x03b2;
> + break;
> + case 0x03d1:
> + k = 0x03b8;
> + break;
> + case 0x03d5:
> + k = 0x03c6;
> + break;
> + case 0x03d6:
> + k = 0x03c0;
> + break;
> + case 0x03f0:
> + k = 0x03ba;
> + break;
> + case 0x03f1:
> + k = 0x03c1;
> + break;
> + case 0x03f2:
> + k = 0x03c3;
> + break;
> + case 0x03f4:
> + k = 0x03b8;
> + break;
> + case 0x03f5:
> + k = 0x03b5;
> + break;
> + default:
> + k = 0;
> }
> -
> - if (c == 0x0220)
> - return 0x019e;
> + if (k != 0)
> + return k;
> }
> - else if (c < 0x0400)
> +
> + if (c == 0x0345)
> + return 0x03b9;
> + }
> + else if (c < 0x500)
> + {
> + if (c >= 0x0400 && c <= 0x040f)
> + return (c + 0x50);
> +
> + if (c >= 0x0410 && c <= 0x042f)
> + return (c + 0x20);
> +
> + if ((c >= 0x0460 && c <= 0x0480) ||
> + (c >= 0x048a && c <= 0x04be) ||
> + (c >= 0x04d0 && c <= 0x04f4) ||
> + (c == 0x04f8))
> {
> - if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
> - return (c + 0x20);
> - if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
> + if (!(c & 0x01))
> return (c + 1);
> - if (c >= 0x0386 && c <= 0x03f5)
> - {
> - wint_t k;
> - switch (c)
> - {
> - case 0x0386:
> - k = 0x03ac;
> - break;
> - case 0x0388:
> - k = 0x03ad;
> - break;
> - case 0x0389:
> - k = 0x03ae;
> - break;
> - case 0x038a:
> - k = 0x03af;
> - break;
> - case 0x038c:
> - k = 0x03cc;
> - break;
> - case 0x038e:
> - k = 0x03cd;
> - break;
> - case 0x038f:
> - k = 0x038f;
> - break;
> - case 0x03c2:
> - k = 0x03c3;
> - break;
> - case 0x03d0:
> - k = 0x03b2;
> - break;
> - case 0x03d1:
> - k = 0x03b8;
> - break;
> - case 0x03d5:
> - k = 0x03c6;
> - break;
> - case 0x03d6:
> - k = 0x03c0;
> - break;
> - case 0x03f0:
> - k = 0x03ba;
> - break;
> - case 0x03f1:
> - k = 0x03c1;
> - break;
> - case 0x03f2:
> - k = 0x03c3;
> - break;
> - case 0x03f4:
> - k = 0x03b8;
> - break;
> - case 0x03f5:
> - k = 0x03b5;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> - }
> -
> - if (c == 0x0345)
> - return 0x03b9;
> + return c;
> }
> - else if (c < 0x500)
> +
> + if (c >= 0x04c1 && c <= 0x04cd)
> {
> - if (c >= 0x0400 && c <= 0x040f)
> - return (c + 0x50);
> -
> - if (c >= 0x0410 && c <= 0x042f)
> - return (c + 0x20);
> -
> - if ((c >= 0x0460 && c <= 0x0480) ||
> - (c >= 0x048a && c <= 0x04be) ||
> - (c >= 0x04d0 && c <= 0x04f4) ||
> - (c == 0x04f8))
> - {
> - if (!(c & 0x01))
> - return (c + 1);
> - return c;
> - }
> -
> - if (c >= 0x04c1 && c <= 0x04cd)
> - {
> - if (c & 0x01)
> - return (c + 1);
> - return c;
> - }
> + if (c & 0x01)
> + return (c + 1);
> + return c;
> }
> - else if (c < 0x1f00)
> + }
> + else if (c < 0x1f00)
> + {
> + if ((c >= 0x0500 && c <= 0x050e) ||
> + (c >= 0x1e00 && c <= 0x1e94) ||
> + (c >= 0x1ea0 && c <= 0x1ef8))
> {
> - if ((c >= 0x0500 && c <= 0x050e) ||
> - (c >= 0x1e00 && c <= 0x1e94) ||
> - (c >= 0x1ea0 && c <= 0x1ef8))
> - {
> - if (!(c & 0x01))
> - return (c + 1);
> - return c;
> - }
> -
> - if (c >= 0x0531 && c <= 0x0556)
> - return (c + 0x30);
> -
> - if (c == 0x1e9b)
> - return 0x1e61;
> + if (!(c & 0x01))
> + return (c + 1);
> + return c;
> }
> - else if (c < 0x2000)
> +
> + if (c >= 0x0531 && c <= 0x0556)
> + return (c + 0x30);
> +
> + if (c == 0x1e9b)
> + return 0x1e61;
> + }
> + else if (c < 0x2000)
> + {
> + if ((c >= 0x1f08 && c <= 0x1f0f) ||
> + (c >= 0x1f18 && c <= 0x1f1d) ||
> + (c >= 0x1f28 && c <= 0x1f2f) ||
> + (c >= 0x1f38 && c <= 0x1f3f) ||
> + (c >= 0x1f48 && c <= 0x1f4d) ||
> + (c >= 0x1f68 && c <= 0x1f6f) ||
> + (c >= 0x1f88 && c <= 0x1f8f) ||
> + (c >= 0x1f98 && c <= 0x1f9f) ||
> + (c >= 0x1fa8 && c <= 0x1faf))
> + return (c - 0x08);
> +
> + if (c >= 0x1f59 && c <= 0x1f5f)
> {
> - if ((c >= 0x1f08 && c <= 0x1f0f) ||
> - (c >= 0x1f18 && c <= 0x1f1d) ||
> - (c >= 0x1f28 && c <= 0x1f2f) ||
> - (c >= 0x1f38 && c <= 0x1f3f) ||
> - (c >= 0x1f48 && c <= 0x1f4d) ||
> - (c >= 0x1f68 && c <= 0x1f6f) ||
> - (c >= 0x1f88 && c <= 0x1f8f) ||
> - (c >= 0x1f98 && c <= 0x1f9f) ||
> - (c >= 0x1fa8 && c <= 0x1faf))
> + if (c & 0x01)
> return (c - 0x08);
> -
> - if (c >= 0x1f59 && c <= 0x1f5f)
> - {
> - if (c & 0x01)
> - return (c - 0x08);
> - return c;
> - }
> -
> - if (c >= 0x1fb8 && c <= 0x1ffc)
> + return c;
> + }
> +
> + if (c >= 0x1fb8 && c <= 0x1ffc)
> + {
> + wint_t k;
> + switch (c)
> {
> - wint_t k;
> - switch (c)
> - {
> - case 0x1fb8:
> - case 0x1fb9:
> - case 0x1fd8:
> - case 0x1fd9:
> - case 0x1fe8:
> - case 0x1fe9:
> - k = c - 0x08;
> - break;
> - case 0x1fba:
> - case 0x1fbb:
> - k = c - 0x4a;
> - break;
> - case 0x1fbc:
> - k = 0x1fb3;
> - break;
> - case 0x1fbe:
> - k = 0x03b9;
> - break;
> - case 0x1fc8:
> - case 0x1fc9:
> - case 0x1fca:
> - case 0x1fcb:
> - k = c - 0x56;
> - break;
> - case 0x1fcc:
> - k = 0x1fc3;
> - break;
> - case 0x1fda:
> - case 0x1fdb:
> - k = c - 0x64;
> - break;
> - case 0x1fea:
> - case 0x1feb:
> - k = c - 0x70;
> - break;
> - case 0x1fec:
> - k = 0x1fe5;
> - break;
> - case 0x1ffa:
> - case 0x1ffb:
> - k = c - 0x7e;
> - break;
> - case 0x1ffc:
> - k = 0x1ff3;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> + case 0x1fb8:
> + case 0x1fb9:
> + case 0x1fd8:
> + case 0x1fd9:
> + case 0x1fe8:
> + case 0x1fe9:
> + k = c - 0x08;
> + break;
> + case 0x1fba:
> + case 0x1fbb:
> + k = c - 0x4a;
> + break;
> + case 0x1fbc:
> + k = 0x1fb3;
> + break;
> + case 0x1fbe:
> + k = 0x03b9;
> + break;
> + case 0x1fc8:
> + case 0x1fc9:
> + case 0x1fca:
> + case 0x1fcb:
> + k = c - 0x56;
> + break;
> + case 0x1fcc:
> + k = 0x1fc3;
> + break;
> + case 0x1fda:
> + case 0x1fdb:
> + k = c - 0x64;
> + break;
> + case 0x1fea:
> + case 0x1feb:
> + k = c - 0x70;
> + break;
> + case 0x1fec:
> + k = 0x1fe5;
> + break;
> + case 0x1ffa:
> + case 0x1ffb:
> + k = c - 0x7e;
> + break;
> + case 0x1ffc:
> + k = 0x1ff3;
> + break;
> + default:
> + k = 0;
> }
> + if (k != 0)
> + return k;
> }
> - else
> - {
> - if (c >= 0x2160 && c <= 0x216f)
> - return (c + 0x10);
> -
> - if (c >= 0x24b6 && c <= 0x24cf)
> - return (c + 0x1a);
> -
> - if (c >= 0xff21 && c <= 0xff3a)
> - return (c + 0x20);
> -
> - if (c >= 0x10400 && c <= 0x10425)
> - return (c + 0x28);
> + }
> + else
> + {
> + if (c >= 0x2160 && c <= 0x216f)
> + return (c + 0x10);
> +
> + if (c >= 0x24b6 && c <= 0x24cf)
> + return (c + 0x1a);
> +
> + if (c >= 0xff21 && c <= 0xff3a)
> + return (c + 0x20);
> +
> + if (c >= 0x10400 && c <= 0x10425)
> + return (c + 0x28);
>
> - if (c == 0x2126)
> - return 0x03c9;
> - if (c == 0x212a)
> - return 0x006b;
> - if (c == 0x212b)
> - return 0x00e5;
> - }
> - }
> -#endif /* _MB_CAPABLE */
> -
> + if (c == 0x2126)
> + return 0x03c9;
> + if (c == 0x212a)
> + return 0x006b;
> + if (c == 0x212b)
> + return 0x00e5;
> + }
> + return c;
> +#else
> return (c < 0x00ff ? (wint_t)(tolower ((int)c)) : c);
> +#endif /* _MB_CAPABLE */
> }
>
> Index: libc/ctype/towupper.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/towupper.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 towupper.c
> --- libc/ctype/towupper.c 3 Mar 2009 09:28:45 -0000 1.5
> +++ libc/ctype/towupper.c 22 Mar 2009 16:25:07 -0000
> @@ -70,432 +70,415 @@ wint_t
> _DEFUN(towupper,(c), wint_t c)
> {
> #ifdef _MB_CAPABLE
> - int unicode = 0;
> -
> if (!strcmp (__locale_charset (), "JIS"))
> - {
> - c = __jp2uc (c, JP_JIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_JIS);
> else if (!strcmp (__locale_charset (), "SJIS"))
> - {
> - c = __jp2uc (c, JP_SJIS);
> - unicode = 1;
> - }
> + c = __jp2uc (c, JP_SJIS);
> else if (!strcmp (__locale_charset (), "EUCJP"))
> + c = __jp2uc (c, JP_EUCJP);
> +
> + if (c < 0x100)
> {
> - c = __jp2uc (c, JP_EUCJP);
> - unicode = 1;
> - }
> - else if (!strcmp (__locale_charset (), "UTF-8"))
> - {
> - unicode = 1;
> + if (c == 0x00b5)
> + return 0x039c;
> +
> + if ((c >= 0x00e0 && c <= 0x00fe) ||
> + (c >= 0x0061 && c <= 0x007a))
> + return (c - 0x20);
> +
> + if (c == 0xff)
> + return 0x0178;
> +
> + return c;
> }
> -
> - if (unicode)
> + else if (c < 0x300)
> {
> - if (c < 0x100)
> + if ((c >= 0x0101 && c <= 0x012f) ||
> + (c >= 0x0133 && c <= 0x0137) ||
> + (c >= 0x014b && c <= 0x0177) ||
> + (c >= 0x01df && c <= 0x01ef) ||
> + (c >= 0x01f9 && c <= 0x021f) ||
> + (c >= 0x0223 && c <= 0x0233))
> {
> - if (c == 0x00b5)
> - return 0x039c;
> -
> - if ((c >= 0x00e0 && c <= 0x00fe) ||
> - (c >= 0x0061 && c <= 0x007a))
> - return (c - 0x20);
> -
> - if (c == 0xff)
> - return 0x0178;
> -
> + if (c & 0x01)
> + return (c - 1);
> return c;
> }
> - else if (c < 0x300)
> - {
> - if ((c >= 0x0101 && c <= 0x012f) ||
> - (c >= 0x0133 && c <= 0x0137) ||
> - (c >= 0x014b && c <= 0x0177) ||
> - (c >= 0x01df && c <= 0x01ef) ||
> - (c >= 0x01f9 && c <= 0x021f) ||
> - (c >= 0x0223 && c <= 0x0233))
> - {
> - if (c & 0x01)
> - return (c - 1);
> - return c;
> - }
>
> - if ((c >= 0x013a && c <= 0x0148) ||
> - (c >= 0x01ce && c <= 0x1dc))
> - {
> - if (!(c & 0x01))
> - return (c - 1);
> - return c;
> - }
> -
> - if (c == 0x0131)
> - return 0x0049;
> -
> - if (c == 0x017a || c == 0x017c || c == 0x017e)
> + if ((c >= 0x013a && c <= 0x0148) ||
> + (c >= 0x01ce && c <= 0x1dc))
> + {
> + if (!(c & 0x01))
> return (c - 1);
> -
> - if (c >= 0x017f && c <= 0x0292)
> - {
> - wint_t k;
> - switch (c)
> - {
> - case 0x017f:
> - k = 0x0053;
> - break;
> - case 0x0183:
> - k = 0x0182;
> - break;
> - case 0x0185:
> - k = 0x0184;
> - break;
> - case 0x0188:
> - k = 0x0187;
> - break;
> - case 0x018c:
> - k = 0x018b;
> - break;
> - case 0x0192:
> - k = 0x0191;
> - break;
> - case 0x0195:
> - k = 0x01f6;
> - break;
> - case 0x0199:
> - k = 0x0198;
> - break;
> - case 0x019e:
> - k = 0x0220;
> - break;
> - case 0x01a1:
> - case 0x01a3:
> - case 0x01a5:
> - case 0x01a8:
> - case 0x01ad:
> - case 0x01b0:
> - case 0x01b4:
> - case 0x01b6:
> - case 0x01b9:
> - case 0x01bd:
> - case 0x01c5:
> - case 0x01c8:
> - case 0x01cb:
> - case 0x01f2:
> - case 0x01f5:
> - k = c - 1;
> - break;
> - case 0x01bf:
> - k = 0x01f7;
> - break;
> - case 0x01c6:
> - case 0x01c9:
> - case 0x01cc:
> - k = c - 2;
> - break;
> - case 0x01dd:
> - k = 0x018e;
> - break;
> - case 0x01f3:
> - k = 0x01f1;
> - break;
> - case 0x0253:
> - k = 0x0181;
> - break;
> - case 0x0254:
> - k = 0x0186;
> - break;
> - case 0x0256:
> - k = 0x0189;
> - break;
> - case 0x0257:
> - k = 0x018a;
> - break;
> - case 0x0259:
> - k = 0x018f;
> - break;
> - case 0x025b:
> - k = 0x0190;
> - break;
> - case 0x0260:
> - k = 0x0193;
> - break;
> - case 0x0263:
> - k = 0x0194;
> - break;
> - case 0x0268:
> - k = 0x0197;
> - break;
> - case 0x0269:
> - k = 0x0196;
> - break;
> - case 0x026f:
> - k = 0x019c;
> - break;
> - case 0x0272:
> - k = 0x019d;
> - break;
> - case 0x0275:
> - k = 0x019f;
> - break;
> - case 0x0280:
> - k = 0x01a6;
> - break;
> - case 0x0283:
> - k = 0x01a9;
> - break;
> - case 0x0288:
> - k = 0x01ae;
> - break;
> - case 0x028a:
> - k = 0x01b1;
> - break;
> - case 0x028b:
> - k = 0x01b2;
> - break;
> - case 0x0292:
> - k = 0x01b7;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> - }
> + return c;
> }
> - else if (c < 0x0400)
> +
> + if (c == 0x0131)
> + return 0x0049;
> +
> + if (c == 0x017a || c == 0x017c || c == 0x017e)
> + return (c - 1);
> +
> + if (c >= 0x017f && c <= 0x0292)
> {
> - if (c == 0x03ac)
> - return 0x0386;
> -
> - if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
> - return (c - 0x15);
> -
> - if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
> - return (c - 0x20);
> -
> - if (c == 0x03c2)
> - return 0x03a3;
> -
> - if (c >= 0x03cc && c <= 0x03f5)
> + wint_t k;
> + switch (c)
> {
> - wint_t k;
> - switch (c)
> - {
> - case 0x03cc:
> - k = 0x038c;
> - break;
> - case 0x03cd:
> - case 0x03ce:
> - k = c - 0x3f;
> - break;
> - case 0x03d0:
> - k = 0x0392;
> - break;
> - case 0x03d1:
> - k = 0x0398;
> - break;
> - case 0x03d5:
> - k = 0x03a6;
> - break;
> - case 0x03d6:
> - k = 0x03a0;
> - break;
> - case 0x03d9:
> - case 0x03db:
> - case 0x03dd:
> - case 0x03df:
> - case 0x03e1:
> - case 0x03e3:
> - case 0x03e5:
> - case 0x03e7:
> - case 0x03e9:
> - case 0x03eb:
> - case 0x03ed:
> - case 0x03ef:
> - k = c - 1;
> - break;
> - case 0x03f0:
> - k = 0x039a;
> - break;
> - case 0x03f1:
> - k = 0x03a1;
> - break;
> - case 0x03f2:
> - k = 0x03a3;
> - break;
> - case 0x03f5:
> - k = 0x0395;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> + case 0x017f:
> + k = 0x0053;
> + break;
> + case 0x0183:
> + k = 0x0182;
> + break;
> + case 0x0185:
> + k = 0x0184;
> + break;
> + case 0x0188:
> + k = 0x0187;
> + break;
> + case 0x018c:
> + k = 0x018b;
> + break;
> + case 0x0192:
> + k = 0x0191;
> + break;
> + case 0x0195:
> + k = 0x01f6;
> + break;
> + case 0x0199:
> + k = 0x0198;
> + break;
> + case 0x019e:
> + k = 0x0220;
> + break;
> + case 0x01a1:
> + case 0x01a3:
> + case 0x01a5:
> + case 0x01a8:
> + case 0x01ad:
> + case 0x01b0:
> + case 0x01b4:
> + case 0x01b6:
> + case 0x01b9:
> + case 0x01bd:
> + case 0x01c5:
> + case 0x01c8:
> + case 0x01cb:
> + case 0x01f2:
> + case 0x01f5:
> + k = c - 1;
> + break;
> + case 0x01bf:
> + k = 0x01f7;
> + break;
> + case 0x01c6:
> + case 0x01c9:
> + case 0x01cc:
> + k = c - 2;
> + break;
> + case 0x01dd:
> + k = 0x018e;
> + break;
> + case 0x01f3:
> + k = 0x01f1;
> + break;
> + case 0x0253:
> + k = 0x0181;
> + break;
> + case 0x0254:
> + k = 0x0186;
> + break;
> + case 0x0256:
> + k = 0x0189;
> + break;
> + case 0x0257:
> + k = 0x018a;
> + break;
> + case 0x0259:
> + k = 0x018f;
> + break;
> + case 0x025b:
> + k = 0x0190;
> + break;
> + case 0x0260:
> + k = 0x0193;
> + break;
> + case 0x0263:
> + k = 0x0194;
> + break;
> + case 0x0268:
> + k = 0x0197;
> + break;
> + case 0x0269:
> + k = 0x0196;
> + break;
> + case 0x026f:
> + k = 0x019c;
> + break;
> + case 0x0272:
> + k = 0x019d;
> + break;
> + case 0x0275:
> + k = 0x019f;
> + break;
> + case 0x0280:
> + k = 0x01a6;
> + break;
> + case 0x0283:
> + k = 0x01a9;
> + break;
> + case 0x0288:
> + k = 0x01ae;
> + break;
> + case 0x028a:
> + k = 0x01b1;
> + break;
> + case 0x028b:
> + k = 0x01b2;
> + break;
> + case 0x0292:
> + k = 0x01b7;
> + break;
> + default:
> + k = 0;
> }
> + if (k != 0)
> + return k;
> }
> - else if (c < 0x500)
> + }
> + else if (c < 0x0400)
> + {
> + if (c == 0x03ac)
> + return 0x0386;
> +
> + if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
> + return (c - 0x15);
> +
> + if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
> + return (c - 0x20);
> +
> + if (c == 0x03c2)
> + return 0x03a3;
> +
> + if (c >= 0x03cc && c <= 0x03f5)
> {
> - if (c >= 0x0450 && c <= 0x045f)
> - return (c - 0x50);
> -
> - if (c >= 0x0430 && c <= 0x044f)
> - return (c - 0x20);
> -
> - if ((c >= 0x0461 && c <= 0x0481) ||
> - (c >= 0x048b && c <= 0x04bf) ||
> - (c >= 0x04d1 && c <= 0x04f5))
> - {
> - if (c & 0x01)
> - return (c - 1);
> - return c;
> - }
> -
> - if (c >= 0x04c2 && c <= 0x04ce)
> + wint_t k;
> + switch (c)
> {
> - if (!(c & 0x01))
> - return (c - 1);
> - return c;
> + case 0x03cc:
> + k = 0x038c;
> + break;
> + case 0x03cd:
> + case 0x03ce:
> + k = c - 0x3f;
> + break;
> + case 0x03d0:
> + k = 0x0392;
> + break;
> + case 0x03d1:
> + k = 0x0398;
> + break;
> + case 0x03d5:
> + k = 0x03a6;
> + break;
> + case 0x03d6:
> + k = 0x03a0;
> + break;
> + case 0x03d9:
> + case 0x03db:
> + case 0x03dd:
> + case 0x03df:
> + case 0x03e1:
> + case 0x03e3:
> + case 0x03e5:
> + case 0x03e7:
> + case 0x03e9:
> + case 0x03eb:
> + case 0x03ed:
> + case 0x03ef:
> + k = c - 1;
> + break;
> + case 0x03f0:
> + k = 0x039a;
> + break;
> + case 0x03f1:
> + k = 0x03a1;
> + break;
> + case 0x03f2:
> + k = 0x03a3;
> + break;
> + case 0x03f5:
> + k = 0x0395;
> + break;
> + default:
> + k = 0;
> }
> -
> - if (c == 0x04f9)
> - return 0x04f8;
> + if (k != 0)
> + return k;
> }
> - else if (c < 0x1f00)
> + }
> + else if (c < 0x500)
> + {
> + if (c >= 0x0450 && c <= 0x045f)
> + return (c - 0x50);
> +
> + if (c >= 0x0430 && c <= 0x044f)
> + return (c - 0x20);
> +
> + if ((c >= 0x0461 && c <= 0x0481) ||
> + (c >= 0x048b && c <= 0x04bf) ||
> + (c >= 0x04d1 && c <= 0x04f5))
> {
> - if ((c >= 0x0501 && c <= 0x050f) ||
> - (c >= 0x1e01 && c <= 0x1e95) ||
> - (c >= 0x1ea1 && c <= 0x1ef9))
> - {
> - if (c & 0x01)
> - return (c - 1);
> - return c;
> - }
> -
> - if (c >= 0x0561 && c <= 0x0586)
> - return (c - 0x30);
> -
> - if (c == 0x1e9b)
> - return 0x1e60;
> + if (c & 0x01)
> + return (c - 1);
> + return c;
> }
> - else if (c < 0x2000)
> +
> + if (c >= 0x04c2 && c <= 0x04ce)
> {
> -
> - if ((c >= 0x1f00 && c <= 0x1f07) ||
> - (c >= 0x1f10 && c <= 0x1f15) ||
> - (c >= 0x1f20 && c <= 0x1f27) ||
> - (c >= 0x1f30 && c <= 0x1f37) ||
> - (c >= 0x1f40 && c <= 0x1f45) ||
> - (c >= 0x1f60 && c <= 0x1f67) ||
> - (c >= 0x1f80 && c <= 0x1f87) ||
> - (c >= 0x1f90 && c <= 0x1f97) ||
> - (c >= 0x1fa0 && c <= 0x1fa7))
> - return (c + 0x08);
> -
> - if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
> - return (c + 0x08);
> -
> - if (c >= 0x1f70 && c <= 0x1ff3)
> - {
> - wint_t k;
> - switch (c)
> - {
> - case 0x1fb0:
> - k = 0x1fb8;
> - break;
> - case 0x1fb1:
> - k = 0x1fb9;
> - break;
> - case 0x1f70:
> - k = 0x1fba;
> - break;
> - case 0x1f71:
> - k = 0x1fbb;
> - break;
> - case 0x1fb3:
> - k = 0x1fbc;
> - break;
> - case 0x1fbe:
> - k = 0x0399;
> - break;
> - case 0x1f72:
> - k = 0x1fc8;
> - break;
> - case 0x1f73:
> - k = 0x1fc9;
> - break;
> - case 0x1f74:
> - k = 0x1fca;
> - break;
> - case 0x1f75:
> - k = 0x1fcb;
> - break;
> - case 0x1fd0:
> - k = 0x1fd8;
> - break;
> - case 0x1fd1:
> - k = 0x1fd9;
> - break;
> - case 0x1f76:
> - k = 0x1fda;
> - break;
> - case 0x1f77:
> - k = 0x1fdb;
> - break;
> - case 0x1fe0:
> - k = 0x1fe8;
> - break;
> - case 0x1fe1:
> - k = 0x1fe9;
> - break;
> - case 0x1f7a:
> - k = 0x1fea;
> - break;
> - case 0x1f7b:
> - k = 0x1feb;
> - break;
> - case 0x1fe5:
> - k = 0x1fec;
> - break;
> - case 0x1f78:
> - k = 0x1ff8;
> - break;
> - case 0x1f79:
> - k = 0x1ff9;
> - break;
> - case 0x1f7c:
> - k = 0x1ffa;
> - break;
> - case 0x1f7d:
> - k = 0x1ffb;
> - break;
> - case 0x1ff3:
> - k = 0x1ffc;
> - break;
> - default:
> - k = 0;
> - }
> - if (k != 0)
> - return k;
> - }
> + if (!(c & 0x01))
> + return (c - 1);
> + return c;
> }
> - else
> +
> + if (c == 0x04f9)
> + return 0x04f8;
> + }
> + else if (c < 0x1f00)
> + {
> + if ((c >= 0x0501 && c <= 0x050f) ||
> + (c >= 0x1e01 && c <= 0x1e95) ||
> + (c >= 0x1ea1 && c <= 0x1ef9))
> {
> - if (c >= 0x2170 && c <= 0x217f)
> - return (c - 0x10);
> -
> - if (c >= 0x24d0 && c <= 0x24e9)
> - return (c - 0x1a);
> -
> - if (c >= 0xff41 && c <= 0xff5a)
> - return (c - 0x20);
> -
> - if (c >= 0x10428 && c <= 0x1044d)
> - return (c - 0x28);
> + if (c & 0x01)
> + return (c - 1);
> + return c;
> }
> - }
> -#endif /* _MB_CAPABLE */
> -
> +
> + if (c >= 0x0561 && c <= 0x0586)
> + return (c - 0x30);
> +
> + if (c == 0x1e9b)
> + return 0x1e60;
> + }
> + else if (c < 0x2000)
> + {
> +
> + if ((c >= 0x1f00 && c <= 0x1f07) ||
> + (c >= 0x1f10 && c <= 0x1f15) ||
> + (c >= 0x1f20 && c <= 0x1f27) ||
> + (c >= 0x1f30 && c <= 0x1f37) ||
> + (c >= 0x1f40 && c <= 0x1f45) ||
> + (c >= 0x1f60 && c <= 0x1f67) ||
> + (c >= 0x1f80 && c <= 0x1f87) ||
> + (c >= 0x1f90 && c <= 0x1f97) ||
> + (c >= 0x1fa0 && c <= 0x1fa7))
> + return (c + 0x08);
> +
> + if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
> + return (c + 0x08);
> +
> + if (c >= 0x1f70 && c <= 0x1ff3)
> + {
> + wint_t k;
> + switch (c)
> + {
> + case 0x1fb0:
> + k = 0x1fb8;
> + break;
> + case 0x1fb1:
> + k = 0x1fb9;
> + break;
> + case 0x1f70:
> + k = 0x1fba;
> + break;
> + case 0x1f71:
> + k = 0x1fbb;
> + break;
> + case 0x1fb3:
> + k = 0x1fbc;
> + break;
> + case 0x1fbe:
> + k = 0x0399;
> + break;
> + case 0x1f72:
> + k = 0x1fc8;
> + break;
> + case 0x1f73:
> + k = 0x1fc9;
> + break;
> + case 0x1f74:
> + k = 0x1fca;
> + break;
> + case 0x1f75:
> + k = 0x1fcb;
> + break;
> + case 0x1fd0:
> + k = 0x1fd8;
> + break;
> + case 0x1fd1:
> + k = 0x1fd9;
> + break;
> + case 0x1f76:
> + k = 0x1fda;
> + break;
> + case 0x1f77:
> + k = 0x1fdb;
> + break;
> + case 0x1fe0:
> + k = 0x1fe8;
> + break;
> + case 0x1fe1:
> + k = 0x1fe9;
> + break;
> + case 0x1f7a:
> + k = 0x1fea;
> + break;
> + case 0x1f7b:
> + k = 0x1feb;
> + break;
> + case 0x1fe5:
> + k = 0x1fec;
> + break;
> + case 0x1f78:
> + k = 0x1ff8;
> + break;
> + case 0x1f79:
> + k = 0x1ff9;
> + break;
> + case 0x1f7c:
> + k = 0x1ffa;
> + break;
> + case 0x1f7d:
> + k = 0x1ffb;
> + break;
> + case 0x1ff3:
> + k = 0x1ffc;
> + break;
> + default:
> + k = 0;
> + }
> + if (k != 0)
> + return k;
> + }
> + }
> + else
> + {
> + if (c >= 0x2170 && c <= 0x217f)
> + return (c - 0x10);
> +
> + if (c >= 0x24d0 && c <= 0x24e9)
> + return (c - 0x1a);
> +
> + if (c >= 0xff41 && c <= 0xff5a)
> + return (c - 0x20);
> +
> + if (c >= 0x10428 && c <= 0x1044d)
> + return (c - 0x28);
> + }
> + return c;
> +#else
> return (c < 0x00ff ? (wint_t)(toupper ((int)c)) : c);
> +#endif /* _MB_CAPABLE */
> }
>
>
>
More information about the Newlib
mailing list