9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] quote file name
@ 2006-07-09 10:24 arisawa
  2006-07-09 10:53 ` quanstro
  0 siblings, 1 reply; 15+ messages in thread
From: arisawa @ 2006-07-09 10:24 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Hello,

I noticed that a file named '音楽' is quoted in the output of ls  
command.
more experiments:

term% ls -l
term% touch 音
term% touch 楽
term% ls -l
--rw-rw-r-- M 8 arisawa arisawa 0 Jul  9 19:10 '楽'
--rw-rw-r-- M 8 arisawa arisawa 0 Jul  9 19:10 音

How to understand that 楽 is quoted but 音 is not quoted ?

Kenji Arisawa



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-09 10:24 [9fans] quote file name arisawa
@ 2006-07-09 10:53 ` quanstro
  2006-07-10  0:46   ` quanstro
  0 siblings, 1 reply; 15+ messages in thread
From: quanstro @ 2006-07-09 10:53 UTC (permalink / raw)
  To: 9fans

interesting.  quick guess is that isalpharune is returning quirky results.  that table was generated
against older unicode.  i worked up a replacement table from unicode 4.1.  i'll try it tonight.

- erik


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-09 10:53 ` quanstro
@ 2006-07-10  0:46   ` quanstro
  2006-07-28 12:41     ` arisawa
  0 siblings, 1 reply; 15+ messages in thread
From: quanstro @ 2006-07-10  0:46 UTC (permalink / raw)
  To: 9fans

this is wrong.  the real answer is this

; diff -c /n/sources/plan9/sys/src/libc/port/needsrcquote.c needsrcquote.c
/n/sources/plan9/sys/src/libc/port/needsrcquote.c:6,12 - needsrcquote.c:6,12
  {
  	if(c <= ' ')
  		return 1;
- 	if(strchr("`^#*[]=|\\?${}()'<>&;", c))
+ 	if(c < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", c))
  		return 1;
  	return 0;
  }

- erik

On Sun Jul  9 06:04:31 CDT 2006, quanstro@quanstro.net wrote:
> interesting.  quick guess is that isalpharune is returning quirky results.  that table was generated
> against older unicode.  i worked up a replacement table from unicode 4.1.  i'll try it tonight.
>
> - erik


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-10  0:46   ` quanstro
@ 2006-07-28 12:41     ` arisawa
  2006-07-28 12:48       ` erik quanstrom
  2006-07-28 13:23       ` "Nils O. Selåsdal"
  0 siblings, 2 replies; 15+ messages in thread
From: arisawa @ 2006-07-28 12:41 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Hello,

> ; diff -c /n/sources/plan9/sys/src/libc/port/needsrcquote.c
> needsrcquote.c
> /n/sources/plan9/sys/src/libc/port/needsrcquote.c:6,12 -
> needsrcquote.c:6,12
>   {
>   	if(c <= ' ')
>   		return 1;
> - 	if(strchr("`^#*[]=|\\?${}()'<>&;", c))
> + 	if(c < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", c))
>   		return 1;
>   	return 0;
>   }
>
> - erik

Thanks eric. That works.

I think kanji space (0x3000) should be quoted. Therefore
-  	if(c <= ' ')
+   	if(c <= ' ' || c == 0x3000)
is desirable

I hope official needsrcquote.c is to be changed along the patch by
eric and me.

Kenji Arisawa




^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 12:41     ` arisawa
@ 2006-07-28 12:48       ` erik quanstrom
  2006-07-28 15:09         ` Micah Stetson
  2006-07-28 15:26         ` arisawa
  2006-07-28 13:23       ` "Nils O. Selåsdal"
  1 sibling, 2 replies; 15+ messages in thread
From: erik quanstrom @ 2006-07-28 12:48 UTC (permalink / raw)
  To: 9fans

you're welcome.

however, i don't think kanji space shouldn't be quoted.

the purpose of the function is to determine if the string needs quoting for
rc's benefit. (there are a number of space characters and other potentially-confusing
stuff in unicode that rc does not interpret as whitespace.)

the function you're looking for could be called "needshumanquote" and
could be written like this

int
needshumanquote(int r)
{
	if(r <= ' ')
		return 1;
	if(r < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", r))
		return 1;
	if(!isalpharune(r))
		return 1;
	return 0;
}

a better version of this function could be written with the a function
isspacerune. (i've got a script which generates this table from UnicodeData.txt.)

there's a patch for needsrcquote in /n/sources/patch/needsrcquote.

- erik

On Fri Jul 28 07:42:06 CDT 2006, arisawa@ar.aichi-u.ac.jp wrote:
> Hello,
>
> > ; diff -c /n/sources/plan9/sys/src/libc/port/needsrcquote.c
> > needsrcquote.c
> > /n/sources/plan9/sys/src/libc/port/needsrcquote.c:6,12 -
> > needsrcquote.c:6,12
> >   {
> >   	if(c <= ' ')
> >   		return 1;
> > - 	if(strchr("`^#*[]=|\\?${}()'<>&;", c))
> > + 	if(c < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", c))
> >   		return 1;
> >   	return 0;
> >   }
> >
> > - erik
>
> Thanks eric. That works.
>
> I think kanji space (0x3000) should be quoted. Therefore
> -  	if(c <= ' ')
> +   	if(c <= ' ' || c == 0x3000)
> is desirable
>
> I hope official needsrcquote.c is to be changed along the patch by
> eric and me.
>
> Kenji Arisawa


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 12:41     ` arisawa
  2006-07-28 12:48       ` erik quanstrom
@ 2006-07-28 13:23       ` "Nils O. Selåsdal"
  2006-07-28 19:37         ` geoff
  1 sibling, 1 reply; 15+ messages in thread
From: "Nils O. Selåsdal" @ 2006-07-28 13:23 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

arisawa@ar.aichi-u.ac.jp wrote:
> Hello,
>
>> ; diff -c /n/sources/plan9/sys/src/libc/port/needsrcquote.c
>> needsrcquote.c
>> /n/sources/plan9/sys/src/libc/port/needsrcquote.c:6,12 -
>> needsrcquote.c:6,12
>>   {
>>       if(c <= ' ')
>>           return 1;
>> -     if(strchr("`^#*[]=|\\?${}()'<>&;", c))
>> +     if(c < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", c))
>>           return 1;
>>       return 0;
>>   }
>>
>> - erik
>
> Thanks eric. That works.
>
> I think kanji space (0x3000) should be quoted. Therefore
> -      if(c <= ' ')
> +       if(c <= ' ' || c == 0x3000)
> is desirable
>
> I hope official needsrcquote.c is to be changed along the patch by eric
> and me.

Surly the only space that needs concern is the "ascii"/U+0020 space, as
that's
used as a separator, not all the other unicode "space" characters. ?






^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 12:48       ` erik quanstrom
@ 2006-07-28 15:09         ` Micah Stetson
  2006-07-28 15:33           ` erik quanstrom
  2006-07-28 15:26         ` arisawa
  1 sibling, 1 reply; 15+ messages in thread
From: Micah Stetson @ 2006-07-28 15:09 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

>         if(r < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", r))
>                 return 1;

Wouldn't this be clearer as

if(utfrune("`^#*[]=|\\?${}()'<>&;", r))
    return 1;

That's essentially what the r<0x80 (Runesync) does, isn't it?

Micah


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 12:48       ` erik quanstrom
  2006-07-28 15:09         ` Micah Stetson
@ 2006-07-28 15:26         ` arisawa
  2006-07-28 15:49           ` erik quanstrom
  2006-07-28 15:51           ` erik quanstrom
  1 sibling, 2 replies; 15+ messages in thread
From: arisawa @ 2006-07-28 15:26 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Hello,

> the purpose of the function is to determine if the string needs
> quoting for
> rc's benefit.

I agree current quote is designed for rc benefit.
But I want something that helps for human reading.

needshumanquote(int r) or the improved version will be nice
if it is available in ls command.

Kenji Arisawa



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 15:09         ` Micah Stetson
@ 2006-07-28 15:33           ` erik quanstrom
  2006-07-28 17:52             ` Micah Stetson
  0 siblings, 1 reply; 15+ messages in thread
From: erik quanstrom @ 2006-07-28 15:33 UTC (permalink / raw)
  To: 9fans

i think my code clearly noted it's provinçial nature. ☺

in addition, one would need to change the string from
	"`^#*[]=|\\?${}()'<>&;"		(char*)
to
	L"`^#*[]=|\\?${}()'<>&;"	(Rune*)
i was trying to avoid that.  i think it would make p9p harder.
(i dont trust gcc with L"".)

- erik

On Fri Jul 28 10:11:26 CDT 2006, micah@stetsonnet.org wrote:
> >         if(r < 0x80 && strchr("`^#*[]=|\\?${}()'<>&;", r))
> >                 return 1;
> 
> Wouldn't this be clearer as
> 
> if(utfrune("`^#*[]=|\\?${}()'<>&;", r))
>     return 1;
> 
> That's essentially what the r<0x80 (Runesync) does, isn't it?
> 
> Micah


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 15:26         ` arisawa
@ 2006-07-28 15:49           ` erik quanstrom
  2006-07-28 15:51           ` erik quanstrom
  1 sibling, 0 replies; 15+ messages in thread
From: erik quanstrom @ 2006-07-28 15:49 UTC (permalink / raw)
  To: 9fans

[-- Attachment #1: Type: text/plain, Size: 566 bytes --]

here are the basics of what you need to implement needshumanquote.
you will also need to add these prototypes to libc.h:

int isspacerune(Rune);
int isdigitrune(Rune);		// recognizes (super|sub)script/indic/tamil/thai/... digits
int digitrunevalue(Rune);		// converts a rune to it's numeric value.  -1 if not a digit.

my utf tables are a little bit different than the distribution.  i believe that
most of the differences are due to the fact that i generated my tables from unicode-4.1.

i'll be happy to submit a patch, if there's any interest.

- erik

[-- Attachment #2: runetype.c --]
[-- Type: text/plain, Size: 2388 bytes --]

#include <u.h>
#include <libc.h>
#include "utf-tables.h"

static Rune*
bsearch(Rune c, Rune *t, int n, int ne)
{
	Rune *p;
	int m;

	while(n > 1) {
		m = n/2;
		p = t + m*ne;
		if(c >= p[0]) {
			t = p;
			n = n-m;
		} else
			n = m;
	}
	if(n && c >= t[0])
		return t;
	return 0;
}

Rune
tolowerrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return p[2] + (c - p[0]);
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
	if(p && c == p[0] && p[2])
		return p[2] + (c - p[0]);
	return c;
}

Rune
toupperrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return p[2] + (c - p[0]);
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
	if(p && c == p[0] && p[2])
		return p[2] + (c - p[0]);
	return c;
}

Rune
totitlerune(Rune c)
{
	Rune *p;

	p = bsearch(c, __totitle1, nelem(__totitle1)/2, 2);
	if(p && c == p[0])
		return p[2] + (c - p[0]);
	return c;
}

int
islowerrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
isupperrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
isalpharune(Rune c)
{
	Rune *p;

	if(isupperrune(c) || islowerrune(c))
		return 1;
	p = bsearch(c, __alpha2, nelem(__alpha2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __alpha1, nelem(__alpha1), 1);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
istitlerune(Rune c)
{
	return isupperrune(c) && islowerrune(c);
}

int
isspacerune(Rune c)
{
	Rune *p;

	p = bsearch(c, __space2, nelem(__space2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	return 0;
}

int
isdigitrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __digit2, nelem(__digit2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	return 0;
}

int
digitrunevalue(Rune c){
	Rune* p;

	p = bsearch(c, __digit2, nelem(__digit2)/2, 2);
	if (!p || c < p[0] || c>p[1]){
		return -1;
	}

	return c-p[0];
}

[-- Attachment #3: utf-tables.h --]
[-- Type: text/plain, Size: 51358 bytes --]

static
Rune	__space2[] =
{
	0x0009,	0x000a,	/* tab and newline */
	0x0020,	0x0020,	/* space */
	0x00a0,	0x00a0,	/* non-breaking space */
	0x1680, 0x1680,	/* ogham space mark */
	0x180e, 0x180e,	/* mongolian vowel separator */
	0x2000, 0x200b,	/* en quad - zero width space */
	0x2028, 0x2029,	/* line separator - paragraph separator */
	0x202f, 0x202f,	/* narrow no-break space */
	0x205f, 0x205f,	/* medium mathematical space */
	0x3000, 0x3000,	/* ideographic space */
	0xfeff, 0xfeff,	/* zero width no-break space */
};

static
Rune	__digit2[] =
{
	0x0030, 0x0039,	/* 0123456789 */
	0x0660, 0x0669,	/* ٠١٢٣٤٥٦٧٨٩ */
	0x06f0, 0x06f9,	/* ۰۱۲۳۴۵۶۷۸۹ */
	0x0966, 0x096f,	/* ०१२३४५६७८९ */
	0x09e6, 0x09ef,	/* ০১২৩৪৫৬৭৮৯ */
	0x0a66, 0x0a6f,	/* ੦੧੨੩੪੫੬੭੮੯ */
	0x0ae6, 0x0aef,	/* ૦૧૨૩૪૫૬૭૮૯ */
	0x0b66, 0x0b6f,	/* ୦୧୨୩୪୫୬୭୮୯ */
	0x0be6, 0x0bef,	/* ௦௧௨௩௪௫௬௭௮௯ */
	0x0c66, 0x0c6f,	/* ౦౧౨౩౪౫౬౭౮౯ */
	0x0ce6, 0x0cef,	/* ೦೧೨೩೪೫೬೭೮೯ */
	0x0d66, 0x0d6f,	/* ൦൧൨൩൪൫൬൭൮൯ */
	0x0e50, 0x0e59,	/* ๐๑๒๓๔๕๖๗๘๙ */
	0x0ed0, 0x0ed9,	/* ໐໑໒໓໔໕໖໗໘໙ */
	0x0f20, 0x0f29,	/* ༠༡༢༣༤༥༦༧༨༩ */
	0x1040, 0x1049,	/* ၀၁၂၃၄၅၆၇၈၉ */
	0x17e0, 0x17e9,	/* ០១២៣៤៥៦៧៨៩ */
	0x1810, 0x1819,	/* ᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ */
	0x1946, 0x194f,	/* ᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ */
	0x19d0, 0x19d9,	/* ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙ */
	0xff10, 0xff19,	/* 0123456789 */
};

static
Rune	__alpha2[] =
{
	0x01c0, 0x01c3,	/* ǀ-ǃ */
	0x05d0, 0x05ea,	/* א-ת */
	0x05f0, 0x05f2,	/* װ-ײ */
	0x0621, 0x063a,	/* ء-غ */
	0x0641, 0x064a,	/* ف-ي */
	0x066e, 0x066f,	/* ٮ-ٯ */
	0x0671, 0x06d3,	/* ٱ-ۓ */
	0x06ee, 0x06ef,	/* ۮ-ۯ */
	0x06fa, 0x06fc,	/* ۺ-ۼ */
	0x0712, 0x072f,	/* ܒ-ܯ */
	0x074d, 0x076d,	/* ݍ-ݭ */
	0x0780, 0x07a5,	/* ހ-ޥ */
	0x0904, 0x0939,	/* ऄ-ह */
	0x0958, 0x0961,	/* क़-ॡ */
	0x0985, 0x098c,	/* অ-ঌ */
	0x098f, 0x0990,	/* এ-ঐ */
	0x0993, 0x09a8,	/* ও-ন */
	0x09aa, 0x09b0,	/* প-র */
	0x09b6, 0x09b9,	/* শ-হ */
	0x09dc, 0x09dd,	/* ড়-ঢ় */
	0x09df, 0x09e1,	/* য়-ৡ */
	0x09f0, 0x09f1,	/* ৰ-ৱ */
	0x0a05, 0x0a0a,	/* ਅ-ਊ */
	0x0a0f, 0x0a10,	/* ਏ-ਐ */
	0x0a13, 0x0a28,	/* ਓ-ਨ */
	0x0a2a, 0x0a30,	/* ਪ-ਰ */
	0x0a32, 0x0a33,	/* ਲ-ਲ਼ */
	0x0a35, 0x0a36,	/* ਵ-ਸ਼ */
	0x0a38, 0x0a39,	/* ਸ-ਹ */
	0x0a59, 0x0a5c,	/* ਖ਼-ੜ */
	0x0a72, 0x0a74,	/* ੲ-ੴ */
	0x0a85, 0x0a8d,	/* અ-ઍ */
	0x0a8f, 0x0a91,	/* એ-ઑ */
	0x0a93, 0x0aa8,	/* ઓ-ન */
	0x0aaa, 0x0ab0,	/* પ-ર */
	0x0ab2, 0x0ab3,	/* લ-ળ */
	0x0ab5, 0x0ab9,	/* વ-હ */
	0x0ae0, 0x0ae1,	/* ૠ-ૡ */
	0x0b05, 0x0b0c,	/* ଅ-ଌ */
	0x0b0f, 0x0b10,	/* ଏ-ଐ */
	0x0b13, 0x0b28,	/* ଓ-ନ */
	0x0b2a, 0x0b30,	/* ପ-ର */
	0x0b32, 0x0b33,	/* ଲ-ଳ */
	0x0b35, 0x0b39,	/* ଵ-ହ */
	0x0b5c, 0x0b5d,	/* ଡ଼-ଢ଼ */
	0x0b5f, 0x0b61,	/* ୟ-ୡ */
	0x0b85, 0x0b8a,	/* அ-ஊ */
	0x0b8e, 0x0b90,	/* எ-ஐ */
	0x0b92, 0x0b95,	/* ஒ-க */
	0x0b99, 0x0b9a,	/* ங-ச */
	0x0b9e, 0x0b9f,	/* ஞ-ட */
	0x0ba3, 0x0ba4,	/* ண-த */
	0x0ba8, 0x0baa,	/* ந-ப */
	0x0bae, 0x0bb9,	/* ம-ஹ */
	0x0c05, 0x0c0c,	/* అ-ఌ */
	0x0c0e, 0x0c10,	/* ఎ-ఐ */
	0x0c12, 0x0c28,	/* ఒ-న */
	0x0c2a, 0x0c33,	/* ప-ళ */
	0x0c35, 0x0c39,	/* వ-హ */
	0x0c60, 0x0c61,	/* ౠ-ౡ */
	0x0c85, 0x0c8c,	/* ಅ-ಌ */
	0x0c8e, 0x0c90,	/* ಎ-ಐ */
	0x0c92, 0x0ca8,	/* ಒ-ನ */
	0x0caa, 0x0cb3,	/* ಪ-ಳ */
	0x0cb5, 0x0cb9,	/* ವ-ಹ */
	0x0ce0, 0x0ce1,	/* ೠ-ೡ */
	0x0d05, 0x0d0c,	/* അ-ഌ */
	0x0d0e, 0x0d10,	/* എ-ഐ */
	0x0d12, 0x0d28,	/* ഒ-ന */
	0x0d2a, 0x0d39,	/* പ-ഹ */
	0x0d60, 0x0d61,	/* ൠ-ൡ */
	0x0d85, 0x0d96,	/* අ-ඖ */
	0x0d9a, 0x0db1,	/* ක-න */
	0x0db3, 0x0dbb,	/* ඳ-ර */
	0x0dc0, 0x0dc6,	/* ව-ෆ */
	0x0e01, 0x0e30,	/* ก-ะ */
	0x0e32, 0x0e33,	/* า-ำ */
	0x0e40, 0x0e45,	/* เ-ๅ */
	0x0e81, 0x0e82,	/* ກ-ຂ */
	0x0e87, 0x0e88,	/* ງ-ຈ */
	0x0e94, 0x0e97,	/* ດ-ທ */
	0x0e99, 0x0e9f,	/* ນ-ຟ */
	0x0ea1, 0x0ea3,	/* ມ-ຣ */
	0x0eaa, 0x0eab,	/* ສ-ຫ */
	0x0ead, 0x0eb0,	/* ອ-ະ */
	0x0eb2, 0x0eb3,	/* າ-ຳ */
	0x0ec0, 0x0ec4,	/* ເ-ໄ */
	0x0edc, 0x0edd,	/* ໜ-ໝ */
	0x0f40, 0x0f47,	/* ཀ-ཇ */
	0x0f49, 0x0f6a,	/* ཉ-ཪ */
	0x0f88, 0x0f8b,	/* ྈ-ྋ */
	0x1000, 0x1021,	/* က-အ */
	0x1023, 0x1027,	/* ဣ-ဧ */
	0x1029, 0x102a,	/* ဩ-ဪ */
	0x1050, 0x1055,	/* ၐ-ၕ */
	0x10d0, 0x10fa,	/* ა-ჺ */
	0x1100, 0x1159,	/* ᄀ-ᅙ */
	0x115f, 0x11a2,	/* ᅟ-ᆢ */
	0x11a8, 0x11f9,	/* ᆨ-ᇹ */
	0x1200, 0x1248,	/* ሀ-ቈ */
	0x124a, 0x124d,	/* ቊ-ቍ */
	0x1250, 0x1256,	/* ቐ-ቖ */
	0x125a, 0x125d,	/* ቚ-ቝ */
	0x1260, 0x1288,	/* በ-ኈ */
	0x128a, 0x128d,	/* ኊ-ኍ */
	0x1290, 0x12b0,	/* ነ-ኰ */
	0x12b2, 0x12b5,	/* ኲ-ኵ */
	0x12b8, 0x12be,	/* ኸ-ኾ */
	0x12c2, 0x12c5,	/* ዂ-ዅ */
	0x12c8, 0x12d6,	/* ወ-ዖ */
	0x12d8, 0x1310,	/* ዘ-ጐ */
	0x1312, 0x1315,	/* ጒ-ጕ */
	0x1318, 0x135a,	/* ጘ-ፚ */
	0x1380, 0x138f,	/* ᎀ-ᎏ */
	0x13a0, 0x13f4,	/* Ꭰ-Ᏼ */
	0x1401, 0x166c,	/* ᐁ-ᙬ */
	0x166f, 0x1676,	/* ᙯ-ᙶ */
	0x1681, 0x169a,	/* ᚁ-ᚚ */
	0x16a0, 0x16ea,	/* ᚠ-ᛪ */
	0x1700, 0x170c,	/* ᜀ-ᜌ */
	0x170e, 0x1711,	/* ᜎ-ᜑ */
	0x1720, 0x1731,	/* ᜠ-ᜱ */
	0x1740, 0x1751,	/* ᝀ-ᝑ */
	0x1760, 0x176c,	/* ᝠ-ᝬ */
	0x176e, 0x1770,	/* ᝮ-ᝰ */
	0x1780, 0x17b3,	/* ក-ឳ */
	0x1820, 0x1842,	/* ᠠ-ᡂ */
	0x1844, 0x1877,	/* ᡄ-ᡷ */
	0x1880, 0x18a8,	/* ᢀ-ᢨ */
	0x1900, 0x191c,	/* ᤀ-ᤜ */
	0x1950, 0x196d,	/* ᥐ-ᥭ */
	0x1970, 0x1974,	/* ᥰ-ᥴ */
	0x1980, 0x19a9,	/* ᦀ-ᦩ */
	0x19c1, 0x19c7,	/* ᧁ-ᧇ */
	0x1a00, 0x1a16,	/* ᨀ-ᨖ */
	0x2135, 0x2138,	/* ℵ-ℸ */
	0x2d30, 0x2d65,	/* ⴰ-ⵥ */
	0x2d80, 0x2d96,	/* ⶀ-ⶖ */
	0x2da0, 0x2da6,	/* ⶠ-ⶦ */
	0x2da8, 0x2dae,	/* ⶨ-ⶮ */
	0x2db0, 0x2db6,	/* ⶰ-ⶶ */
	0x2db8, 0x2dbe,	/* ⶸ-ⶾ */
	0x2dc0, 0x2dc6,	/* ⷀ-ⷆ */
	0x2dc8, 0x2dce,	/* ⷈ-ⷎ */
	0x2dd0, 0x2dd6,	/* ⷐ-ⷖ */
	0x2dd8, 0x2dde,	/* ⷘ-ⷞ */
	0x3041, 0x3096,	/* ぁ-ゖ */
	0x30a1, 0x30fa,	/* ァ-ヺ */
	0x3105, 0x312c,	/* ㄅ-ㄬ */
	0x3131, 0x318e,	/* ㄱ-ㆎ */
	0x31a0, 0x31b7,	/* ㆠ-ㆷ */
	0x31f0, 0x31ff,	/* ㇰ-ㇿ */
	0x4e00, 0x9fbb,	/* 一-龻 */
	0xa000, 0xa014,	/* ꀀ-ꀔ */
	0xa016, 0xa48c,	/* ꀖ-ꒌ */
	0xa800, 0xa801,	/* ꠀ-ꠁ */
	0xa803, 0xa805,	/* ꠃ-ꠅ */
	0xa807, 0xa80a,	/* ꠇ-ꠊ */
	0xa80c, 0xa822,	/* ꠌ-ꠢ */
	0xf900, 0xfa2d,	/* 豈-鶴 */
	0xfa30, 0xfa6a,	/* 侮-頻 */
	0xfa70, 0xfad9,	/* 並-龎 */
	0xfb1f, 0xfb28,	/* ײַ-ﬨ */
	0xfb2a, 0xfb36,	/* שׁ-זּ */
	0xfb38, 0xfb3c,	/* טּ-לּ */
	0xfb40, 0xfb41,	/* נּ-סּ */
	0xfb43, 0xfb44,	/* ףּ-פּ */
	0xfb46, 0xfbb1,	/* צּ-ﮱ */
	0xfbd3, 0xfd3d,	/* ﯓ-ﴽ */
	0xfd50, 0xfd8f,	/* ﵐ-ﶏ */
	0xfd92, 0xfdc7,	/* ﶒ-ﷇ */
	0xfdf0, 0xfdfb,	/* ﷰ-ﷻ */
	0xfe70, 0xfe74,	/* ﹰ-ﹴ */
	0xfe76, 0xfefc,	/* ﹶ-ﻼ */
	0xff66, 0xff6f,	/* ヲ-ッ */
	0xff71, 0xff9d,	/* ア-ン */
	0xffa0, 0xffbe,	/* ᅠ-ᄒ */
	0xffc2, 0xffc7,	/* ᅡ-ᅦ */
	0xffca, 0xffcf,	/* ᅧ-ᅬ */
	0xffd2, 0xffd7,	/* ᅭ-ᅲ */
	0xffda, 0xffdc,	/* ᅳ-ᅵ */
};

static
Rune	__alpha1[] =
{
	0x01bb,	/* ƻ */
	0x06d5,	/* ە */
	0x06ff,	/* ۿ */
	0x0710,	/* ܐ */
	0x07b1,	/* ޱ */
	0x093d,	/* ऽ */
	0x0950,	/* ॐ */
	0x097d,	/* ॽ */
	0x09b2,	/* ল */
	0x09bd,	/* ঽ */
	0x09ce,	/* ৎ */
	0x0a5e,	/* ਫ਼ */
	0x0abd,	/* ઽ */
	0x0ad0,	/* ૐ */
	0x0b3d,	/* ଽ */
	0x0b71,	/* ୱ */
	0x0b83,	/* ஃ */
	0x0b9c,	/* ஜ */
	0x0cbd,	/* ಽ */
	0x0cde,	/* ೞ */
	0x0dbd,	/* ල */
	0x0e84,	/* ຄ */
	0x0e8a,	/* ຊ */
	0x0e8d,	/* ຍ */
	0x0ea5,	/* ລ */
	0x0ea7,	/* ວ */
	0x0ebd,	/* ຽ */
	0x0f00,	/* ༀ */
	0x1258,	/* ቘ */
	0x12c0,	/* ዀ */
	0x17dc,	/* ៜ */
	0x3006,	/* 〆 */
	0x303c,	/* 〼 */
	0x309f,	/* ゟ */
	0x30ff,	/* ヿ */
	0x3400,	/* 㐀 */
	0x4db5,	/* 䶵 */
	0x4e00,	/* 一 */
	0x9fbb,	/* 龻 */
	0xac00,	/* 가 */
	0xd7a3,	/* 힣 */
	0xfb1d,	/* יִ */
	0xfb3e,	/* מּ */

};

static
Rune	__toupper2[] =
{
	0x0061, 0x007a, 0x0041,	/* a-z, A-Z */
	0x00e0, 0x00f6, 0x00c0,	/* à-ö, À-Ö */
	0x00f8, 0x00fe, 0x00d8,	/* ø-þ, Ø-Þ */
	0x0256, 0x0257, 0x0189,	/* ɖ-ɗ, Ɖ-Ɗ */
	0x028a, 0x028b, 0x01b1,	/* ʊ-ʋ, Ʊ-Ʋ */
	0x03ad, 0x03af, 0x0388,	/* έ-ί, Έ-Ί */
	0x03b1, 0x03c1, 0x0391,	/* α-ρ, Α-Ρ */
	0x03c3, 0x03cb, 0x03a3,	/* σ-ϋ, Σ-Ϋ */
	0x03cd, 0x03ce, 0x038e,	/* ύ-ώ, Ύ-Ώ */
	0x0430, 0x044f, 0x0410,	/* а-я, А-Я */
	0x0450, 0x045f, 0x0400,	/* ѐ-џ, Ѐ-Џ */
	0x0561, 0x0586, 0x0531,	/* ա-ֆ, Ա-Ֆ */
	0x1f00, 0x1f07, 0x1f08,	/* ἀ-ἇ, Ἀ-Ἇ */
	0x1f10, 0x1f15, 0x1f18,	/* ἐ-ἕ, Ἐ-Ἕ */
	0x1f20, 0x1f27, 0x1f28,	/* ἠ-ἧ, Ἠ-Ἧ */
	0x1f30, 0x1f37, 0x1f38,	/* ἰ-ἷ, Ἰ-Ἷ */
	0x1f40, 0x1f45, 0x1f48,	/* ὀ-ὅ, Ὀ-Ὅ */
	0x1f60, 0x1f67, 0x1f68,	/* ὠ-ὧ, Ὠ-Ὧ */
	0x1f70, 0x1f71, 0x1fba,	/* ὰ-ά, Ὰ-Ά */
	0x1f72, 0x1f75, 0x1fc8,	/* ὲ-ή, Ὲ-Ή */
	0x1f76, 0x1f77, 0x1fda,	/* ὶ-ί, Ὶ-Ί */
	0x1f78, 0x1f79, 0x1ff8,	/* ὸ-ό, Ὸ-Ό */
	0x1f7a, 0x1f7b, 0x1fea,	/* ὺ-ύ, Ὺ-Ύ */
	0x1f7c, 0x1f7d, 0x1ffa,	/* ὼ-ώ, Ὼ-Ώ */
	0x1f80, 0x1f87, 0x1f88,	/* ᾀ-ᾇ, ᾈ-ᾏ */
	0x1f90, 0x1f97, 0x1f98,	/* ᾐ-ᾗ, ᾘ-ᾟ */
	0x1fa0, 0x1fa7, 0x1fa8,	/* ᾠ-ᾧ, ᾨ-ᾯ */
	0x1fb0, 0x1fb1, 0x1fb8,	/* ᾰ-ᾱ, Ᾰ-Ᾱ */
	0x1fd0, 0x1fd1, 0x1fd8,	/* ῐ-ῑ, Ῐ-Ῑ */
	0x1fe0, 0x1fe1, 0x1fe8,	/* ῠ-ῡ, Ῠ-Ῡ */
	0x2170, 0x217f, 0x2160,	/* ⅰ-ⅿ, Ⅰ-Ⅿ */
	0x24d0, 0x24e9, 0x24b6,	/* ⓐ-ⓩ, Ⓐ-Ⓩ */
	0x2c30, 0x2c5e, 0x2c00,	/* ⰰ-ⱞ, Ⰰ-Ⱞ */
	0x2d00, 0x2d25, 0x10a0,	/* ⴀ-ⴥ, Ⴀ-Ⴥ */
	0xff41, 0xff5a, 0xff21,	/* a-z, A-Z */
};

static
Rune	__toupper1[] =
{
	0x00aa, 0x0000,	/* ª, <nil> */
	0x00b5, 0x039c,	/* µ, Μ */
	0x00ba, 0x0000,	/* º, <nil> */
	0x00df, 0x0000,	/* ß, <nil> */
	0x00ff, 0x0178,	/* ÿ, Ÿ */
	0x0101, 0x0100,	/* ā, Ā */
	0x0103, 0x0102,	/* ă, Ă */
	0x0105, 0x0104,	/* ą, Ą */
	0x0107, 0x0106,	/* ć, Ć */
	0x0109, 0x0108,	/* ĉ, Ĉ */
	0x010b, 0x010a,	/* ċ, Ċ */
	0x010d, 0x010c,	/* č, Č */
	0x010f, 0x010e,	/* ď, Ď */
	0x0111, 0x0110,	/* đ, Đ */
	0x0113, 0x0112,	/* ē, Ē */
	0x0115, 0x0114,	/* ĕ, Ĕ */
	0x0117, 0x0116,	/* ė, Ė */
	0x0119, 0x0118,	/* ę, Ę */
	0x011b, 0x011a,	/* ě, Ě */
	0x011d, 0x011c,	/* ĝ, Ĝ */
	0x011f, 0x011e,	/* ğ, Ğ */
	0x0121, 0x0120,	/* ġ, Ġ */
	0x0123, 0x0122,	/* ģ, Ģ */
	0x0125, 0x0124,	/* ĥ, Ĥ */
	0x0127, 0x0126,	/* ħ, Ħ */
	0x0129, 0x0128,	/* ĩ, Ĩ */
	0x012b, 0x012a,	/* ī, Ī */
	0x012d, 0x012c,	/* ĭ, Ĭ */
	0x012f, 0x012e,	/* į, Į */
	0x0131, 0x0049,	/* ı, I */
	0x0133, 0x0132,	/* ij, IJ */
	0x0135, 0x0134,	/* ĵ, Ĵ */
	0x0137, 0x0136,	/* ķ, Ķ */
	0x0138, 0x0000,	/* ĸ, <nil> */
	0x013a, 0x0139,	/* ĺ, Ĺ */
	0x013c, 0x013b,	/* ļ, Ļ */
	0x013e, 0x013d,	/* ľ, Ľ */
	0x0140, 0x013f,	/* ŀ, Ŀ */
	0x0142, 0x0141,	/* ł, Ł */
	0x0144, 0x0143,	/* ń, Ń */
	0x0146, 0x0145,	/* ņ, Ņ */
	0x0148, 0x0147,	/* ň, Ň */
	0x0149, 0x0000,	/* ʼn, <nil> */
	0x014b, 0x014a,	/* ŋ, Ŋ */
	0x014d, 0x014c,	/* ō, Ō */
	0x014f, 0x014e,	/* ŏ, Ŏ */
	0x0151, 0x0150,	/* ő, Ő */
	0x0153, 0x0152,	/* œ, Œ */
	0x0155, 0x0154,	/* ŕ, Ŕ */
	0x0157, 0x0156,	/* ŗ, Ŗ */
	0x0159, 0x0158,	/* ř, Ř */
	0x015b, 0x015a,	/* ś, Ś */
	0x015d, 0x015c,	/* ŝ, Ŝ */
	0x015f, 0x015e,	/* ş, Ş */
	0x0161, 0x0160,	/* š, Š */
	0x0163, 0x0162,	/* ţ, Ţ */
	0x0165, 0x0164,	/* ť, Ť */
	0x0167, 0x0166,	/* ŧ, Ŧ */
	0x0169, 0x0168,	/* ũ, Ũ */
	0x016b, 0x016a,	/* ū, Ū */
	0x016d, 0x016c,	/* ŭ, Ŭ */
	0x016f, 0x016e,	/* ů, Ů */
	0x0171, 0x0170,	/* ű, Ű */
	0x0173, 0x0172,	/* ų, Ų */
	0x0175, 0x0174,	/* ŵ, Ŵ */
	0x0177, 0x0176,	/* ŷ, Ŷ */
	0x017a, 0x0179,	/* ź, Ź */
	0x017c, 0x017b,	/* ż, Ż */
	0x017e, 0x017d,	/* ž, Ž */
	0x017f, 0x0053,	/* ſ, S */
	0x0180, 0x0000,	/* ƀ, <nil> */
	0x0183, 0x0182,	/* ƃ, Ƃ */
	0x0185, 0x0184,	/* ƅ, Ƅ */
	0x0188, 0x0187,	/* ƈ, Ƈ */
	0x018c, 0x018b,	/* ƌ, Ƌ */
	0x018d, 0x0000,	/* ƍ, <nil> */
	0x0192, 0x0191,	/* ƒ, Ƒ */
	0x0195, 0x01f6,	/* ƕ, Ƕ */
	0x0199, 0x0198,	/* ƙ, Ƙ */
	0x019a, 0x023d,	/* ƚ, Ƚ */
	0x019b, 0x0000,	/* ƛ, <nil> */
	0x019e, 0x0220,	/* ƞ, Ƞ */
	0x01a1, 0x01a0,	/* ơ, Ơ */
	0x01a3, 0x01a2,	/* ƣ, Ƣ */
	0x01a5, 0x01a4,	/* ƥ, Ƥ */
	0x01a8, 0x01a7,	/* ƨ, Ƨ */
	0x01aa, 0x0000,	/* ƪ, <nil> */
	0x01ab, 0x0000,	/* ƫ, <nil> */
	0x01ad, 0x01ac,	/* ƭ, Ƭ */
	0x01b0, 0x01af,	/* ư, Ư */
	0x01b4, 0x01b3,	/* ƴ, Ƴ */
	0x01b6, 0x01b5,	/* ƶ, Ƶ */
	0x01b9, 0x01b8,	/* ƹ, Ƹ */
	0x01ba, 0x0000,	/* ƺ, <nil> */
	0x01bd, 0x01bc,	/* ƽ, Ƽ */
	0x01be, 0x0000,	/* ƾ, <nil> */
	0x01bf, 0x01f7,	/* ƿ, Ƿ */
	0x01c5, 0x01c4,	/* Dž, DŽ */
	0x01c6, 0x01c4,	/* dž, DŽ */
	0x01c8, 0x01c7,	/* Lj, LJ */
	0x01c9, 0x01c7,	/* lj, LJ */
	0x01cb, 0x01ca,	/* Nj, NJ */
	0x01cc, 0x01ca,	/* nj, NJ */
	0x01ce, 0x01cd,	/* ǎ, Ǎ */
	0x01d0, 0x01cf,	/* ǐ, Ǐ */
	0x01d2, 0x01d1,	/* ǒ, Ǒ */
	0x01d4, 0x01d3,	/* ǔ, Ǔ */
	0x01d6, 0x01d5,	/* ǖ, Ǖ */
	0x01d8, 0x01d7,	/* ǘ, Ǘ */
	0x01da, 0x01d9,	/* ǚ, Ǚ */
	0x01dc, 0x01db,	/* ǜ, Ǜ */
	0x01dd, 0x018e,	/* ǝ, Ǝ */
	0x01df, 0x01de,	/* ǟ, Ǟ */
	0x01e1, 0x01e0,	/* ǡ, Ǡ */
	0x01e3, 0x01e2,	/* ǣ, Ǣ */
	0x01e5, 0x01e4,	/* ǥ, Ǥ */
	0x01e7, 0x01e6,	/* ǧ, Ǧ */
	0x01e9, 0x01e8,	/* ǩ, Ǩ */
	0x01eb, 0x01ea,	/* ǫ, Ǫ */
	0x01ed, 0x01ec,	/* ǭ, Ǭ */
	0x01ef, 0x01ee,	/* ǯ, Ǯ */
	0x01f0, 0x0000,	/* ǰ, <nil> */
	0x01f2, 0x01f1,	/* Dz, DZ */
	0x01f3, 0x01f1,	/* dz, DZ */
	0x01f5, 0x01f4,	/* ǵ, Ǵ */
	0x01f9, 0x01f8,	/* ǹ, Ǹ */
	0x01fb, 0x01fa,	/* ǻ, Ǻ */
	0x01fd, 0x01fc,	/* ǽ, Ǽ */
	0x01ff, 0x01fe,	/* ǿ, Ǿ */
	0x0201, 0x0200,	/* ȁ, Ȁ */
	0x0203, 0x0202,	/* ȃ, Ȃ */
	0x0205, 0x0204,	/* ȅ, Ȅ */
	0x0207, 0x0206,	/* ȇ, Ȇ */
	0x0209, 0x0208,	/* ȉ, Ȉ */
	0x020b, 0x020a,	/* ȋ, Ȋ */
	0x020d, 0x020c,	/* ȍ, Ȍ */
	0x020f, 0x020e,	/* ȏ, Ȏ */
	0x0211, 0x0210,	/* ȑ, Ȑ */
	0x0213, 0x0212,	/* ȓ, Ȓ */
	0x0215, 0x0214,	/* ȕ, Ȕ */
	0x0217, 0x0216,	/* ȗ, Ȗ */
	0x0219, 0x0218,	/* ș, Ș */
	0x021b, 0x021a,	/* ț, Ț */
	0x021d, 0x021c,	/* ȝ, Ȝ */
	0x021f, 0x021e,	/* ȟ, Ȟ */
	0x0221, 0x0000,	/* ȡ, <nil> */
	0x0223, 0x0222,	/* ȣ, Ȣ */
	0x0225, 0x0224,	/* ȥ, Ȥ */
	0x0227, 0x0226,	/* ȧ, Ȧ */
	0x0229, 0x0228,	/* ȩ, Ȩ */
	0x022b, 0x022a,	/* ȫ, Ȫ */
	0x022d, 0x022c,	/* ȭ, Ȭ */
	0x022f, 0x022e,	/* ȯ, Ȯ */
	0x0231, 0x0230,	/* ȱ, Ȱ */
	0x0233, 0x0232,	/* ȳ, Ȳ */
	0x0234, 0x0000,	/* ȴ, <nil> */
	0x0235, 0x0000,	/* ȵ, <nil> */
	0x0236, 0x0000,	/* ȶ, <nil> */
	0x0237, 0x0000,	/* ȷ, <nil> */
	0x0238, 0x0000,	/* ȸ, <nil> */
	0x0239, 0x0000,	/* ȹ, <nil> */
	0x023c, 0x023b,	/* ȼ, Ȼ */
	0x023f, 0x0000,	/* ȿ, <nil> */
	0x0240, 0x0000,	/* ɀ, <nil> */
	0x0250, 0x0000,	/* ɐ, <nil> */
	0x0251, 0x0000,	/* ɑ, <nil> */
	0x0252, 0x0000,	/* ɒ, <nil> */
	0x0253, 0x0181,	/* ɓ, Ɓ */
	0x0254, 0x0186,	/* ɔ, Ɔ */
	0x0255, 0x0000,	/* ɕ, <nil> */
	0x0258, 0x0000,	/* ɘ, <nil> */
	0x0259, 0x018f,	/* ə, Ə */
	0x025a, 0x0000,	/* ɚ, <nil> */
	0x025b, 0x0190,	/* ɛ, Ɛ */
	0x025c, 0x0000,	/* ɜ, <nil> */
	0x025d, 0x0000,	/* ɝ, <nil> */
	0x025e, 0x0000,	/* ɞ, <nil> */
	0x025f, 0x0000,	/* ɟ, <nil> */
	0x0260, 0x0193,	/* ɠ, Ɠ */
	0x0261, 0x0000,	/* ɡ, <nil> */
	0x0262, 0x0000,	/* ɢ, <nil> */
	0x0263, 0x0194,	/* ɣ, Ɣ */
	0x0264, 0x0000,	/* ɤ, <nil> */
	0x0265, 0x0000,	/* ɥ, <nil> */
	0x0266, 0x0000,	/* ɦ, <nil> */
	0x0267, 0x0000,	/* ɧ, <nil> */
	0x0268, 0x0197,	/* ɨ, Ɨ */
	0x0269, 0x0196,	/* ɩ, Ɩ */
	0x026a, 0x0000,	/* ɪ, <nil> */
	0x026b, 0x0000,	/* ɫ, <nil> */
	0x026c, 0x0000,	/* ɬ, <nil> */
	0x026d, 0x0000,	/* ɭ, <nil> */
	0x026e, 0x0000,	/* ɮ, <nil> */
	0x026f, 0x019c,	/* ɯ, Ɯ */
	0x0270, 0x0000,	/* ɰ, <nil> */
	0x0271, 0x0000,	/* ɱ, <nil> */
	0x0272, 0x019d,	/* ɲ, Ɲ */
	0x0273, 0x0000,	/* ɳ, <nil> */
	0x0274, 0x0000,	/* ɴ, <nil> */
	0x0275, 0x019f,	/* ɵ, Ɵ */
	0x0276, 0x0000,	/* ɶ, <nil> */
	0x0277, 0x0000,	/* ɷ, <nil> */
	0x0278, 0x0000,	/* ɸ, <nil> */
	0x0279, 0x0000,	/* ɹ, <nil> */
	0x027a, 0x0000,	/* ɺ, <nil> */
	0x027b, 0x0000,	/* ɻ, <nil> */
	0x027c, 0x0000,	/* ɼ, <nil> */
	0x027d, 0x0000,	/* ɽ, <nil> */
	0x027e, 0x0000,	/* ɾ, <nil> */
	0x027f, 0x0000,	/* ɿ, <nil> */
	0x0280, 0x01a6,	/* ʀ, Ʀ */
	0x0281, 0x0000,	/* ʁ, <nil> */
	0x0282, 0x0000,	/* ʂ, <nil> */
	0x0283, 0x01a9,	/* ʃ, Ʃ */
	0x0284, 0x0000,	/* ʄ, <nil> */
	0x0285, 0x0000,	/* ʅ, <nil> */
	0x0286, 0x0000,	/* ʆ, <nil> */
	0x0287, 0x0000,	/* ʇ, <nil> */
	0x0288, 0x01ae,	/* ʈ, Ʈ */
	0x0289, 0x0000,	/* ʉ, <nil> */
	0x028c, 0x0000,	/* ʌ, <nil> */
	0x028d, 0x0000,	/* ʍ, <nil> */
	0x028e, 0x0000,	/* ʎ, <nil> */
	0x028f, 0x0000,	/* ʏ, <nil> */
	0x0290, 0x0000,	/* ʐ, <nil> */
	0x0291, 0x0000,	/* ʑ, <nil> */
	0x0292, 0x01b7,	/* ʒ, Ʒ */
	0x0293, 0x0000,	/* ʓ, <nil> */
	0x0294, 0x0241,	/* ʔ, Ɂ */
	0x0295, 0x0000,	/* ʕ, <nil> */
	0x0296, 0x0000,	/* ʖ, <nil> */
	0x0297, 0x0000,	/* ʗ, <nil> */
	0x0298, 0x0000,	/* ʘ, <nil> */
	0x0299, 0x0000,	/* ʙ, <nil> */
	0x029a, 0x0000,	/* ʚ, <nil> */
	0x029b, 0x0000,	/* ʛ, <nil> */
	0x029c, 0x0000,	/* ʜ, <nil> */
	0x029d, 0x0000,	/* ʝ, <nil> */
	0x029e, 0x0000,	/* ʞ, <nil> */
	0x029f, 0x0000,	/* ʟ, <nil> */
	0x02a0, 0x0000,	/* ʠ, <nil> */
	0x02a1, 0x0000,	/* ʡ, <nil> */
	0x02a2, 0x0000,	/* ʢ, <nil> */
	0x02a3, 0x0000,	/* ʣ, <nil> */
	0x02a4, 0x0000,	/* ʤ, <nil> */
	0x02a5, 0x0000,	/* ʥ, <nil> */
	0x02a6, 0x0000,	/* ʦ, <nil> */
	0x02a7, 0x0000,	/* ʧ, <nil> */
	0x02a8, 0x0000,	/* ʨ, <nil> */
	0x02a9, 0x0000,	/* ʩ, <nil> */
	0x02aa, 0x0000,	/* ʪ, <nil> */
	0x02ab, 0x0000,	/* ʫ, <nil> */
	0x02ac, 0x0000,	/* ʬ, <nil> */
	0x02ad, 0x0000,	/* ʭ, <nil> */
	0x02ae, 0x0000,	/* ʮ, <nil> */
	0x02af, 0x0000,	/* ʯ, <nil> */
	0x0345, 0x0399,	/* ͅ, Ι */
	0x0390, 0x0000,	/* ΐ, <nil> */
	0x03ac, 0x0386,	/* ά, Ά */
	0x03b0, 0x0000,	/* ΰ, <nil> */
	0x03c2, 0x03a3,	/* ς, Σ */
	0x03cc, 0x038c,	/* ό, Ό */
	0x03d0, 0x0392,	/* ϐ, Β */
	0x03d1, 0x0398,	/* ϑ, Θ */
	0x03d5, 0x03a6,	/* ϕ, Φ */
	0x03d6, 0x03a0,	/* ϖ, Π */
	0x03d7, 0x0000,	/* ϗ, <nil> */
	0x03d9, 0x03d8,	/* ϙ, Ϙ */
	0x03db, 0x03da,	/* ϛ, Ϛ */
	0x03dd, 0x03dc,	/* ϝ, Ϝ */
	0x03df, 0x03de,	/* ϟ, Ϟ */
	0x03e1, 0x03e0,	/* ϡ, Ϡ */
	0x03e3, 0x03e2,	/* ϣ, Ϣ */
	0x03e5, 0x03e4,	/* ϥ, Ϥ */
	0x03e7, 0x03e6,	/* ϧ, Ϧ */
	0x03e9, 0x03e8,	/* ϩ, Ϩ */
	0x03eb, 0x03ea,	/* ϫ, Ϫ */
	0x03ed, 0x03ec,	/* ϭ, Ϭ */
	0x03ef, 0x03ee,	/* ϯ, Ϯ */
	0x03f0, 0x039a,	/* ϰ, Κ */
	0x03f1, 0x03a1,	/* ϱ, Ρ */
	0x03f2, 0x03f9,	/* ϲ, Ϲ */
	0x03f3, 0x0000,	/* ϳ, <nil> */
	0x03f5, 0x0395,	/* ϵ, Ε */
	0x03f8, 0x03f7,	/* ϸ, Ϸ */
	0x03fb, 0x03fa,	/* ϻ, Ϻ */
	0x03fc, 0x0000,	/* ϼ, <nil> */
	0x0461, 0x0460,	/* ѡ, Ѡ */
	0x0463, 0x0462,	/* ѣ, Ѣ */
	0x0465, 0x0464,	/* ѥ, Ѥ */
	0x0467, 0x0466,	/* ѧ, Ѧ */
	0x0469, 0x0468,	/* ѩ, Ѩ */
	0x046b, 0x046a,	/* ѫ, Ѫ */
	0x046d, 0x046c,	/* ѭ, Ѭ */
	0x046f, 0x046e,	/* ѯ, Ѯ */
	0x0471, 0x0470,	/* ѱ, Ѱ */
	0x0473, 0x0472,	/* ѳ, Ѳ */
	0x0475, 0x0474,	/* ѵ, Ѵ */
	0x0477, 0x0476,	/* ѷ, Ѷ */
	0x0479, 0x0478,	/* ѹ, Ѹ */
	0x047b, 0x047a,	/* ѻ, Ѻ */
	0x047d, 0x047c,	/* ѽ, Ѽ */
	0x047f, 0x047e,	/* ѿ, Ѿ */
	0x0481, 0x0480,	/* ҁ, Ҁ */
	0x048b, 0x048a,	/* ҋ, Ҋ */
	0x048d, 0x048c,	/* ҍ, Ҍ */
	0x048f, 0x048e,	/* ҏ, Ҏ */
	0x0491, 0x0490,	/* ґ, Ґ */
	0x0493, 0x0492,	/* ғ, Ғ */
	0x0495, 0x0494,	/* ҕ, Ҕ */
	0x0497, 0x0496,	/* җ, Җ */
	0x0499, 0x0498,	/* ҙ, Ҙ */
	0x049b, 0x049a,	/* қ, Қ */
	0x049d, 0x049c,	/* ҝ, Ҝ */
	0x049f, 0x049e,	/* ҟ, Ҟ */
	0x04a1, 0x04a0,	/* ҡ, Ҡ */
	0x04a3, 0x04a2,	/* ң, Ң */
	0x04a5, 0x04a4,	/* ҥ, Ҥ */
	0x04a7, 0x04a6,	/* ҧ, Ҧ */
	0x04a9, 0x04a8,	/* ҩ, Ҩ */
	0x04ab, 0x04aa,	/* ҫ, Ҫ */
	0x04ad, 0x04ac,	/* ҭ, Ҭ */
	0x04af, 0x04ae,	/* ү, Ү */
	0x04b1, 0x04b0,	/* ұ, Ұ */
	0x04b3, 0x04b2,	/* ҳ, Ҳ */
	0x04b5, 0x04b4,	/* ҵ, Ҵ */
	0x04b7, 0x04b6,	/* ҷ, Ҷ */
	0x04b9, 0x04b8,	/* ҹ, Ҹ */
	0x04bb, 0x04ba,	/* һ, Һ */
	0x04bd, 0x04bc,	/* ҽ, Ҽ */
	0x04bf, 0x04be,	/* ҿ, Ҿ */
	0x04c2, 0x04c1,	/* ӂ, Ӂ */
	0x04c4, 0x04c3,	/* ӄ, Ӄ */
	0x04c6, 0x04c5,	/* ӆ, Ӆ */
	0x04c8, 0x04c7,	/* ӈ, Ӈ */
	0x04ca, 0x04c9,	/* ӊ, Ӊ */
	0x04cc, 0x04cb,	/* ӌ, Ӌ */
	0x04ce, 0x04cd,	/* ӎ, Ӎ */
	0x04d1, 0x04d0,	/* ӑ, Ӑ */
	0x04d3, 0x04d2,	/* ӓ, Ӓ */
	0x04d5, 0x04d4,	/* ӕ, Ӕ */
	0x04d7, 0x04d6,	/* ӗ, Ӗ */
	0x04d9, 0x04d8,	/* ә, Ә */
	0x04db, 0x04da,	/* ӛ, Ӛ */
	0x04dd, 0x04dc,	/* ӝ, Ӝ */
	0x04df, 0x04de,	/* ӟ, Ӟ */
	0x04e1, 0x04e0,	/* ӡ, Ӡ */
	0x04e3, 0x04e2,	/* ӣ, Ӣ */
	0x04e5, 0x04e4,	/* ӥ, Ӥ */
	0x04e7, 0x04e6,	/* ӧ, Ӧ */
	0x04e9, 0x04e8,	/* ө, Ө */
	0x04eb, 0x04ea,	/* ӫ, Ӫ */
	0x04ed, 0x04ec,	/* ӭ, Ӭ */
	0x04ef, 0x04ee,	/* ӯ, Ӯ */
	0x04f1, 0x04f0,	/* ӱ, Ӱ */
	0x04f3, 0x04f2,	/* ӳ, Ӳ */
	0x04f5, 0x04f4,	/* ӵ, Ӵ */
	0x04f7, 0x04f6,	/* ӷ, Ӷ */
	0x04f9, 0x04f8,	/* ӹ, Ӹ */
	0x0501, 0x0500,	/* ԁ, Ԁ */
	0x0503, 0x0502,	/* ԃ, Ԃ */
	0x0505, 0x0504,	/* ԅ, Ԅ */
	0x0507, 0x0506,	/* ԇ, Ԇ */
	0x0509, 0x0508,	/* ԉ, Ԉ */
	0x050b, 0x050a,	/* ԋ, Ԋ */
	0x050d, 0x050c,	/* ԍ, Ԍ */
	0x050f, 0x050e,	/* ԏ, Ԏ */
	0x0587, 0x0000,	/* և, <nil> */
	0x1d00, 0x0000,	/* ᴀ, <nil> */
	0x1d01, 0x0000,	/* ᴁ, <nil> */
	0x1d02, 0x0000,	/* ᴂ, <nil> */
	0x1d03, 0x0000,	/* ᴃ, <nil> */
	0x1d04, 0x0000,	/* ᴄ, <nil> */
	0x1d05, 0x0000,	/* ᴅ, <nil> */
	0x1d06, 0x0000,	/* ᴆ, <nil> */
	0x1d07, 0x0000,	/* ᴇ, <nil> */
	0x1d08, 0x0000,	/* ᴈ, <nil> */
	0x1d09, 0x0000,	/* ᴉ, <nil> */
	0x1d0a, 0x0000,	/* ᴊ, <nil> */
	0x1d0b, 0x0000,	/* ᴋ, <nil> */
	0x1d0c, 0x0000,	/* ᴌ, <nil> */
	0x1d0d, 0x0000,	/* ᴍ, <nil> */
	0x1d0e, 0x0000,	/* ᴎ, <nil> */
	0x1d0f, 0x0000,	/* ᴏ, <nil> */
	0x1d10, 0x0000,	/* ᴐ, <nil> */
	0x1d11, 0x0000,	/* ᴑ, <nil> */
	0x1d12, 0x0000,	/* ᴒ, <nil> */
	0x1d13, 0x0000,	/* ᴓ, <nil> */
	0x1d14, 0x0000,	/* ᴔ, <nil> */
	0x1d15, 0x0000,	/* ᴕ, <nil> */
	0x1d16, 0x0000,	/* ᴖ, <nil> */
	0x1d17, 0x0000,	/* ᴗ, <nil> */
	0x1d18, 0x0000,	/* ᴘ, <nil> */
	0x1d19, 0x0000,	/* ᴙ, <nil> */
	0x1d1a, 0x0000,	/* ᴚ, <nil> */
	0x1d1b, 0x0000,	/* ᴛ, <nil> */
	0x1d1c, 0x0000,	/* ᴜ, <nil> */
	0x1d1d, 0x0000,	/* ᴝ, <nil> */
	0x1d1e, 0x0000,	/* ᴞ, <nil> */
	0x1d1f, 0x0000,	/* ᴟ, <nil> */
	0x1d20, 0x0000,	/* ᴠ, <nil> */
	0x1d21, 0x0000,	/* ᴡ, <nil> */
	0x1d22, 0x0000,	/* ᴢ, <nil> */
	0x1d23, 0x0000,	/* ᴣ, <nil> */
	0x1d24, 0x0000,	/* ᴤ, <nil> */
	0x1d25, 0x0000,	/* ᴥ, <nil> */
	0x1d26, 0x0000,	/* ᴦ, <nil> */
	0x1d27, 0x0000,	/* ᴧ, <nil> */
	0x1d28, 0x0000,	/* ᴨ, <nil> */
	0x1d29, 0x0000,	/* ᴩ, <nil> */
	0x1d2a, 0x0000,	/* ᴪ, <nil> */
	0x1d2b, 0x0000,	/* ᴫ, <nil> */
	0x1d62, 0x0000,	/* ᵢ, <nil> */
	0x1d63, 0x0000,	/* ᵣ, <nil> */
	0x1d64, 0x0000,	/* ᵤ, <nil> */
	0x1d65, 0x0000,	/* ᵥ, <nil> */
	0x1d66, 0x0000,	/* ᵦ, <nil> */
	0x1d67, 0x0000,	/* ᵧ, <nil> */
	0x1d68, 0x0000,	/* ᵨ, <nil> */
	0x1d69, 0x0000,	/* ᵩ, <nil> */
	0x1d6a, 0x0000,	/* ᵪ, <nil> */
	0x1d6b, 0x0000,	/* ᵫ, <nil> */
	0x1d6c, 0x0000,	/* ᵬ, <nil> */
	0x1d6d, 0x0000,	/* ᵭ, <nil> */
	0x1d6e, 0x0000,	/* ᵮ, <nil> */
	0x1d6f, 0x0000,	/* ᵯ, <nil> */
	0x1d70, 0x0000,	/* ᵰ, <nil> */
	0x1d71, 0x0000,	/* ᵱ, <nil> */
	0x1d72, 0x0000,	/* ᵲ, <nil> */
	0x1d73, 0x0000,	/* ᵳ, <nil> */
	0x1d74, 0x0000,	/* ᵴ, <nil> */
	0x1d75, 0x0000,	/* ᵵ, <nil> */
	0x1d76, 0x0000,	/* ᵶ, <nil> */
	0x1d77, 0x0000,	/* ᵷ, <nil> */
	0x1d79, 0x0000,	/* ᵹ, <nil> */
	0x1d7a, 0x0000,	/* ᵺ, <nil> */
	0x1d7b, 0x0000,	/* ᵻ, <nil> */
	0x1d7c, 0x0000,	/* ᵼ, <nil> */
	0x1d7d, 0x0000,	/* ᵽ, <nil> */
	0x1d7e, 0x0000,	/* ᵾ, <nil> */
	0x1d7f, 0x0000,	/* ᵿ, <nil> */
	0x1d80, 0x0000,	/* ᶀ, <nil> */
	0x1d81, 0x0000,	/* ᶁ, <nil> */
	0x1d82, 0x0000,	/* ᶂ, <nil> */
	0x1d83, 0x0000,	/* ᶃ, <nil> */
	0x1d84, 0x0000,	/* ᶄ, <nil> */
	0x1d85, 0x0000,	/* ᶅ, <nil> */
	0x1d86, 0x0000,	/* ᶆ, <nil> */
	0x1d87, 0x0000,	/* ᶇ, <nil> */
	0x1d88, 0x0000,	/* ᶈ, <nil> */
	0x1d89, 0x0000,	/* ᶉ, <nil> */
	0x1d8a, 0x0000,	/* ᶊ, <nil> */
	0x1d8b, 0x0000,	/* ᶋ, <nil> */
	0x1d8c, 0x0000,	/* ᶌ, <nil> */
	0x1d8d, 0x0000,	/* ᶍ, <nil> */
	0x1d8e, 0x0000,	/* ᶎ, <nil> */
	0x1d8f, 0x0000,	/* ᶏ, <nil> */
	0x1d90, 0x0000,	/* ᶐ, <nil> */
	0x1d91, 0x0000,	/* ᶑ, <nil> */
	0x1d92, 0x0000,	/* ᶒ, <nil> */
	0x1d93, 0x0000,	/* ᶓ, <nil> */
	0x1d94, 0x0000,	/* ᶔ, <nil> */
	0x1d95, 0x0000,	/* ᶕ, <nil> */
	0x1d96, 0x0000,	/* ᶖ, <nil> */
	0x1d97, 0x0000,	/* ᶗ, <nil> */
	0x1d98, 0x0000,	/* ᶘ, <nil> */
	0x1d99, 0x0000,	/* ᶙ, <nil> */
	0x1d9a, 0x0000,	/* ᶚ, <nil> */
	0x1e01, 0x1e00,	/* ḁ, Ḁ */
	0x1e03, 0x1e02,	/* ḃ, Ḃ */
	0x1e05, 0x1e04,	/* ḅ, Ḅ */
	0x1e07, 0x1e06,	/* ḇ, Ḇ */
	0x1e09, 0x1e08,	/* ḉ, Ḉ */
	0x1e0b, 0x1e0a,	/* ḋ, Ḋ */
	0x1e0d, 0x1e0c,	/* ḍ, Ḍ */
	0x1e0f, 0x1e0e,	/* ḏ, Ḏ */
	0x1e11, 0x1e10,	/* ḑ, Ḑ */
	0x1e13, 0x1e12,	/* ḓ, Ḓ */
	0x1e15, 0x1e14,	/* ḕ, Ḕ */
	0x1e17, 0x1e16,	/* ḗ, Ḗ */
	0x1e19, 0x1e18,	/* ḙ, Ḙ */
	0x1e1b, 0x1e1a,	/* ḛ, Ḛ */
	0x1e1d, 0x1e1c,	/* ḝ, Ḝ */
	0x1e1f, 0x1e1e,	/* ḟ, Ḟ */
	0x1e21, 0x1e20,	/* ḡ, Ḡ */
	0x1e23, 0x1e22,	/* ḣ, Ḣ */
	0x1e25, 0x1e24,	/* ḥ, Ḥ */
	0x1e27, 0x1e26,	/* ḧ, Ḧ */
	0x1e29, 0x1e28,	/* ḩ, Ḩ */
	0x1e2b, 0x1e2a,	/* ḫ, Ḫ */
	0x1e2d, 0x1e2c,	/* ḭ, Ḭ */
	0x1e2f, 0x1e2e,	/* ḯ, Ḯ */
	0x1e31, 0x1e30,	/* ḱ, Ḱ */
	0x1e33, 0x1e32,	/* ḳ, Ḳ */
	0x1e35, 0x1e34,	/* ḵ, Ḵ */
	0x1e37, 0x1e36,	/* ḷ, Ḷ */
	0x1e39, 0x1e38,	/* ḹ, Ḹ */
	0x1e3b, 0x1e3a,	/* ḻ, Ḻ */
	0x1e3d, 0x1e3c,	/* ḽ, Ḽ */
	0x1e3f, 0x1e3e,	/* ḿ, Ḿ */
	0x1e41, 0x1e40,	/* ṁ, Ṁ */
	0x1e43, 0x1e42,	/* ṃ, Ṃ */
	0x1e45, 0x1e44,	/* ṅ, Ṅ */
	0x1e47, 0x1e46,	/* ṇ, Ṇ */
	0x1e49, 0x1e48,	/* ṉ, Ṉ */
	0x1e4b, 0x1e4a,	/* ṋ, Ṋ */
	0x1e4d, 0x1e4c,	/* ṍ, Ṍ */
	0x1e4f, 0x1e4e,	/* ṏ, Ṏ */
	0x1e51, 0x1e50,	/* ṑ, Ṑ */
	0x1e53, 0x1e52,	/* ṓ, Ṓ */
	0x1e55, 0x1e54,	/* ṕ, Ṕ */
	0x1e57, 0x1e56,	/* ṗ, Ṗ */
	0x1e59, 0x1e58,	/* ṙ, Ṙ */
	0x1e5b, 0x1e5a,	/* ṛ, Ṛ */
	0x1e5d, 0x1e5c,	/* ṝ, Ṝ */
	0x1e5f, 0x1e5e,	/* ṟ, Ṟ */
	0x1e61, 0x1e60,	/* ṡ, Ṡ */
	0x1e63, 0x1e62,	/* ṣ, Ṣ */
	0x1e65, 0x1e64,	/* ṥ, Ṥ */
	0x1e67, 0x1e66,	/* ṧ, Ṧ */
	0x1e69, 0x1e68,	/* ṩ, Ṩ */
	0x1e6b, 0x1e6a,	/* ṫ, Ṫ */
	0x1e6d, 0x1e6c,	/* ṭ, Ṭ */
	0x1e6f, 0x1e6e,	/* ṯ, Ṯ */
	0x1e71, 0x1e70,	/* ṱ, Ṱ */
	0x1e73, 0x1e72,	/* ṳ, Ṳ */
	0x1e75, 0x1e74,	/* ṵ, Ṵ */
	0x1e77, 0x1e76,	/* ṷ, Ṷ */
	0x1e79, 0x1e78,	/* ṹ, Ṹ */
	0x1e7b, 0x1e7a,	/* ṻ, Ṻ */
	0x1e7d, 0x1e7c,	/* ṽ, Ṽ */
	0x1e7f, 0x1e7e,	/* ṿ, Ṿ */
	0x1e81, 0x1e80,	/* ẁ, Ẁ */
	0x1e83, 0x1e82,	/* ẃ, Ẃ */
	0x1e85, 0x1e84,	/* ẅ, Ẅ */
	0x1e87, 0x1e86,	/* ẇ, Ẇ */
	0x1e89, 0x1e88,	/* ẉ, Ẉ */
	0x1e8b, 0x1e8a,	/* ẋ, Ẋ */
	0x1e8d, 0x1e8c,	/* ẍ, Ẍ */
	0x1e8f, 0x1e8e,	/* ẏ, Ẏ */
	0x1e91, 0x1e90,	/* ẑ, Ẑ */
	0x1e93, 0x1e92,	/* ẓ, Ẓ */
	0x1e95, 0x1e94,	/* ẕ, Ẕ */
	0x1e96, 0x0000,	/* ẖ, <nil> */
	0x1e97, 0x0000,	/* ẗ, <nil> */
	0x1e98, 0x0000,	/* ẘ, <nil> */
	0x1e99, 0x0000,	/* ẙ, <nil> */
	0x1e9a, 0x0000,	/* ẚ, <nil> */
	0x1e9b, 0x1e60,	/* ẛ, Ṡ */
	0x1ea1, 0x1ea0,	/* ạ, Ạ */
	0x1ea3, 0x1ea2,	/* ả, Ả */
	0x1ea5, 0x1ea4,	/* ấ, Ấ */
	0x1ea7, 0x1ea6,	/* ầ, Ầ */
	0x1ea9, 0x1ea8,	/* ẩ, Ẩ */
	0x1eab, 0x1eaa,	/* ẫ, Ẫ */
	0x1ead, 0x1eac,	/* ậ, Ậ */
	0x1eaf, 0x1eae,	/* ắ, Ắ */
	0x1eb1, 0x1eb0,	/* ằ, Ằ */
	0x1eb3, 0x1eb2,	/* ẳ, Ẳ */
	0x1eb5, 0x1eb4,	/* ẵ, Ẵ */
	0x1eb7, 0x1eb6,	/* ặ, Ặ */
	0x1eb9, 0x1eb8,	/* ẹ, Ẹ */
	0x1ebb, 0x1eba,	/* ẻ, Ẻ */
	0x1ebd, 0x1ebc,	/* ẽ, Ẽ */
	0x1ebf, 0x1ebe,	/* ế, Ế */
	0x1ec1, 0x1ec0,	/* ề, Ề */
	0x1ec3, 0x1ec2,	/* ể, Ể */
	0x1ec5, 0x1ec4,	/* ễ, Ễ */
	0x1ec7, 0x1ec6,	/* ệ, Ệ */
	0x1ec9, 0x1ec8,	/* ỉ, Ỉ */
	0x1ecb, 0x1eca,	/* ị, Ị */
	0x1ecd, 0x1ecc,	/* ọ, Ọ */
	0x1ecf, 0x1ece,	/* ỏ, Ỏ */
	0x1ed1, 0x1ed0,	/* ố, Ố */
	0x1ed3, 0x1ed2,	/* ồ, Ồ */
	0x1ed5, 0x1ed4,	/* ổ, Ổ */
	0x1ed7, 0x1ed6,	/* ỗ, Ỗ */
	0x1ed9, 0x1ed8,	/* ộ, Ộ */
	0x1edb, 0x1eda,	/* ớ, Ớ */
	0x1edd, 0x1edc,	/* ờ, Ờ */
	0x1edf, 0x1ede,	/* ở, Ở */
	0x1ee1, 0x1ee0,	/* ỡ, Ỡ */
	0x1ee3, 0x1ee2,	/* ợ, Ợ */
	0x1ee5, 0x1ee4,	/* ụ, Ụ */
	0x1ee7, 0x1ee6,	/* ủ, Ủ */
	0x1ee9, 0x1ee8,	/* ứ, Ứ */
	0x1eeb, 0x1eea,	/* ừ, Ừ */
	0x1eed, 0x1eec,	/* ử, Ử */
	0x1eef, 0x1eee,	/* ữ, Ữ */
	0x1ef1, 0x1ef0,	/* ự, Ự */
	0x1ef3, 0x1ef2,	/* ỳ, Ỳ */
	0x1ef5, 0x1ef4,	/* ỵ, Ỵ */
	0x1ef7, 0x1ef6,	/* ỷ, Ỷ */
	0x1ef9, 0x1ef8,	/* ỹ, Ỹ */
	0x1f50, 0x0000,	/* ὐ, <nil> */
	0x1f51, 0x1f59,	/* ὑ, Ὑ */
	0x1f52, 0x0000,	/* ὒ, <nil> */
	0x1f53, 0x1f5b,	/* ὓ, Ὓ */
	0x1f54, 0x0000,	/* ὔ, <nil> */
	0x1f55, 0x1f5d,	/* ὕ, Ὕ */
	0x1f56, 0x0000,	/* ὖ, <nil> */
	0x1f57, 0x1f5f,	/* ὗ, Ὗ */
	0x1fb2, 0x0000,	/* ᾲ, <nil> */
	0x1fb3, 0x1fbc,	/* ᾳ, ᾼ */
	0x1fb4, 0x0000,	/* ᾴ, <nil> */
	0x1fb6, 0x0000,	/* ᾶ, <nil> */
	0x1fb7, 0x0000,	/* ᾷ, <nil> */
	0x1fbe, 0x0399,	/* ι, Ι */
	0x1fc2, 0x0000,	/* ῂ, <nil> */
	0x1fc3, 0x1fcc,	/* ῃ, ῌ */
	0x1fc4, 0x0000,	/* ῄ, <nil> */
	0x1fc6, 0x0000,	/* ῆ, <nil> */
	0x1fc7, 0x0000,	/* ῇ, <nil> */
	0x1fd2, 0x0000,	/* ῒ, <nil> */
	0x1fd3, 0x0000,	/* ΐ, <nil> */
	0x1fd6, 0x0000,	/* ῖ, <nil> */
	0x1fd7, 0x0000,	/* ῗ, <nil> */
	0x1fe2, 0x0000,	/* ῢ, <nil> */
	0x1fe3, 0x0000,	/* ΰ, <nil> */
	0x1fe4, 0x0000,	/* ῤ, <nil> */
	0x1fe5, 0x1fec,	/* ῥ, Ῥ */
	0x1fe6, 0x0000,	/* ῦ, <nil> */
	0x1fe7, 0x0000,	/* ῧ, <nil> */
	0x1ff2, 0x0000,	/* ῲ, <nil> */
	0x1ff3, 0x1ffc,	/* ῳ, ῼ */
	0x1ff4, 0x0000,	/* ῴ, <nil> */
	0x1ff6, 0x0000,	/* ῶ, <nil> */
	0x1ff7, 0x0000,	/* ῷ, <nil> */
	0x2071, 0x0000,	/* ⁱ, <nil> */
	0x207f, 0x0000,	/* ⁿ, <nil> */
	0x210a, 0x0000,	/* ℊ, <nil> */
	0x210e, 0x0000,	/* ℎ, <nil> */
	0x210f, 0x0000,	/* ℏ, <nil> */
	0x2113, 0x0000,	/* ℓ, <nil> */
	0x212f, 0x0000,	/* ℯ, <nil> */
	0x2134, 0x0000,	/* ℴ, <nil> */
	0x2139, 0x0000,	/* ℹ, <nil> */
	0x213c, 0x0000,	/* ℼ, <nil> */
	0x213d, 0x0000,	/* ℽ, <nil> */
	0x2146, 0x0000,	/* ⅆ, <nil> */
	0x2147, 0x0000,	/* ⅇ, <nil> */
	0x2148, 0x0000,	/* ⅈ, <nil> */
	0x2149, 0x0000,	/* ⅉ, <nil> */
	0x2c81, 0x2c80,	/* ⲁ, Ⲁ */
	0x2c83, 0x2c82,	/* ⲃ, Ⲃ */
	0x2c85, 0x2c84,	/* ⲅ, Ⲅ */
	0x2c87, 0x2c86,	/* ⲇ, Ⲇ */
	0x2c89, 0x2c88,	/* ⲉ, Ⲉ */
	0x2c8b, 0x2c8a,	/* ⲋ, Ⲋ */
	0x2c8d, 0x2c8c,	/* ⲍ, Ⲍ */
	0x2c8f, 0x2c8e,	/* ⲏ, Ⲏ */
	0x2c91, 0x2c90,	/* ⲑ, Ⲑ */
	0x2c93, 0x2c92,	/* ⲓ, Ⲓ */
	0x2c95, 0x2c94,	/* ⲕ, Ⲕ */
	0x2c97, 0x2c96,	/* ⲗ, Ⲗ */
	0x2c99, 0x2c98,	/* ⲙ, Ⲙ */
	0x2c9b, 0x2c9a,	/* ⲛ, Ⲛ */
	0x2c9d, 0x2c9c,	/* ⲝ, Ⲝ */
	0x2c9f, 0x2c9e,	/* ⲟ, Ⲟ */
	0x2ca1, 0x2ca0,	/* ⲡ, Ⲡ */
	0x2ca3, 0x2ca2,	/* ⲣ, Ⲣ */
	0x2ca5, 0x2ca4,	/* ⲥ, Ⲥ */
	0x2ca7, 0x2ca6,	/* ⲧ, Ⲧ */
	0x2ca9, 0x2ca8,	/* ⲩ, Ⲩ */
	0x2cab, 0x2caa,	/* ⲫ, Ⲫ */
	0x2cad, 0x2cac,	/* ⲭ, Ⲭ */
	0x2caf, 0x2cae,	/* ⲯ, Ⲯ */
	0x2cb1, 0x2cb0,	/* ⲱ, Ⲱ */
	0x2cb3, 0x2cb2,	/* ⲳ, Ⲳ */
	0x2cb5, 0x2cb4,	/* ⲵ, Ⲵ */
	0x2cb7, 0x2cb6,	/* ⲷ, Ⲷ */
	0x2cb9, 0x2cb8,	/* ⲹ, Ⲹ */
	0x2cbb, 0x2cba,	/* ⲻ, Ⲻ */
	0x2cbd, 0x2cbc,	/* ⲽ, Ⲽ */
	0x2cbf, 0x2cbe,	/* ⲿ, Ⲿ */
	0x2cc1, 0x2cc0,	/* ⳁ, Ⳁ */
	0x2cc3, 0x2cc2,	/* ⳃ, Ⳃ */
	0x2cc5, 0x2cc4,	/* ⳅ, Ⳅ */
	0x2cc7, 0x2cc6,	/* ⳇ, Ⳇ */
	0x2cc9, 0x2cc8,	/* ⳉ, Ⳉ */
	0x2ccb, 0x2cca,	/* ⳋ, Ⳋ */
	0x2ccd, 0x2ccc,	/* ⳍ, Ⳍ */
	0x2ccf, 0x2cce,	/* ⳏ, Ⳏ */
	0x2cd1, 0x2cd0,	/* ⳑ, Ⳑ */
	0x2cd3, 0x2cd2,	/* ⳓ, Ⳓ */
	0x2cd5, 0x2cd4,	/* ⳕ, Ⳕ */
	0x2cd7, 0x2cd6,	/* ⳗ, Ⳗ */
	0x2cd9, 0x2cd8,	/* ⳙ, Ⳙ */
	0x2cdb, 0x2cda,	/* ⳛ, Ⳛ */
	0x2cdd, 0x2cdc,	/* ⳝ, Ⳝ */
	0x2cdf, 0x2cde,	/* ⳟ, Ⳟ */
	0x2ce1, 0x2ce0,	/* ⳡ, Ⳡ */
	0x2ce3, 0x2ce2,	/* ⳣ, Ⳣ */
	0x2ce4, 0x0000,	/* ⳤ, <nil> */
	0xfb00, 0x0000,	/* ff, <nil> */
	0xfb01, 0x0000,	/* fi, <nil> */
	0xfb02, 0x0000,	/* fl, <nil> */
	0xfb03, 0x0000,	/* ffi, <nil> */
	0xfb04, 0x0000,	/* ffl, <nil> */
	0xfb05, 0x0000,	/* ſt, <nil> */
	0xfb06, 0x0000,	/* st, <nil> */
	0xfb13, 0x0000,	/* ﬓ, <nil> */
	0xfb14, 0x0000,	/* ﬔ, <nil> */
	0xfb15, 0x0000,	/* ﬕ, <nil> */
	0xfb16, 0x0000,	/* ﬖ, <nil> */
	0xfb17, 0x0000,	/* ﬗ, <nil> */

};

static
Rune	__tolower2[] =
{
	0x0041, 0x005a, 0x0061,	/* A-Z, a-z */
	0x00c0, 0x00d6, 0x00e0,	/* À-Ö, à-ö */
	0x00d8, 0x00de, 0x00f8,	/* Ø-Þ, ø-þ */
	0x0189, 0x018a, 0x0256,	/* Ɖ-Ɗ, ɖ-ɗ */
	0x01b1, 0x01b2, 0x028a,	/* Ʊ-Ʋ, ʊ-ʋ */
	0x0388, 0x038a, 0x03ad,	/* Έ-Ί, έ-ί */
	0x038e, 0x038f, 0x03cd,	/* Ύ-Ώ, ύ-ώ */
	0x0391, 0x03a1, 0x03b1,	/* Α-Ρ, α-ρ */
	0x03a3, 0x03ab, 0x03c3,	/* Σ-Ϋ, σ-ϋ */
	0x0400, 0x040f, 0x0450,	/* Ѐ-Џ, ѐ-џ */
	0x0410, 0x042f, 0x0430,	/* А-Я, а-я */
	0x0531, 0x0556, 0x0561,	/* Ա-Ֆ, ա-ֆ */
	0x10a0, 0x10c5, 0x2d00,	/* Ⴀ-Ⴥ, ⴀ-ⴥ */
	0x1f08, 0x1f0f, 0x1f00,	/* Ἀ-Ἇ, ἀ-ἇ */
	0x1f18, 0x1f1d, 0x1f10,	/* Ἐ-Ἕ, ἐ-ἕ */
	0x1f28, 0x1f2f, 0x1f20,	/* Ἠ-Ἧ, ἠ-ἧ */
	0x1f38, 0x1f3f, 0x1f30,	/* Ἰ-Ἷ, ἰ-ἷ */
	0x1f48, 0x1f4d, 0x1f40,	/* Ὀ-Ὅ, ὀ-ὅ */
	0x1f68, 0x1f6f, 0x1f60,	/* Ὠ-Ὧ, ὠ-ὧ */
	0x1f88, 0x1f8f, 0x1f80,	/* ᾈ-ᾏ, ᾀ-ᾇ */
	0x1f98, 0x1f9f, 0x1f90,	/* ᾘ-ᾟ, ᾐ-ᾗ */
	0x1fa8, 0x1faf, 0x1fa0,	/* ᾨ-ᾯ, ᾠ-ᾧ */
	0x1fb8, 0x1fb9, 0x1fb0,	/* Ᾰ-Ᾱ, ᾰ-ᾱ */
	0x1fba, 0x1fbb, 0x1f70,	/* Ὰ-Ά, ὰ-ά */
	0x1fc8, 0x1fcb, 0x1f72,	/* Ὲ-Ή, ὲ-ή */
	0x1fd8, 0x1fd9, 0x1fd0,	/* Ῐ-Ῑ, ῐ-ῑ */
	0x1fda, 0x1fdb, 0x1f76,	/* Ὶ-Ί, ὶ-ί */
	0x1fe8, 0x1fe9, 0x1fe0,	/* Ῠ-Ῡ, ῠ-ῡ */
	0x1fea, 0x1feb, 0x1f7a,	/* Ὺ-Ύ, ὺ-ύ */
	0x1ff8, 0x1ff9, 0x1f78,	/* Ὸ-Ό, ὸ-ό */
	0x1ffa, 0x1ffb, 0x1f7c,	/* Ὼ-Ώ, ὼ-ώ */
	0x2160, 0x216f, 0x2170,	/* Ⅰ-Ⅿ, ⅰ-ⅿ */
	0x24b6, 0x24cf, 0x24d0,	/* Ⓐ-Ⓩ, ⓐ-ⓩ */
	0x2c00, 0x2c2e, 0x2c30,	/* Ⰰ-Ⱞ, ⰰ-ⱞ */
	0xff21, 0xff3a, 0xff41,	/* A-Z, a-z */
};

/*
 * We allow the target character to be nil so isupperrune() works,
 * even for bogus unicode that doesn't have a tolower().
 */

static
Rune	__tolower1[] =
{
	0x0100, 0x0101,	/* Ā, ā */
	0x0102, 0x0103,	/* Ă, ă */
	0x0104, 0x0105,	/* Ą, ą */
	0x0106, 0x0107,	/* Ć, ć */
	0x0108, 0x0109,	/* Ĉ, ĉ */
	0x010a, 0x010b,	/* Ċ, ċ */
	0x010c, 0x010d,	/* Č, č */
	0x010e, 0x010f,	/* Ď, ď */
	0x0110, 0x0111,	/* Đ, đ */
	0x0112, 0x0113,	/* Ē, ē */
	0x0114, 0x0115,	/* Ĕ, ĕ */
	0x0116, 0x0117,	/* Ė, ė */
	0x0118, 0x0119,	/* Ę, ę */
	0x011a, 0x011b,	/* Ě, ě */
	0x011c, 0x011d,	/* Ĝ, ĝ */
	0x011e, 0x011f,	/* Ğ, ğ */
	0x0120, 0x0121,	/* Ġ, ġ */
	0x0122, 0x0123,	/* Ģ, ģ */
	0x0124, 0x0125,	/* Ĥ, ĥ */
	0x0126, 0x0127,	/* Ħ, ħ */
	0x0128, 0x0129,	/* Ĩ, ĩ */
	0x012a, 0x012b,	/* Ī, ī */
	0x012c, 0x012d,	/* Ĭ, ĭ */
	0x012e, 0x012f,	/* Į, į */
	0x0130, 0x0069,	/* İ, i */
	0x0132, 0x0133,	/* IJ, ij */
	0x0134, 0x0135,	/* Ĵ, ĵ */
	0x0136, 0x0137,	/* Ķ, ķ */
	0x0139, 0x013a,	/* Ĺ, ĺ */
	0x013b, 0x013c,	/* Ļ, ļ */
	0x013d, 0x013e,	/* Ľ, ľ */
	0x013f, 0x0140,	/* Ŀ, ŀ */
	0x0141, 0x0142,	/* Ł, ł */
	0x0143, 0x0144,	/* Ń, ń */
	0x0145, 0x0146,	/* Ņ, ņ */
	0x0147, 0x0148,	/* Ň, ň */
	0x014a, 0x014b,	/* Ŋ, ŋ */
	0x014c, 0x014d,	/* Ō, ō */
	0x014e, 0x014f,	/* Ŏ, ŏ */
	0x0150, 0x0151,	/* Ő, ő */
	0x0152, 0x0153,	/* Œ, œ */
	0x0154, 0x0155,	/* Ŕ, ŕ */
	0x0156, 0x0157,	/* Ŗ, ŗ */
	0x0158, 0x0159,	/* Ř, ř */
	0x015a, 0x015b,	/* Ś, ś */
	0x015c, 0x015d,	/* Ŝ, ŝ */
	0x015e, 0x015f,	/* Ş, ş */
	0x0160, 0x0161,	/* Š, š */
	0x0162, 0x0163,	/* Ţ, ţ */
	0x0164, 0x0165,	/* Ť, ť */
	0x0166, 0x0167,	/* Ŧ, ŧ */
	0x0168, 0x0169,	/* Ũ, ũ */
	0x016a, 0x016b,	/* Ū, ū */
	0x016c, 0x016d,	/* Ŭ, ŭ */
	0x016e, 0x016f,	/* Ů, ů */
	0x0170, 0x0171,	/* Ű, ű */
	0x0172, 0x0173,	/* Ų, ų */
	0x0174, 0x0175,	/* Ŵ, ŵ */
	0x0176, 0x0177,	/* Ŷ, ŷ */
	0x0178, 0x00ff,	/* Ÿ, ÿ */
	0x0179, 0x017a,	/* Ź, ź */
	0x017b, 0x017c,	/* Ż, ż */
	0x017d, 0x017e,	/* Ž, ž */
	0x0181, 0x0253,	/* Ɓ, ɓ */
	0x0182, 0x0183,	/* Ƃ, ƃ */
	0x0184, 0x0185,	/* Ƅ, ƅ */
	0x0186, 0x0254,	/* Ɔ, ɔ */
	0x0187, 0x0188,	/* Ƈ, ƈ */
	0x018b, 0x018c,	/* Ƌ, ƌ */
	0x018e, 0x01dd,	/* Ǝ, ǝ */
	0x018f, 0x0259,	/* Ə, ə */
	0x0190, 0x025b,	/* Ɛ, ɛ */
	0x0191, 0x0192,	/* Ƒ, ƒ */
	0x0193, 0x0260,	/* Ɠ, ɠ */
	0x0194, 0x0263,	/* Ɣ, ɣ */
	0x0196, 0x0269,	/* Ɩ, ɩ */
	0x0197, 0x0268,	/* Ɨ, ɨ */
	0x0198, 0x0199,	/* Ƙ, ƙ */
	0x019c, 0x026f,	/* Ɯ, ɯ */
	0x019d, 0x0272,	/* Ɲ, ɲ */
	0x019f, 0x0275,	/* Ɵ, ɵ */
	0x01a0, 0x01a1,	/* Ơ, ơ */
	0x01a2, 0x01a3,	/* Ƣ, ƣ */
	0x01a4, 0x01a5,	/* Ƥ, ƥ */
	0x01a6, 0x0280,	/* Ʀ, ʀ */
	0x01a7, 0x01a8,	/* Ƨ, ƨ */
	0x01a9, 0x0283,	/* Ʃ, ʃ */
	0x01ac, 0x01ad,	/* Ƭ, ƭ */
	0x01ae, 0x0288,	/* Ʈ, ʈ */
	0x01af, 0x01b0,	/* Ư, ư */
	0x01b3, 0x01b4,	/* Ƴ, ƴ */
	0x01b5, 0x01b6,	/* Ƶ, ƶ */
	0x01b7, 0x0292,	/* Ʒ, ʒ */
	0x01b8, 0x01b9,	/* Ƹ, ƹ */
	0x01bc, 0x01bd,	/* Ƽ, ƽ */
	0x01c4, 0x01c6,	/* DŽ, dž */
	0x01c5, 0x01c6,	/* Dž, dž */
	0x01c7, 0x01c9,	/* LJ, lj */
	0x01c8, 0x01c9,	/* Lj, lj */
	0x01ca, 0x01cc,	/* NJ, nj */
	0x01cb, 0x01cc,	/* Nj, nj */
	0x01cd, 0x01ce,	/* Ǎ, ǎ */
	0x01cf, 0x01d0,	/* Ǐ, ǐ */
	0x01d1, 0x01d2,	/* Ǒ, ǒ */
	0x01d3, 0x01d4,	/* Ǔ, ǔ */
	0x01d5, 0x01d6,	/* Ǖ, ǖ */
	0x01d7, 0x01d8,	/* Ǘ, ǘ */
	0x01d9, 0x01da,	/* Ǚ, ǚ */
	0x01db, 0x01dc,	/* Ǜ, ǜ */
	0x01de, 0x01df,	/* Ǟ, ǟ */
	0x01e0, 0x01e1,	/* Ǡ, ǡ */
	0x01e2, 0x01e3,	/* Ǣ, ǣ */
	0x01e4, 0x01e5,	/* Ǥ, ǥ */
	0x01e6, 0x01e7,	/* Ǧ, ǧ */
	0x01e8, 0x01e9,	/* Ǩ, ǩ */
	0x01ea, 0x01eb,	/* Ǫ, ǫ */
	0x01ec, 0x01ed,	/* Ǭ, ǭ */
	0x01ee, 0x01ef,	/* Ǯ, ǯ */
	0x01f1, 0x01f3,	/* DZ, dz */
	0x01f2, 0x01f3,	/* Dz, dz */
	0x01f4, 0x01f5,	/* Ǵ, ǵ */
	0x01f6, 0x0195,	/* Ƕ, ƕ */
	0x01f7, 0x01bf,	/* Ƿ, ƿ */
	0x01f8, 0x01f9,	/* Ǹ, ǹ */
	0x01fa, 0x01fb,	/* Ǻ, ǻ */
	0x01fc, 0x01fd,	/* Ǽ, ǽ */
	0x01fe, 0x01ff,	/* Ǿ, ǿ */
	0x0200, 0x0201,	/* Ȁ, ȁ */
	0x0202, 0x0203,	/* Ȃ, ȃ */
	0x0204, 0x0205,	/* Ȅ, ȅ */
	0x0206, 0x0207,	/* Ȇ, ȇ */
	0x0208, 0x0209,	/* Ȉ, ȉ */
	0x020a, 0x020b,	/* Ȋ, ȋ */
	0x020c, 0x020d,	/* Ȍ, ȍ */
	0x020e, 0x020f,	/* Ȏ, ȏ */
	0x0210, 0x0211,	/* Ȑ, ȑ */
	0x0212, 0x0213,	/* Ȓ, ȓ */
	0x0214, 0x0215,	/* Ȕ, ȕ */
	0x0216, 0x0217,	/* Ȗ, ȗ */
	0x0218, 0x0219,	/* Ș, ș */
	0x021a, 0x021b,	/* Ț, ț */
	0x021c, 0x021d,	/* Ȝ, ȝ */
	0x021e, 0x021f,	/* Ȟ, ȟ */
	0x0220, 0x019e,	/* Ƞ, ƞ */
	0x0222, 0x0223,	/* Ȣ, ȣ */
	0x0224, 0x0225,	/* Ȥ, ȥ */
	0x0226, 0x0227,	/* Ȧ, ȧ */
	0x0228, 0x0229,	/* Ȩ, ȩ */
	0x022a, 0x022b,	/* Ȫ, ȫ */
	0x022c, 0x022d,	/* Ȭ, ȭ */
	0x022e, 0x022f,	/* Ȯ, ȯ */
	0x0230, 0x0231,	/* Ȱ, ȱ */
	0x0232, 0x0233,	/* Ȳ, ȳ */
	0x023a, 0x0000,	/* Ⱥ, <nil> */
	0x023b, 0x023c,	/* Ȼ, ȼ */
	0x023d, 0x019a,	/* Ƚ, ƚ */
	0x023e, 0x0000,	/* Ⱦ, <nil> */
	0x0241, 0x0294,	/* Ɂ, ʔ */
	0x0386, 0x03ac,	/* Ά, ά */
	0x038c, 0x03cc,	/* Ό, ό */
	0x03d2, 0x0000,	/* ϒ, <nil> */
	0x03d3, 0x0000,	/* ϓ, <nil> */
	0x03d4, 0x0000,	/* ϔ, <nil> */
	0x03d8, 0x03d9,	/* Ϙ, ϙ */
	0x03da, 0x03db,	/* Ϛ, ϛ */
	0x03dc, 0x03dd,	/* Ϝ, ϝ */
	0x03de, 0x03df,	/* Ϟ, ϟ */
	0x03e0, 0x03e1,	/* Ϡ, ϡ */
	0x03e2, 0x03e3,	/* Ϣ, ϣ */
	0x03e4, 0x03e5,	/* Ϥ, ϥ */
	0x03e6, 0x03e7,	/* Ϧ, ϧ */
	0x03e8, 0x03e9,	/* Ϩ, ϩ */
	0x03ea, 0x03eb,	/* Ϫ, ϫ */
	0x03ec, 0x03ed,	/* Ϭ, ϭ */
	0x03ee, 0x03ef,	/* Ϯ, ϯ */
	0x03f4, 0x03b8,	/* ϴ, θ */
	0x03f7, 0x03f8,	/* Ϸ, ϸ */
	0x03f9, 0x03f2,	/* Ϲ, ϲ */
	0x03fa, 0x03fb,	/* Ϻ, ϻ */
	0x03fd, 0x0000,	/* Ͻ, <nil> */
	0x03fe, 0x0000,	/* Ͼ, <nil> */
	0x03ff, 0x0000,	/* Ͽ, <nil> */
	0x0460, 0x0461,	/* Ѡ, ѡ */
	0x0462, 0x0463,	/* Ѣ, ѣ */
	0x0464, 0x0465,	/* Ѥ, ѥ */
	0x0466, 0x0467,	/* Ѧ, ѧ */
	0x0468, 0x0469,	/* Ѩ, ѩ */
	0x046a, 0x046b,	/* Ѫ, ѫ */
	0x046c, 0x046d,	/* Ѭ, ѭ */
	0x046e, 0x046f,	/* Ѯ, ѯ */
	0x0470, 0x0471,	/* Ѱ, ѱ */
	0x0472, 0x0473,	/* Ѳ, ѳ */
	0x0474, 0x0475,	/* Ѵ, ѵ */
	0x0476, 0x0477,	/* Ѷ, ѷ */
	0x0478, 0x0479,	/* Ѹ, ѹ */
	0x047a, 0x047b,	/* Ѻ, ѻ */
	0x047c, 0x047d,	/* Ѽ, ѽ */
	0x047e, 0x047f,	/* Ѿ, ѿ */
	0x0480, 0x0481,	/* Ҁ, ҁ */
	0x048a, 0x048b,	/* Ҋ, ҋ */
	0x048c, 0x048d,	/* Ҍ, ҍ */
	0x048e, 0x048f,	/* Ҏ, ҏ */
	0x0490, 0x0491,	/* Ґ, ґ */
	0x0492, 0x0493,	/* Ғ, ғ */
	0x0494, 0x0495,	/* Ҕ, ҕ */
	0x0496, 0x0497,	/* Җ, җ */
	0x0498, 0x0499,	/* Ҙ, ҙ */
	0x049a, 0x049b,	/* Қ, қ */
	0x049c, 0x049d,	/* Ҝ, ҝ */
	0x049e, 0x049f,	/* Ҟ, ҟ */
	0x04a0, 0x04a1,	/* Ҡ, ҡ */
	0x04a2, 0x04a3,	/* Ң, ң */
	0x04a4, 0x04a5,	/* Ҥ, ҥ */
	0x04a6, 0x04a7,	/* Ҧ, ҧ */
	0x04a8, 0x04a9,	/* Ҩ, ҩ */
	0x04aa, 0x04ab,	/* Ҫ, ҫ */
	0x04ac, 0x04ad,	/* Ҭ, ҭ */
	0x04ae, 0x04af,	/* Ү, ү */
	0x04b0, 0x04b1,	/* Ұ, ұ */
	0x04b2, 0x04b3,	/* Ҳ, ҳ */
	0x04b4, 0x04b5,	/* Ҵ, ҵ */
	0x04b6, 0x04b7,	/* Ҷ, ҷ */
	0x04b8, 0x04b9,	/* Ҹ, ҹ */
	0x04ba, 0x04bb,	/* Һ, һ */
	0x04bc, 0x04bd,	/* Ҽ, ҽ */
	0x04be, 0x04bf,	/* Ҿ, ҿ */
	0x04c0, 0x0000,	/* Ӏ, <nil> */
	0x04c1, 0x04c2,	/* Ӂ, ӂ */
	0x04c3, 0x04c4,	/* Ӄ, ӄ */
	0x04c5, 0x04c6,	/* Ӆ, ӆ */
	0x04c7, 0x04c8,	/* Ӈ, ӈ */
	0x04c9, 0x04ca,	/* Ӊ, ӊ */
	0x04cb, 0x04cc,	/* Ӌ, ӌ */
	0x04cd, 0x04ce,	/* Ӎ, ӎ */
	0x04d0, 0x04d1,	/* Ӑ, ӑ */
	0x04d2, 0x04d3,	/* Ӓ, ӓ */
	0x04d4, 0x04d5,	/* Ӕ, ӕ */
	0x04d6, 0x04d7,	/* Ӗ, ӗ */
	0x04d8, 0x04d9,	/* Ә, ә */
	0x04da, 0x04db,	/* Ӛ, ӛ */
	0x04dc, 0x04dd,	/* Ӝ, ӝ */
	0x04de, 0x04df,	/* Ӟ, ӟ */
	0x04e0, 0x04e1,	/* Ӡ, ӡ */
	0x04e2, 0x04e3,	/* Ӣ, ӣ */
	0x04e4, 0x04e5,	/* Ӥ, ӥ */
	0x04e6, 0x04e7,	/* Ӧ, ӧ */
	0x04e8, 0x04e9,	/* Ө, ө */
	0x04ea, 0x04eb,	/* Ӫ, ӫ */
	0x04ec, 0x04ed,	/* Ӭ, ӭ */
	0x04ee, 0x04ef,	/* Ӯ, ӯ */
	0x04f0, 0x04f1,	/* Ӱ, ӱ */
	0x04f2, 0x04f3,	/* Ӳ, ӳ */
	0x04f4, 0x04f5,	/* Ӵ, ӵ */
	0x04f6, 0x04f7,	/* Ӷ, ӷ */
	0x04f8, 0x04f9,	/* Ӹ, ӹ */
	0x0500, 0x0501,	/* Ԁ, ԁ */
	0x0502, 0x0503,	/* Ԃ, ԃ */
	0x0504, 0x0505,	/* Ԅ, ԅ */
	0x0506, 0x0507,	/* Ԇ, ԇ */
	0x0508, 0x0509,	/* Ԉ, ԉ */
	0x050a, 0x050b,	/* Ԋ, ԋ */
	0x050c, 0x050d,	/* Ԍ, ԍ */
	0x050e, 0x050f,	/* Ԏ, ԏ */
	0x1e00, 0x1e01,	/* Ḁ, ḁ */
	0x1e02, 0x1e03,	/* Ḃ, ḃ */
	0x1e04, 0x1e05,	/* Ḅ, ḅ */
	0x1e06, 0x1e07,	/* Ḇ, ḇ */
	0x1e08, 0x1e09,	/* Ḉ, ḉ */
	0x1e0a, 0x1e0b,	/* Ḋ, ḋ */
	0x1e0c, 0x1e0d,	/* Ḍ, ḍ */
	0x1e0e, 0x1e0f,	/* Ḏ, ḏ */
	0x1e10, 0x1e11,	/* Ḑ, ḑ */
	0x1e12, 0x1e13,	/* Ḓ, ḓ */
	0x1e14, 0x1e15,	/* Ḕ, ḕ */
	0x1e16, 0x1e17,	/* Ḗ, ḗ */
	0x1e18, 0x1e19,	/* Ḙ, ḙ */
	0x1e1a, 0x1e1b,	/* Ḛ, ḛ */
	0x1e1c, 0x1e1d,	/* Ḝ, ḝ */
	0x1e1e, 0x1e1f,	/* Ḟ, ḟ */
	0x1e20, 0x1e21,	/* Ḡ, ḡ */
	0x1e22, 0x1e23,	/* Ḣ, ḣ */
	0x1e24, 0x1e25,	/* Ḥ, ḥ */
	0x1e26, 0x1e27,	/* Ḧ, ḧ */
	0x1e28, 0x1e29,	/* Ḩ, ḩ */
	0x1e2a, 0x1e2b,	/* Ḫ, ḫ */
	0x1e2c, 0x1e2d,	/* Ḭ, ḭ */
	0x1e2e, 0x1e2f,	/* Ḯ, ḯ */
	0x1e30, 0x1e31,	/* Ḱ, ḱ */
	0x1e32, 0x1e33,	/* Ḳ, ḳ */
	0x1e34, 0x1e35,	/* Ḵ, ḵ */
	0x1e36, 0x1e37,	/* Ḷ, ḷ */
	0x1e38, 0x1e39,	/* Ḹ, ḹ */
	0x1e3a, 0x1e3b,	/* Ḻ, ḻ */
	0x1e3c, 0x1e3d,	/* Ḽ, ḽ */
	0x1e3e, 0x1e3f,	/* Ḿ, ḿ */
	0x1e40, 0x1e41,	/* Ṁ, ṁ */
	0x1e42, 0x1e43,	/* Ṃ, ṃ */
	0x1e44, 0x1e45,	/* Ṅ, ṅ */
	0x1e46, 0x1e47,	/* Ṇ, ṇ */
	0x1e48, 0x1e49,	/* Ṉ, ṉ */
	0x1e4a, 0x1e4b,	/* Ṋ, ṋ */
	0x1e4c, 0x1e4d,	/* Ṍ, ṍ */
	0x1e4e, 0x1e4f,	/* Ṏ, ṏ */
	0x1e50, 0x1e51,	/* Ṑ, ṑ */
	0x1e52, 0x1e53,	/* Ṓ, ṓ */
	0x1e54, 0x1e55,	/* Ṕ, ṕ */
	0x1e56, 0x1e57,	/* Ṗ, ṗ */
	0x1e58, 0x1e59,	/* Ṙ, ṙ */
	0x1e5a, 0x1e5b,	/* Ṛ, ṛ */
	0x1e5c, 0x1e5d,	/* Ṝ, ṝ */
	0x1e5e, 0x1e5f,	/* Ṟ, ṟ */
	0x1e60, 0x1e61,	/* Ṡ, ṡ */
	0x1e62, 0x1e63,	/* Ṣ, ṣ */
	0x1e64, 0x1e65,	/* Ṥ, ṥ */
	0x1e66, 0x1e67,	/* Ṧ, ṧ */
	0x1e68, 0x1e69,	/* Ṩ, ṩ */
	0x1e6a, 0x1e6b,	/* Ṫ, ṫ */
	0x1e6c, 0x1e6d,	/* Ṭ, ṭ */
	0x1e6e, 0x1e6f,	/* Ṯ, ṯ */
	0x1e70, 0x1e71,	/* Ṱ, ṱ */
	0x1e72, 0x1e73,	/* Ṳ, ṳ */
	0x1e74, 0x1e75,	/* Ṵ, ṵ */
	0x1e76, 0x1e77,	/* Ṷ, ṷ */
	0x1e78, 0x1e79,	/* Ṹ, ṹ */
	0x1e7a, 0x1e7b,	/* Ṻ, ṻ */
	0x1e7c, 0x1e7d,	/* Ṽ, ṽ */
	0x1e7e, 0x1e7f,	/* Ṿ, ṿ */
	0x1e80, 0x1e81,	/* Ẁ, ẁ */
	0x1e82, 0x1e83,	/* Ẃ, ẃ */
	0x1e84, 0x1e85,	/* Ẅ, ẅ */
	0x1e86, 0x1e87,	/* Ẇ, ẇ */
	0x1e88, 0x1e89,	/* Ẉ, ẉ */
	0x1e8a, 0x1e8b,	/* Ẋ, ẋ */
	0x1e8c, 0x1e8d,	/* Ẍ, ẍ */
	0x1e8e, 0x1e8f,	/* Ẏ, ẏ */
	0x1e90, 0x1e91,	/* Ẑ, ẑ */
	0x1e92, 0x1e93,	/* Ẓ, ẓ */
	0x1e94, 0x1e95,	/* Ẕ, ẕ */
	0x1ea0, 0x1ea1,	/* Ạ, ạ */
	0x1ea2, 0x1ea3,	/* Ả, ả */
	0x1ea4, 0x1ea5,	/* Ấ, ấ */
	0x1ea6, 0x1ea7,	/* Ầ, ầ */
	0x1ea8, 0x1ea9,	/* Ẩ, ẩ */
	0x1eaa, 0x1eab,	/* Ẫ, ẫ */
	0x1eac, 0x1ead,	/* Ậ, ậ */
	0x1eae, 0x1eaf,	/* Ắ, ắ */
	0x1eb0, 0x1eb1,	/* Ằ, ằ */
	0x1eb2, 0x1eb3,	/* Ẳ, ẳ */
	0x1eb4, 0x1eb5,	/* Ẵ, ẵ */
	0x1eb6, 0x1eb7,	/* Ặ, ặ */
	0x1eb8, 0x1eb9,	/* Ẹ, ẹ */
	0x1eba, 0x1ebb,	/* Ẻ, ẻ */
	0x1ebc, 0x1ebd,	/* Ẽ, ẽ */
	0x1ebe, 0x1ebf,	/* Ế, ế */
	0x1ec0, 0x1ec1,	/* Ề, ề */
	0x1ec2, 0x1ec3,	/* Ể, ể */
	0x1ec4, 0x1ec5,	/* Ễ, ễ */
	0x1ec6, 0x1ec7,	/* Ệ, ệ */
	0x1ec8, 0x1ec9,	/* Ỉ, ỉ */
	0x1eca, 0x1ecb,	/* Ị, ị */
	0x1ecc, 0x1ecd,	/* Ọ, ọ */
	0x1ece, 0x1ecf,	/* Ỏ, ỏ */
	0x1ed0, 0x1ed1,	/* Ố, ố */
	0x1ed2, 0x1ed3,	/* Ồ, ồ */
	0x1ed4, 0x1ed5,	/* Ổ, ổ */
	0x1ed6, 0x1ed7,	/* Ỗ, ỗ */
	0x1ed8, 0x1ed9,	/* Ộ, ộ */
	0x1eda, 0x1edb,	/* Ớ, ớ */
	0x1edc, 0x1edd,	/* Ờ, ờ */
	0x1ede, 0x1edf,	/* Ở, ở */
	0x1ee0, 0x1ee1,	/* Ỡ, ỡ */
	0x1ee2, 0x1ee3,	/* Ợ, ợ */
	0x1ee4, 0x1ee5,	/* Ụ, ụ */
	0x1ee6, 0x1ee7,	/* Ủ, ủ */
	0x1ee8, 0x1ee9,	/* Ứ, ứ */
	0x1eea, 0x1eeb,	/* Ừ, ừ */
	0x1eec, 0x1eed,	/* Ử, ử */
	0x1eee, 0x1eef,	/* Ữ, ữ */
	0x1ef0, 0x1ef1,	/* Ự, ự */
	0x1ef2, 0x1ef3,	/* Ỳ, ỳ */
	0x1ef4, 0x1ef5,	/* Ỵ, ỵ */
	0x1ef6, 0x1ef7,	/* Ỷ, ỷ */
	0x1ef8, 0x1ef9,	/* Ỹ, ỹ */
	0x1f59, 0x1f51,	/* Ὑ, ὑ */
	0x1f5b, 0x1f53,	/* Ὓ, ὓ */
	0x1f5d, 0x1f55,	/* Ὕ, ὕ */
	0x1f5f, 0x1f57,	/* Ὗ, ὗ */
	0x1fbc, 0x1fb3,	/* ᾼ, ᾳ */
	0x1fcc, 0x1fc3,	/* ῌ, ῃ */
	0x1fec, 0x1fe5,	/* Ῥ, ῥ */
	0x1ffc, 0x1ff3,	/* ῼ, ῳ */
	0x2102, 0x0000,	/* ℂ, <nil> */
	0x2107, 0x0000,	/* ℇ, <nil> */
	0x210b, 0x0000,	/* ℋ, <nil> */
	0x210c, 0x0000,	/* ℌ, <nil> */
	0x210d, 0x0000,	/* ℍ, <nil> */
	0x2110, 0x0000,	/* ℐ, <nil> */
	0x2111, 0x0000,	/* ℑ, <nil> */
	0x2112, 0x0000,	/* ℒ, <nil> */
	0x2115, 0x0000,	/* ℕ, <nil> */
	0x2119, 0x0000,	/* ℙ, <nil> */
	0x211a, 0x0000,	/* ℚ, <nil> */
	0x211b, 0x0000,	/* ℛ, <nil> */
	0x211c, 0x0000,	/* ℜ, <nil> */
	0x211d, 0x0000,	/* ℝ, <nil> */
	0x2124, 0x0000,	/* ℤ, <nil> */
	0x2126, 0x03c9,	/* Ω, ω */
	0x2128, 0x0000,	/* ℨ, <nil> */
	0x212a, 0x006b,	/* K, k */
	0x212b, 0x00e5,	/* Å, å */
	0x212c, 0x0000,	/* ℬ, <nil> */
	0x212d, 0x0000,	/* ℭ, <nil> */
	0x2130, 0x0000,	/* ℰ, <nil> */
	0x2131, 0x0000,	/* ℱ, <nil> */
	0x2133, 0x0000,	/* ℳ, <nil> */
	0x213e, 0x0000,	/* ℾ, <nil> */
	0x213f, 0x0000,	/* ℿ, <nil> */
	0x2145, 0x0000,	/* ⅅ, <nil> */
	0x2c80, 0x2c81,	/* Ⲁ, ⲁ */
	0x2c82, 0x2c83,	/* Ⲃ, ⲃ */
	0x2c84, 0x2c85,	/* Ⲅ, ⲅ */
	0x2c86, 0x2c87,	/* Ⲇ, ⲇ */
	0x2c88, 0x2c89,	/* Ⲉ, ⲉ */
	0x2c8a, 0x2c8b,	/* Ⲋ, ⲋ */
	0x2c8c, 0x2c8d,	/* Ⲍ, ⲍ */
	0x2c8e, 0x2c8f,	/* Ⲏ, ⲏ */
	0x2c90, 0x2c91,	/* Ⲑ, ⲑ */
	0x2c92, 0x2c93,	/* Ⲓ, ⲓ */
	0x2c94, 0x2c95,	/* Ⲕ, ⲕ */
	0x2c96, 0x2c97,	/* Ⲗ, ⲗ */
	0x2c98, 0x2c99,	/* Ⲙ, ⲙ */
	0x2c9a, 0x2c9b,	/* Ⲛ, ⲛ */
	0x2c9c, 0x2c9d,	/* Ⲝ, ⲝ */
	0x2c9e, 0x2c9f,	/* Ⲟ, ⲟ */
	0x2ca0, 0x2ca1,	/* Ⲡ, ⲡ */
	0x2ca2, 0x2ca3,	/* Ⲣ, ⲣ */
	0x2ca4, 0x2ca5,	/* Ⲥ, ⲥ */
	0x2ca6, 0x2ca7,	/* Ⲧ, ⲧ */
	0x2ca8, 0x2ca9,	/* Ⲩ, ⲩ */
	0x2caa, 0x2cab,	/* Ⲫ, ⲫ */
	0x2cac, 0x2cad,	/* Ⲭ, ⲭ */
	0x2cae, 0x2caf,	/* Ⲯ, ⲯ */
	0x2cb0, 0x2cb1,	/* Ⲱ, ⲱ */
	0x2cb2, 0x2cb3,	/* Ⲳ, ⲳ */
	0x2cb4, 0x2cb5,	/* Ⲵ, ⲵ */
	0x2cb6, 0x2cb7,	/* Ⲷ, ⲷ */
	0x2cb8, 0x2cb9,	/* Ⲹ, ⲹ */
	0x2cba, 0x2cbb,	/* Ⲻ, ⲻ */
	0x2cbc, 0x2cbd,	/* Ⲽ, ⲽ */
	0x2cbe, 0x2cbf,	/* Ⲿ, ⲿ */
	0x2cc0, 0x2cc1,	/* Ⳁ, ⳁ */
	0x2cc2, 0x2cc3,	/* Ⳃ, ⳃ */
	0x2cc4, 0x2cc5,	/* Ⳅ, ⳅ */
	0x2cc6, 0x2cc7,	/* Ⳇ, ⳇ */
	0x2cc8, 0x2cc9,	/* Ⳉ, ⳉ */
	0x2cca, 0x2ccb,	/* Ⳋ, ⳋ */
	0x2ccc, 0x2ccd,	/* Ⳍ, ⳍ */
	0x2cce, 0x2ccf,	/* Ⳏ, ⳏ */
	0x2cd0, 0x2cd1,	/* Ⳑ, ⳑ */
	0x2cd2, 0x2cd3,	/* Ⳓ, ⳓ */
	0x2cd4, 0x2cd5,	/* Ⳕ, ⳕ */
	0x2cd6, 0x2cd7,	/* Ⳗ, ⳗ */
	0x2cd8, 0x2cd9,	/* Ⳙ, ⳙ */
	0x2cda, 0x2cdb,	/* Ⳛ, ⳛ */
	0x2cdc, 0x2cdd,	/* Ⳝ, ⳝ */
	0x2cde, 0x2cdf,	/* Ⳟ, ⳟ */
	0x2ce0, 0x2ce1,	/* Ⳡ, ⳡ */
	0x2ce2, 0x2ce3,	/* Ⳣ, ⳣ */

};

static
Rune	__totitle1[] = 
{
	0x01C6, 0x01C5,	/* dž, Dž */
	0x01C5, 0x01C5,	/* Dž, Dž */
	0x01C9, 0x01C8,	/* lj, Lj */
	0x01C8, 0x01C8,	/* Lj, Lj */
	0x01CC, 0x01CB,	/* nj, Nj */
	0x01CB, 0x01CB,	/* Nj, Nj */
	0x01F3, 0x01F2,	/* dz, Dz */
	0x01F2, 0x01F2,	/* Dz, Dz */
	0x1F80, 0x1F88,	/* ᾀ, ᾈ */
	0x1F81, 0x1F89,	/* ᾁ, ᾉ */
	0x1F82, 0x1F8A,	/* ᾂ, ᾊ */
	0x1F83, 0x1F8B,	/* ᾃ, ᾋ */
	0x1F84, 0x1F8C,	/* ᾄ, ᾌ */
	0x1F85, 0x1F8D,	/* ᾅ, ᾍ */
	0x1F86, 0x1F8E,	/* ᾆ, ᾎ */
	0x1F87, 0x1F8F,	/* ᾇ, ᾏ */
	0x1F90, 0x1F98,	/* ᾐ, ᾘ */
	0x1F91, 0x1F99,	/* ᾑ, ᾙ */
	0x1F92, 0x1F9A,	/* ᾒ, ᾚ */
	0x1F93, 0x1F9B,	/* ᾓ, ᾛ */
	0x1F94, 0x1F9C,	/* ᾔ, ᾜ */
	0x1F95, 0x1F9D,	/* ᾕ, ᾝ */
	0x1F96, 0x1F9E,	/* ᾖ, ᾞ */
	0x1F97, 0x1F9F,	/* ᾗ, ᾟ */
	0x1FA0, 0x1FA8,	/* ᾠ, ᾨ */
	0x1FA1, 0x1FA9,	/* ᾡ, ᾩ */
	0x1FA2, 0x1FAA,	/* ᾢ, ᾪ */
	0x1FA3, 0x1FAB,	/* ᾣ, ᾫ */
	0x1FA4, 0x1FAC,	/* ᾤ, ᾬ */
	0x1FA5, 0x1FAD,	/* ᾥ, ᾭ */
	0x1FA6, 0x1FAE,	/* ᾦ, ᾮ */
	0x1FA7, 0x1FAF,	/* ᾧ, ᾯ */
	0x1FB3, 0x1FBC,	/* ᾳ, ᾼ */
	0x1FC3, 0x1FCC,	/* ῃ, ῌ */
	0x1FF3, 0x1FFC,	/* ῳ, ῼ */
};

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 15:26         ` arisawa
  2006-07-28 15:49           ` erik quanstrom
@ 2006-07-28 15:51           ` erik quanstrom
  1 sibling, 0 replies; 15+ messages in thread
From: erik quanstrom @ 2006-07-28 15:51 UTC (permalink / raw)
  To: 9fans

[-- Attachment #1: Type: text/plain, Size: 875 bytes --]

here are the basics of what you need to implement needshumanquote.
you will also need to add these prototypes to libc.h:

int isspacerune(Rune);
int isdigitrune(Rune);		// recognizes (super|sub)script/indic/tamil/thai/... digits
int digitrunevalue(Rune);		// converts a rune to it's numeric value.  -1 if not a digit.

my utf tables are a little bit different than the distribution.  i believe that
most of the differences are due to the fact that i generated my tables from unicode-4.1.

i'll be happy to submit a patch, if there's any interest.

- erik

> the purpose of the function is to determine if the string needs
> quoting for
> rc's benefit.

>I agree current quote is designed for rc benefit.
>But I want something that helps for human reading.
>
>needshumanquote(int r) or the improved version will be nice
>if it is available in ls command.

[-- Attachment #2: runetype.c --]
[-- Type: text/plain, Size: 2388 bytes --]

#include <u.h>
#include <libc.h>
#include "utf-tables.h"

static Rune*
bsearch(Rune c, Rune *t, int n, int ne)
{
	Rune *p;
	int m;

	while(n > 1) {
		m = n/2;
		p = t + m*ne;
		if(c >= p[0]) {
			t = p;
			n = n-m;
		} else
			n = m;
	}
	if(n && c >= t[0])
		return t;
	return 0;
}

Rune
tolowerrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return p[2] + (c - p[0]);
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
	if(p && c == p[0] && p[2])
		return p[2] + (c - p[0]);
	return c;
}

Rune
toupperrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return p[2] + (c - p[0]);
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
	if(p && c == p[0] && p[2])
		return p[2] + (c - p[0]);
	return c;
}

Rune
totitlerune(Rune c)
{
	Rune *p;

	p = bsearch(c, __totitle1, nelem(__totitle1)/2, 2);
	if(p && c == p[0])
		return p[2] + (c - p[0]);
	return c;
}

int
islowerrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __toupper2, nelem(__toupper2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __toupper1, nelem(__toupper1)/2, 2);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
isupperrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __tolower2, nelem(__tolower2)/3, 3);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __tolower1, nelem(__tolower1)/2, 2);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
isalpharune(Rune c)
{
	Rune *p;

	if(isupperrune(c) || islowerrune(c))
		return 1;
	p = bsearch(c, __alpha2, nelem(__alpha2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	p = bsearch(c, __alpha1, nelem(__alpha1), 1);
	if(p && c == p[0])
		return 1;
	return 0;
}

int
istitlerune(Rune c)
{
	return isupperrune(c) && islowerrune(c);
}

int
isspacerune(Rune c)
{
	Rune *p;

	p = bsearch(c, __space2, nelem(__space2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	return 0;
}

int
isdigitrune(Rune c)
{
	Rune *p;

	p = bsearch(c, __digit2, nelem(__digit2)/2, 2);
	if(p && c >= p[0] && c <= p[1])
		return 1;
	return 0;
}

int
digitrunevalue(Rune c){
	Rune* p;

	p = bsearch(c, __digit2, nelem(__digit2)/2, 2);
	if (!p || c < p[0] || c>p[1]){
		return -1;
	}

	return c-p[0];
}

[-- Attachment #3: utf-tables.h --]
[-- Type: text/plain, Size: 51358 bytes --]

static
Rune	__space2[] =
{
	0x0009,	0x000a,	/* tab and newline */
	0x0020,	0x0020,	/* space */
	0x00a0,	0x00a0,	/* non-breaking space */
	0x1680, 0x1680,	/* ogham space mark */
	0x180e, 0x180e,	/* mongolian vowel separator */
	0x2000, 0x200b,	/* en quad - zero width space */
	0x2028, 0x2029,	/* line separator - paragraph separator */
	0x202f, 0x202f,	/* narrow no-break space */
	0x205f, 0x205f,	/* medium mathematical space */
	0x3000, 0x3000,	/* ideographic space */
	0xfeff, 0xfeff,	/* zero width no-break space */
};

static
Rune	__digit2[] =
{
	0x0030, 0x0039,	/* 0123456789 */
	0x0660, 0x0669,	/* ٠١٢٣٤٥٦٧٨٩ */
	0x06f0, 0x06f9,	/* ۰۱۲۳۴۵۶۷۸۹ */
	0x0966, 0x096f,	/* ०१२३४५६७८९ */
	0x09e6, 0x09ef,	/* ০১২৩৪৫৬৭৮৯ */
	0x0a66, 0x0a6f,	/* ੦੧੨੩੪੫੬੭੮੯ */
	0x0ae6, 0x0aef,	/* ૦૧૨૩૪૫૬૭૮૯ */
	0x0b66, 0x0b6f,	/* ୦୧୨୩୪୫୬୭୮୯ */
	0x0be6, 0x0bef,	/* ௦௧௨௩௪௫௬௭௮௯ */
	0x0c66, 0x0c6f,	/* ౦౧౨౩౪౫౬౭౮౯ */
	0x0ce6, 0x0cef,	/* ೦೧೨೩೪೫೬೭೮೯ */
	0x0d66, 0x0d6f,	/* ൦൧൨൩൪൫൬൭൮൯ */
	0x0e50, 0x0e59,	/* ๐๑๒๓๔๕๖๗๘๙ */
	0x0ed0, 0x0ed9,	/* ໐໑໒໓໔໕໖໗໘໙ */
	0x0f20, 0x0f29,	/* ༠༡༢༣༤༥༦༧༨༩ */
	0x1040, 0x1049,	/* ၀၁၂၃၄၅၆၇၈၉ */
	0x17e0, 0x17e9,	/* ០១២៣៤៥៦៧៨៩ */
	0x1810, 0x1819,	/* ᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙ */
	0x1946, 0x194f,	/* ᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ */
	0x19d0, 0x19d9,	/* ᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙ */
	0xff10, 0xff19,	/* 0123456789 */
};

static
Rune	__alpha2[] =
{
	0x01c0, 0x01c3,	/* ǀ-ǃ */
	0x05d0, 0x05ea,	/* א-ת */
	0x05f0, 0x05f2,	/* װ-ײ */
	0x0621, 0x063a,	/* ء-غ */
	0x0641, 0x064a,	/* ف-ي */
	0x066e, 0x066f,	/* ٮ-ٯ */
	0x0671, 0x06d3,	/* ٱ-ۓ */
	0x06ee, 0x06ef,	/* ۮ-ۯ */
	0x06fa, 0x06fc,	/* ۺ-ۼ */
	0x0712, 0x072f,	/* ܒ-ܯ */
	0x074d, 0x076d,	/* ݍ-ݭ */
	0x0780, 0x07a5,	/* ހ-ޥ */
	0x0904, 0x0939,	/* ऄ-ह */
	0x0958, 0x0961,	/* क़-ॡ */
	0x0985, 0x098c,	/* অ-ঌ */
	0x098f, 0x0990,	/* এ-ঐ */
	0x0993, 0x09a8,	/* ও-ন */
	0x09aa, 0x09b0,	/* প-র */
	0x09b6, 0x09b9,	/* শ-হ */
	0x09dc, 0x09dd,	/* ড়-ঢ় */
	0x09df, 0x09e1,	/* য়-ৡ */
	0x09f0, 0x09f1,	/* ৰ-ৱ */
	0x0a05, 0x0a0a,	/* ਅ-ਊ */
	0x0a0f, 0x0a10,	/* ਏ-ਐ */
	0x0a13, 0x0a28,	/* ਓ-ਨ */
	0x0a2a, 0x0a30,	/* ਪ-ਰ */
	0x0a32, 0x0a33,	/* ਲ-ਲ਼ */
	0x0a35, 0x0a36,	/* ਵ-ਸ਼ */
	0x0a38, 0x0a39,	/* ਸ-ਹ */
	0x0a59, 0x0a5c,	/* ਖ਼-ੜ */
	0x0a72, 0x0a74,	/* ੲ-ੴ */
	0x0a85, 0x0a8d,	/* અ-ઍ */
	0x0a8f, 0x0a91,	/* એ-ઑ */
	0x0a93, 0x0aa8,	/* ઓ-ન */
	0x0aaa, 0x0ab0,	/* પ-ર */
	0x0ab2, 0x0ab3,	/* લ-ળ */
	0x0ab5, 0x0ab9,	/* વ-હ */
	0x0ae0, 0x0ae1,	/* ૠ-ૡ */
	0x0b05, 0x0b0c,	/* ଅ-ଌ */
	0x0b0f, 0x0b10,	/* ଏ-ଐ */
	0x0b13, 0x0b28,	/* ଓ-ନ */
	0x0b2a, 0x0b30,	/* ପ-ର */
	0x0b32, 0x0b33,	/* ଲ-ଳ */
	0x0b35, 0x0b39,	/* ଵ-ହ */
	0x0b5c, 0x0b5d,	/* ଡ଼-ଢ଼ */
	0x0b5f, 0x0b61,	/* ୟ-ୡ */
	0x0b85, 0x0b8a,	/* அ-ஊ */
	0x0b8e, 0x0b90,	/* எ-ஐ */
	0x0b92, 0x0b95,	/* ஒ-க */
	0x0b99, 0x0b9a,	/* ங-ச */
	0x0b9e, 0x0b9f,	/* ஞ-ட */
	0x0ba3, 0x0ba4,	/* ண-த */
	0x0ba8, 0x0baa,	/* ந-ப */
	0x0bae, 0x0bb9,	/* ம-ஹ */
	0x0c05, 0x0c0c,	/* అ-ఌ */
	0x0c0e, 0x0c10,	/* ఎ-ఐ */
	0x0c12, 0x0c28,	/* ఒ-న */
	0x0c2a, 0x0c33,	/* ప-ళ */
	0x0c35, 0x0c39,	/* వ-హ */
	0x0c60, 0x0c61,	/* ౠ-ౡ */
	0x0c85, 0x0c8c,	/* ಅ-ಌ */
	0x0c8e, 0x0c90,	/* ಎ-ಐ */
	0x0c92, 0x0ca8,	/* ಒ-ನ */
	0x0caa, 0x0cb3,	/* ಪ-ಳ */
	0x0cb5, 0x0cb9,	/* ವ-ಹ */
	0x0ce0, 0x0ce1,	/* ೠ-ೡ */
	0x0d05, 0x0d0c,	/* അ-ഌ */
	0x0d0e, 0x0d10,	/* എ-ഐ */
	0x0d12, 0x0d28,	/* ഒ-ന */
	0x0d2a, 0x0d39,	/* പ-ഹ */
	0x0d60, 0x0d61,	/* ൠ-ൡ */
	0x0d85, 0x0d96,	/* අ-ඖ */
	0x0d9a, 0x0db1,	/* ක-න */
	0x0db3, 0x0dbb,	/* ඳ-ර */
	0x0dc0, 0x0dc6,	/* ව-ෆ */
	0x0e01, 0x0e30,	/* ก-ะ */
	0x0e32, 0x0e33,	/* า-ำ */
	0x0e40, 0x0e45,	/* เ-ๅ */
	0x0e81, 0x0e82,	/* ກ-ຂ */
	0x0e87, 0x0e88,	/* ງ-ຈ */
	0x0e94, 0x0e97,	/* ດ-ທ */
	0x0e99, 0x0e9f,	/* ນ-ຟ */
	0x0ea1, 0x0ea3,	/* ມ-ຣ */
	0x0eaa, 0x0eab,	/* ສ-ຫ */
	0x0ead, 0x0eb0,	/* ອ-ະ */
	0x0eb2, 0x0eb3,	/* າ-ຳ */
	0x0ec0, 0x0ec4,	/* ເ-ໄ */
	0x0edc, 0x0edd,	/* ໜ-ໝ */
	0x0f40, 0x0f47,	/* ཀ-ཇ */
	0x0f49, 0x0f6a,	/* ཉ-ཪ */
	0x0f88, 0x0f8b,	/* ྈ-ྋ */
	0x1000, 0x1021,	/* က-အ */
	0x1023, 0x1027,	/* ဣ-ဧ */
	0x1029, 0x102a,	/* ဩ-ဪ */
	0x1050, 0x1055,	/* ၐ-ၕ */
	0x10d0, 0x10fa,	/* ა-ჺ */
	0x1100, 0x1159,	/* ᄀ-ᅙ */
	0x115f, 0x11a2,	/* ᅟ-ᆢ */
	0x11a8, 0x11f9,	/* ᆨ-ᇹ */
	0x1200, 0x1248,	/* ሀ-ቈ */
	0x124a, 0x124d,	/* ቊ-ቍ */
	0x1250, 0x1256,	/* ቐ-ቖ */
	0x125a, 0x125d,	/* ቚ-ቝ */
	0x1260, 0x1288,	/* በ-ኈ */
	0x128a, 0x128d,	/* ኊ-ኍ */
	0x1290, 0x12b0,	/* ነ-ኰ */
	0x12b2, 0x12b5,	/* ኲ-ኵ */
	0x12b8, 0x12be,	/* ኸ-ኾ */
	0x12c2, 0x12c5,	/* ዂ-ዅ */
	0x12c8, 0x12d6,	/* ወ-ዖ */
	0x12d8, 0x1310,	/* ዘ-ጐ */
	0x1312, 0x1315,	/* ጒ-ጕ */
	0x1318, 0x135a,	/* ጘ-ፚ */
	0x1380, 0x138f,	/* ᎀ-ᎏ */
	0x13a0, 0x13f4,	/* Ꭰ-Ᏼ */
	0x1401, 0x166c,	/* ᐁ-ᙬ */
	0x166f, 0x1676,	/* ᙯ-ᙶ */
	0x1681, 0x169a,	/* ᚁ-ᚚ */
	0x16a0, 0x16ea,	/* ᚠ-ᛪ */
	0x1700, 0x170c,	/* ᜀ-ᜌ */
	0x170e, 0x1711,	/* ᜎ-ᜑ */
	0x1720, 0x1731,	/* ᜠ-ᜱ */
	0x1740, 0x1751,	/* ᝀ-ᝑ */
	0x1760, 0x176c,	/* ᝠ-ᝬ */
	0x176e, 0x1770,	/* ᝮ-ᝰ */
	0x1780, 0x17b3,	/* ក-ឳ */
	0x1820, 0x1842,	/* ᠠ-ᡂ */
	0x1844, 0x1877,	/* ᡄ-ᡷ */
	0x1880, 0x18a8,	/* ᢀ-ᢨ */
	0x1900, 0x191c,	/* ᤀ-ᤜ */
	0x1950, 0x196d,	/* ᥐ-ᥭ */
	0x1970, 0x1974,	/* ᥰ-ᥴ */
	0x1980, 0x19a9,	/* ᦀ-ᦩ */
	0x19c1, 0x19c7,	/* ᧁ-ᧇ */
	0x1a00, 0x1a16,	/* ᨀ-ᨖ */
	0x2135, 0x2138,	/* ℵ-ℸ */
	0x2d30, 0x2d65,	/* ⴰ-ⵥ */
	0x2d80, 0x2d96,	/* ⶀ-ⶖ */
	0x2da0, 0x2da6,	/* ⶠ-ⶦ */
	0x2da8, 0x2dae,	/* ⶨ-ⶮ */
	0x2db0, 0x2db6,	/* ⶰ-ⶶ */
	0x2db8, 0x2dbe,	/* ⶸ-ⶾ */
	0x2dc0, 0x2dc6,	/* ⷀ-ⷆ */
	0x2dc8, 0x2dce,	/* ⷈ-ⷎ */
	0x2dd0, 0x2dd6,	/* ⷐ-ⷖ */
	0x2dd8, 0x2dde,	/* ⷘ-ⷞ */
	0x3041, 0x3096,	/* ぁ-ゖ */
	0x30a1, 0x30fa,	/* ァ-ヺ */
	0x3105, 0x312c,	/* ㄅ-ㄬ */
	0x3131, 0x318e,	/* ㄱ-ㆎ */
	0x31a0, 0x31b7,	/* ㆠ-ㆷ */
	0x31f0, 0x31ff,	/* ㇰ-ㇿ */
	0x4e00, 0x9fbb,	/* 一-龻 */
	0xa000, 0xa014,	/* ꀀ-ꀔ */
	0xa016, 0xa48c,	/* ꀖ-ꒌ */
	0xa800, 0xa801,	/* ꠀ-ꠁ */
	0xa803, 0xa805,	/* ꠃ-ꠅ */
	0xa807, 0xa80a,	/* ꠇ-ꠊ */
	0xa80c, 0xa822,	/* ꠌ-ꠢ */
	0xf900, 0xfa2d,	/* 豈-鶴 */
	0xfa30, 0xfa6a,	/* 侮-頻 */
	0xfa70, 0xfad9,	/* 並-龎 */
	0xfb1f, 0xfb28,	/* ײַ-ﬨ */
	0xfb2a, 0xfb36,	/* שׁ-זּ */
	0xfb38, 0xfb3c,	/* טּ-לּ */
	0xfb40, 0xfb41,	/* נּ-סּ */
	0xfb43, 0xfb44,	/* ףּ-פּ */
	0xfb46, 0xfbb1,	/* צּ-ﮱ */
	0xfbd3, 0xfd3d,	/* ﯓ-ﴽ */
	0xfd50, 0xfd8f,	/* ﵐ-ﶏ */
	0xfd92, 0xfdc7,	/* ﶒ-ﷇ */
	0xfdf0, 0xfdfb,	/* ﷰ-ﷻ */
	0xfe70, 0xfe74,	/* ﹰ-ﹴ */
	0xfe76, 0xfefc,	/* ﹶ-ﻼ */
	0xff66, 0xff6f,	/* ヲ-ッ */
	0xff71, 0xff9d,	/* ア-ン */
	0xffa0, 0xffbe,	/* ᅠ-ᄒ */
	0xffc2, 0xffc7,	/* ᅡ-ᅦ */
	0xffca, 0xffcf,	/* ᅧ-ᅬ */
	0xffd2, 0xffd7,	/* ᅭ-ᅲ */
	0xffda, 0xffdc,	/* ᅳ-ᅵ */
};

static
Rune	__alpha1[] =
{
	0x01bb,	/* ƻ */
	0x06d5,	/* ە */
	0x06ff,	/* ۿ */
	0x0710,	/* ܐ */
	0x07b1,	/* ޱ */
	0x093d,	/* ऽ */
	0x0950,	/* ॐ */
	0x097d,	/* ॽ */
	0x09b2,	/* ল */
	0x09bd,	/* ঽ */
	0x09ce,	/* ৎ */
	0x0a5e,	/* ਫ਼ */
	0x0abd,	/* ઽ */
	0x0ad0,	/* ૐ */
	0x0b3d,	/* ଽ */
	0x0b71,	/* ୱ */
	0x0b83,	/* ஃ */
	0x0b9c,	/* ஜ */
	0x0cbd,	/* ಽ */
	0x0cde,	/* ೞ */
	0x0dbd,	/* ල */
	0x0e84,	/* ຄ */
	0x0e8a,	/* ຊ */
	0x0e8d,	/* ຍ */
	0x0ea5,	/* ລ */
	0x0ea7,	/* ວ */
	0x0ebd,	/* ຽ */
	0x0f00,	/* ༀ */
	0x1258,	/* ቘ */
	0x12c0,	/* ዀ */
	0x17dc,	/* ៜ */
	0x3006,	/* 〆 */
	0x303c,	/* 〼 */
	0x309f,	/* ゟ */
	0x30ff,	/* ヿ */
	0x3400,	/* 㐀 */
	0x4db5,	/* 䶵 */
	0x4e00,	/* 一 */
	0x9fbb,	/* 龻 */
	0xac00,	/* 가 */
	0xd7a3,	/* 힣 */
	0xfb1d,	/* יִ */
	0xfb3e,	/* מּ */

};

static
Rune	__toupper2[] =
{
	0x0061, 0x007a, 0x0041,	/* a-z, A-Z */
	0x00e0, 0x00f6, 0x00c0,	/* à-ö, À-Ö */
	0x00f8, 0x00fe, 0x00d8,	/* ø-þ, Ø-Þ */
	0x0256, 0x0257, 0x0189,	/* ɖ-ɗ, Ɖ-Ɗ */
	0x028a, 0x028b, 0x01b1,	/* ʊ-ʋ, Ʊ-Ʋ */
	0x03ad, 0x03af, 0x0388,	/* έ-ί, Έ-Ί */
	0x03b1, 0x03c1, 0x0391,	/* α-ρ, Α-Ρ */
	0x03c3, 0x03cb, 0x03a3,	/* σ-ϋ, Σ-Ϋ */
	0x03cd, 0x03ce, 0x038e,	/* ύ-ώ, Ύ-Ώ */
	0x0430, 0x044f, 0x0410,	/* а-я, А-Я */
	0x0450, 0x045f, 0x0400,	/* ѐ-џ, Ѐ-Џ */
	0x0561, 0x0586, 0x0531,	/* ա-ֆ, Ա-Ֆ */
	0x1f00, 0x1f07, 0x1f08,	/* ἀ-ἇ, Ἀ-Ἇ */
	0x1f10, 0x1f15, 0x1f18,	/* ἐ-ἕ, Ἐ-Ἕ */
	0x1f20, 0x1f27, 0x1f28,	/* ἠ-ἧ, Ἠ-Ἧ */
	0x1f30, 0x1f37, 0x1f38,	/* ἰ-ἷ, Ἰ-Ἷ */
	0x1f40, 0x1f45, 0x1f48,	/* ὀ-ὅ, Ὀ-Ὅ */
	0x1f60, 0x1f67, 0x1f68,	/* ὠ-ὧ, Ὠ-Ὧ */
	0x1f70, 0x1f71, 0x1fba,	/* ὰ-ά, Ὰ-Ά */
	0x1f72, 0x1f75, 0x1fc8,	/* ὲ-ή, Ὲ-Ή */
	0x1f76, 0x1f77, 0x1fda,	/* ὶ-ί, Ὶ-Ί */
	0x1f78, 0x1f79, 0x1ff8,	/* ὸ-ό, Ὸ-Ό */
	0x1f7a, 0x1f7b, 0x1fea,	/* ὺ-ύ, Ὺ-Ύ */
	0x1f7c, 0x1f7d, 0x1ffa,	/* ὼ-ώ, Ὼ-Ώ */
	0x1f80, 0x1f87, 0x1f88,	/* ᾀ-ᾇ, ᾈ-ᾏ */
	0x1f90, 0x1f97, 0x1f98,	/* ᾐ-ᾗ, ᾘ-ᾟ */
	0x1fa0, 0x1fa7, 0x1fa8,	/* ᾠ-ᾧ, ᾨ-ᾯ */
	0x1fb0, 0x1fb1, 0x1fb8,	/* ᾰ-ᾱ, Ᾰ-Ᾱ */
	0x1fd0, 0x1fd1, 0x1fd8,	/* ῐ-ῑ, Ῐ-Ῑ */
	0x1fe0, 0x1fe1, 0x1fe8,	/* ῠ-ῡ, Ῠ-Ῡ */
	0x2170, 0x217f, 0x2160,	/* ⅰ-ⅿ, Ⅰ-Ⅿ */
	0x24d0, 0x24e9, 0x24b6,	/* ⓐ-ⓩ, Ⓐ-Ⓩ */
	0x2c30, 0x2c5e, 0x2c00,	/* ⰰ-ⱞ, Ⰰ-Ⱞ */
	0x2d00, 0x2d25, 0x10a0,	/* ⴀ-ⴥ, Ⴀ-Ⴥ */
	0xff41, 0xff5a, 0xff21,	/* a-z, A-Z */
};

static
Rune	__toupper1[] =
{
	0x00aa, 0x0000,	/* ª, <nil> */
	0x00b5, 0x039c,	/* µ, Μ */
	0x00ba, 0x0000,	/* º, <nil> */
	0x00df, 0x0000,	/* ß, <nil> */
	0x00ff, 0x0178,	/* ÿ, Ÿ */
	0x0101, 0x0100,	/* ā, Ā */
	0x0103, 0x0102,	/* ă, Ă */
	0x0105, 0x0104,	/* ą, Ą */
	0x0107, 0x0106,	/* ć, Ć */
	0x0109, 0x0108,	/* ĉ, Ĉ */
	0x010b, 0x010a,	/* ċ, Ċ */
	0x010d, 0x010c,	/* č, Č */
	0x010f, 0x010e,	/* ď, Ď */
	0x0111, 0x0110,	/* đ, Đ */
	0x0113, 0x0112,	/* ē, Ē */
	0x0115, 0x0114,	/* ĕ, Ĕ */
	0x0117, 0x0116,	/* ė, Ė */
	0x0119, 0x0118,	/* ę, Ę */
	0x011b, 0x011a,	/* ě, Ě */
	0x011d, 0x011c,	/* ĝ, Ĝ */
	0x011f, 0x011e,	/* ğ, Ğ */
	0x0121, 0x0120,	/* ġ, Ġ */
	0x0123, 0x0122,	/* ģ, Ģ */
	0x0125, 0x0124,	/* ĥ, Ĥ */
	0x0127, 0x0126,	/* ħ, Ħ */
	0x0129, 0x0128,	/* ĩ, Ĩ */
	0x012b, 0x012a,	/* ī, Ī */
	0x012d, 0x012c,	/* ĭ, Ĭ */
	0x012f, 0x012e,	/* į, Į */
	0x0131, 0x0049,	/* ı, I */
	0x0133, 0x0132,	/* ij, IJ */
	0x0135, 0x0134,	/* ĵ, Ĵ */
	0x0137, 0x0136,	/* ķ, Ķ */
	0x0138, 0x0000,	/* ĸ, <nil> */
	0x013a, 0x0139,	/* ĺ, Ĺ */
	0x013c, 0x013b,	/* ļ, Ļ */
	0x013e, 0x013d,	/* ľ, Ľ */
	0x0140, 0x013f,	/* ŀ, Ŀ */
	0x0142, 0x0141,	/* ł, Ł */
	0x0144, 0x0143,	/* ń, Ń */
	0x0146, 0x0145,	/* ņ, Ņ */
	0x0148, 0x0147,	/* ň, Ň */
	0x0149, 0x0000,	/* ʼn, <nil> */
	0x014b, 0x014a,	/* ŋ, Ŋ */
	0x014d, 0x014c,	/* ō, Ō */
	0x014f, 0x014e,	/* ŏ, Ŏ */
	0x0151, 0x0150,	/* ő, Ő */
	0x0153, 0x0152,	/* œ, Œ */
	0x0155, 0x0154,	/* ŕ, Ŕ */
	0x0157, 0x0156,	/* ŗ, Ŗ */
	0x0159, 0x0158,	/* ř, Ř */
	0x015b, 0x015a,	/* ś, Ś */
	0x015d, 0x015c,	/* ŝ, Ŝ */
	0x015f, 0x015e,	/* ş, Ş */
	0x0161, 0x0160,	/* š, Š */
	0x0163, 0x0162,	/* ţ, Ţ */
	0x0165, 0x0164,	/* ť, Ť */
	0x0167, 0x0166,	/* ŧ, Ŧ */
	0x0169, 0x0168,	/* ũ, Ũ */
	0x016b, 0x016a,	/* ū, Ū */
	0x016d, 0x016c,	/* ŭ, Ŭ */
	0x016f, 0x016e,	/* ů, Ů */
	0x0171, 0x0170,	/* ű, Ű */
	0x0173, 0x0172,	/* ų, Ų */
	0x0175, 0x0174,	/* ŵ, Ŵ */
	0x0177, 0x0176,	/* ŷ, Ŷ */
	0x017a, 0x0179,	/* ź, Ź */
	0x017c, 0x017b,	/* ż, Ż */
	0x017e, 0x017d,	/* ž, Ž */
	0x017f, 0x0053,	/* ſ, S */
	0x0180, 0x0000,	/* ƀ, <nil> */
	0x0183, 0x0182,	/* ƃ, Ƃ */
	0x0185, 0x0184,	/* ƅ, Ƅ */
	0x0188, 0x0187,	/* ƈ, Ƈ */
	0x018c, 0x018b,	/* ƌ, Ƌ */
	0x018d, 0x0000,	/* ƍ, <nil> */
	0x0192, 0x0191,	/* ƒ, Ƒ */
	0x0195, 0x01f6,	/* ƕ, Ƕ */
	0x0199, 0x0198,	/* ƙ, Ƙ */
	0x019a, 0x023d,	/* ƚ, Ƚ */
	0x019b, 0x0000,	/* ƛ, <nil> */
	0x019e, 0x0220,	/* ƞ, Ƞ */
	0x01a1, 0x01a0,	/* ơ, Ơ */
	0x01a3, 0x01a2,	/* ƣ, Ƣ */
	0x01a5, 0x01a4,	/* ƥ, Ƥ */
	0x01a8, 0x01a7,	/* ƨ, Ƨ */
	0x01aa, 0x0000,	/* ƪ, <nil> */
	0x01ab, 0x0000,	/* ƫ, <nil> */
	0x01ad, 0x01ac,	/* ƭ, Ƭ */
	0x01b0, 0x01af,	/* ư, Ư */
	0x01b4, 0x01b3,	/* ƴ, Ƴ */
	0x01b6, 0x01b5,	/* ƶ, Ƶ */
	0x01b9, 0x01b8,	/* ƹ, Ƹ */
	0x01ba, 0x0000,	/* ƺ, <nil> */
	0x01bd, 0x01bc,	/* ƽ, Ƽ */
	0x01be, 0x0000,	/* ƾ, <nil> */
	0x01bf, 0x01f7,	/* ƿ, Ƿ */
	0x01c5, 0x01c4,	/* Dž, DŽ */
	0x01c6, 0x01c4,	/* dž, DŽ */
	0x01c8, 0x01c7,	/* Lj, LJ */
	0x01c9, 0x01c7,	/* lj, LJ */
	0x01cb, 0x01ca,	/* Nj, NJ */
	0x01cc, 0x01ca,	/* nj, NJ */
	0x01ce, 0x01cd,	/* ǎ, Ǎ */
	0x01d0, 0x01cf,	/* ǐ, Ǐ */
	0x01d2, 0x01d1,	/* ǒ, Ǒ */
	0x01d4, 0x01d3,	/* ǔ, Ǔ */
	0x01d6, 0x01d5,	/* ǖ, Ǖ */
	0x01d8, 0x01d7,	/* ǘ, Ǘ */
	0x01da, 0x01d9,	/* ǚ, Ǚ */
	0x01dc, 0x01db,	/* ǜ, Ǜ */
	0x01dd, 0x018e,	/* ǝ, Ǝ */
	0x01df, 0x01de,	/* ǟ, Ǟ */
	0x01e1, 0x01e0,	/* ǡ, Ǡ */
	0x01e3, 0x01e2,	/* ǣ, Ǣ */
	0x01e5, 0x01e4,	/* ǥ, Ǥ */
	0x01e7, 0x01e6,	/* ǧ, Ǧ */
	0x01e9, 0x01e8,	/* ǩ, Ǩ */
	0x01eb, 0x01ea,	/* ǫ, Ǫ */
	0x01ed, 0x01ec,	/* ǭ, Ǭ */
	0x01ef, 0x01ee,	/* ǯ, Ǯ */
	0x01f0, 0x0000,	/* ǰ, <nil> */
	0x01f2, 0x01f1,	/* Dz, DZ */
	0x01f3, 0x01f1,	/* dz, DZ */
	0x01f5, 0x01f4,	/* ǵ, Ǵ */
	0x01f9, 0x01f8,	/* ǹ, Ǹ */
	0x01fb, 0x01fa,	/* ǻ, Ǻ */
	0x01fd, 0x01fc,	/* ǽ, Ǽ */
	0x01ff, 0x01fe,	/* ǿ, Ǿ */
	0x0201, 0x0200,	/* ȁ, Ȁ */
	0x0203, 0x0202,	/* ȃ, Ȃ */
	0x0205, 0x0204,	/* ȅ, Ȅ */
	0x0207, 0x0206,	/* ȇ, Ȇ */
	0x0209, 0x0208,	/* ȉ, Ȉ */
	0x020b, 0x020a,	/* ȋ, Ȋ */
	0x020d, 0x020c,	/* ȍ, Ȍ */
	0x020f, 0x020e,	/* ȏ, Ȏ */
	0x0211, 0x0210,	/* ȑ, Ȑ */
	0x0213, 0x0212,	/* ȓ, Ȓ */
	0x0215, 0x0214,	/* ȕ, Ȕ */
	0x0217, 0x0216,	/* ȗ, Ȗ */
	0x0219, 0x0218,	/* ș, Ș */
	0x021b, 0x021a,	/* ț, Ț */
	0x021d, 0x021c,	/* ȝ, Ȝ */
	0x021f, 0x021e,	/* ȟ, Ȟ */
	0x0221, 0x0000,	/* ȡ, <nil> */
	0x0223, 0x0222,	/* ȣ, Ȣ */
	0x0225, 0x0224,	/* ȥ, Ȥ */
	0x0227, 0x0226,	/* ȧ, Ȧ */
	0x0229, 0x0228,	/* ȩ, Ȩ */
	0x022b, 0x022a,	/* ȫ, Ȫ */
	0x022d, 0x022c,	/* ȭ, Ȭ */
	0x022f, 0x022e,	/* ȯ, Ȯ */
	0x0231, 0x0230,	/* ȱ, Ȱ */
	0x0233, 0x0232,	/* ȳ, Ȳ */
	0x0234, 0x0000,	/* ȴ, <nil> */
	0x0235, 0x0000,	/* ȵ, <nil> */
	0x0236, 0x0000,	/* ȶ, <nil> */
	0x0237, 0x0000,	/* ȷ, <nil> */
	0x0238, 0x0000,	/* ȸ, <nil> */
	0x0239, 0x0000,	/* ȹ, <nil> */
	0x023c, 0x023b,	/* ȼ, Ȼ */
	0x023f, 0x0000,	/* ȿ, <nil> */
	0x0240, 0x0000,	/* ɀ, <nil> */
	0x0250, 0x0000,	/* ɐ, <nil> */
	0x0251, 0x0000,	/* ɑ, <nil> */
	0x0252, 0x0000,	/* ɒ, <nil> */
	0x0253, 0x0181,	/* ɓ, Ɓ */
	0x0254, 0x0186,	/* ɔ, Ɔ */
	0x0255, 0x0000,	/* ɕ, <nil> */
	0x0258, 0x0000,	/* ɘ, <nil> */
	0x0259, 0x018f,	/* ə, Ə */
	0x025a, 0x0000,	/* ɚ, <nil> */
	0x025b, 0x0190,	/* ɛ, Ɛ */
	0x025c, 0x0000,	/* ɜ, <nil> */
	0x025d, 0x0000,	/* ɝ, <nil> */
	0x025e, 0x0000,	/* ɞ, <nil> */
	0x025f, 0x0000,	/* ɟ, <nil> */
	0x0260, 0x0193,	/* ɠ, Ɠ */
	0x0261, 0x0000,	/* ɡ, <nil> */
	0x0262, 0x0000,	/* ɢ, <nil> */
	0x0263, 0x0194,	/* ɣ, Ɣ */
	0x0264, 0x0000,	/* ɤ, <nil> */
	0x0265, 0x0000,	/* ɥ, <nil> */
	0x0266, 0x0000,	/* ɦ, <nil> */
	0x0267, 0x0000,	/* ɧ, <nil> */
	0x0268, 0x0197,	/* ɨ, Ɨ */
	0x0269, 0x0196,	/* ɩ, Ɩ */
	0x026a, 0x0000,	/* ɪ, <nil> */
	0x026b, 0x0000,	/* ɫ, <nil> */
	0x026c, 0x0000,	/* ɬ, <nil> */
	0x026d, 0x0000,	/* ɭ, <nil> */
	0x026e, 0x0000,	/* ɮ, <nil> */
	0x026f, 0x019c,	/* ɯ, Ɯ */
	0x0270, 0x0000,	/* ɰ, <nil> */
	0x0271, 0x0000,	/* ɱ, <nil> */
	0x0272, 0x019d,	/* ɲ, Ɲ */
	0x0273, 0x0000,	/* ɳ, <nil> */
	0x0274, 0x0000,	/* ɴ, <nil> */
	0x0275, 0x019f,	/* ɵ, Ɵ */
	0x0276, 0x0000,	/* ɶ, <nil> */
	0x0277, 0x0000,	/* ɷ, <nil> */
	0x0278, 0x0000,	/* ɸ, <nil> */
	0x0279, 0x0000,	/* ɹ, <nil> */
	0x027a, 0x0000,	/* ɺ, <nil> */
	0x027b, 0x0000,	/* ɻ, <nil> */
	0x027c, 0x0000,	/* ɼ, <nil> */
	0x027d, 0x0000,	/* ɽ, <nil> */
	0x027e, 0x0000,	/* ɾ, <nil> */
	0x027f, 0x0000,	/* ɿ, <nil> */
	0x0280, 0x01a6,	/* ʀ, Ʀ */
	0x0281, 0x0000,	/* ʁ, <nil> */
	0x0282, 0x0000,	/* ʂ, <nil> */
	0x0283, 0x01a9,	/* ʃ, Ʃ */
	0x0284, 0x0000,	/* ʄ, <nil> */
	0x0285, 0x0000,	/* ʅ, <nil> */
	0x0286, 0x0000,	/* ʆ, <nil> */
	0x0287, 0x0000,	/* ʇ, <nil> */
	0x0288, 0x01ae,	/* ʈ, Ʈ */
	0x0289, 0x0000,	/* ʉ, <nil> */
	0x028c, 0x0000,	/* ʌ, <nil> */
	0x028d, 0x0000,	/* ʍ, <nil> */
	0x028e, 0x0000,	/* ʎ, <nil> */
	0x028f, 0x0000,	/* ʏ, <nil> */
	0x0290, 0x0000,	/* ʐ, <nil> */
	0x0291, 0x0000,	/* ʑ, <nil> */
	0x0292, 0x01b7,	/* ʒ, Ʒ */
	0x0293, 0x0000,	/* ʓ, <nil> */
	0x0294, 0x0241,	/* ʔ, Ɂ */
	0x0295, 0x0000,	/* ʕ, <nil> */
	0x0296, 0x0000,	/* ʖ, <nil> */
	0x0297, 0x0000,	/* ʗ, <nil> */
	0x0298, 0x0000,	/* ʘ, <nil> */
	0x0299, 0x0000,	/* ʙ, <nil> */
	0x029a, 0x0000,	/* ʚ, <nil> */
	0x029b, 0x0000,	/* ʛ, <nil> */
	0x029c, 0x0000,	/* ʜ, <nil> */
	0x029d, 0x0000,	/* ʝ, <nil> */
	0x029e, 0x0000,	/* ʞ, <nil> */
	0x029f, 0x0000,	/* ʟ, <nil> */
	0x02a0, 0x0000,	/* ʠ, <nil> */
	0x02a1, 0x0000,	/* ʡ, <nil> */
	0x02a2, 0x0000,	/* ʢ, <nil> */
	0x02a3, 0x0000,	/* ʣ, <nil> */
	0x02a4, 0x0000,	/* ʤ, <nil> */
	0x02a5, 0x0000,	/* ʥ, <nil> */
	0x02a6, 0x0000,	/* ʦ, <nil> */
	0x02a7, 0x0000,	/* ʧ, <nil> */
	0x02a8, 0x0000,	/* ʨ, <nil> */
	0x02a9, 0x0000,	/* ʩ, <nil> */
	0x02aa, 0x0000,	/* ʪ, <nil> */
	0x02ab, 0x0000,	/* ʫ, <nil> */
	0x02ac, 0x0000,	/* ʬ, <nil> */
	0x02ad, 0x0000,	/* ʭ, <nil> */
	0x02ae, 0x0000,	/* ʮ, <nil> */
	0x02af, 0x0000,	/* ʯ, <nil> */
	0x0345, 0x0399,	/* ͅ, Ι */
	0x0390, 0x0000,	/* ΐ, <nil> */
	0x03ac, 0x0386,	/* ά, Ά */
	0x03b0, 0x0000,	/* ΰ, <nil> */
	0x03c2, 0x03a3,	/* ς, Σ */
	0x03cc, 0x038c,	/* ό, Ό */
	0x03d0, 0x0392,	/* ϐ, Β */
	0x03d1, 0x0398,	/* ϑ, Θ */
	0x03d5, 0x03a6,	/* ϕ, Φ */
	0x03d6, 0x03a0,	/* ϖ, Π */
	0x03d7, 0x0000,	/* ϗ, <nil> */
	0x03d9, 0x03d8,	/* ϙ, Ϙ */
	0x03db, 0x03da,	/* ϛ, Ϛ */
	0x03dd, 0x03dc,	/* ϝ, Ϝ */
	0x03df, 0x03de,	/* ϟ, Ϟ */
	0x03e1, 0x03e0,	/* ϡ, Ϡ */
	0x03e3, 0x03e2,	/* ϣ, Ϣ */
	0x03e5, 0x03e4,	/* ϥ, Ϥ */
	0x03e7, 0x03e6,	/* ϧ, Ϧ */
	0x03e9, 0x03e8,	/* ϩ, Ϩ */
	0x03eb, 0x03ea,	/* ϫ, Ϫ */
	0x03ed, 0x03ec,	/* ϭ, Ϭ */
	0x03ef, 0x03ee,	/* ϯ, Ϯ */
	0x03f0, 0x039a,	/* ϰ, Κ */
	0x03f1, 0x03a1,	/* ϱ, Ρ */
	0x03f2, 0x03f9,	/* ϲ, Ϲ */
	0x03f3, 0x0000,	/* ϳ, <nil> */
	0x03f5, 0x0395,	/* ϵ, Ε */
	0x03f8, 0x03f7,	/* ϸ, Ϸ */
	0x03fb, 0x03fa,	/* ϻ, Ϻ */
	0x03fc, 0x0000,	/* ϼ, <nil> */
	0x0461, 0x0460,	/* ѡ, Ѡ */
	0x0463, 0x0462,	/* ѣ, Ѣ */
	0x0465, 0x0464,	/* ѥ, Ѥ */
	0x0467, 0x0466,	/* ѧ, Ѧ */
	0x0469, 0x0468,	/* ѩ, Ѩ */
	0x046b, 0x046a,	/* ѫ, Ѫ */
	0x046d, 0x046c,	/* ѭ, Ѭ */
	0x046f, 0x046e,	/* ѯ, Ѯ */
	0x0471, 0x0470,	/* ѱ, Ѱ */
	0x0473, 0x0472,	/* ѳ, Ѳ */
	0x0475, 0x0474,	/* ѵ, Ѵ */
	0x0477, 0x0476,	/* ѷ, Ѷ */
	0x0479, 0x0478,	/* ѹ, Ѹ */
	0x047b, 0x047a,	/* ѻ, Ѻ */
	0x047d, 0x047c,	/* ѽ, Ѽ */
	0x047f, 0x047e,	/* ѿ, Ѿ */
	0x0481, 0x0480,	/* ҁ, Ҁ */
	0x048b, 0x048a,	/* ҋ, Ҋ */
	0x048d, 0x048c,	/* ҍ, Ҍ */
	0x048f, 0x048e,	/* ҏ, Ҏ */
	0x0491, 0x0490,	/* ґ, Ґ */
	0x0493, 0x0492,	/* ғ, Ғ */
	0x0495, 0x0494,	/* ҕ, Ҕ */
	0x0497, 0x0496,	/* җ, Җ */
	0x0499, 0x0498,	/* ҙ, Ҙ */
	0x049b, 0x049a,	/* қ, Қ */
	0x049d, 0x049c,	/* ҝ, Ҝ */
	0x049f, 0x049e,	/* ҟ, Ҟ */
	0x04a1, 0x04a0,	/* ҡ, Ҡ */
	0x04a3, 0x04a2,	/* ң, Ң */
	0x04a5, 0x04a4,	/* ҥ, Ҥ */
	0x04a7, 0x04a6,	/* ҧ, Ҧ */
	0x04a9, 0x04a8,	/* ҩ, Ҩ */
	0x04ab, 0x04aa,	/* ҫ, Ҫ */
	0x04ad, 0x04ac,	/* ҭ, Ҭ */
	0x04af, 0x04ae,	/* ү, Ү */
	0x04b1, 0x04b0,	/* ұ, Ұ */
	0x04b3, 0x04b2,	/* ҳ, Ҳ */
	0x04b5, 0x04b4,	/* ҵ, Ҵ */
	0x04b7, 0x04b6,	/* ҷ, Ҷ */
	0x04b9, 0x04b8,	/* ҹ, Ҹ */
	0x04bb, 0x04ba,	/* һ, Һ */
	0x04bd, 0x04bc,	/* ҽ, Ҽ */
	0x04bf, 0x04be,	/* ҿ, Ҿ */
	0x04c2, 0x04c1,	/* ӂ, Ӂ */
	0x04c4, 0x04c3,	/* ӄ, Ӄ */
	0x04c6, 0x04c5,	/* ӆ, Ӆ */
	0x04c8, 0x04c7,	/* ӈ, Ӈ */
	0x04ca, 0x04c9,	/* ӊ, Ӊ */
	0x04cc, 0x04cb,	/* ӌ, Ӌ */
	0x04ce, 0x04cd,	/* ӎ, Ӎ */
	0x04d1, 0x04d0,	/* ӑ, Ӑ */
	0x04d3, 0x04d2,	/* ӓ, Ӓ */
	0x04d5, 0x04d4,	/* ӕ, Ӕ */
	0x04d7, 0x04d6,	/* ӗ, Ӗ */
	0x04d9, 0x04d8,	/* ә, Ә */
	0x04db, 0x04da,	/* ӛ, Ӛ */
	0x04dd, 0x04dc,	/* ӝ, Ӝ */
	0x04df, 0x04de,	/* ӟ, Ӟ */
	0x04e1, 0x04e0,	/* ӡ, Ӡ */
	0x04e3, 0x04e2,	/* ӣ, Ӣ */
	0x04e5, 0x04e4,	/* ӥ, Ӥ */
	0x04e7, 0x04e6,	/* ӧ, Ӧ */
	0x04e9, 0x04e8,	/* ө, Ө */
	0x04eb, 0x04ea,	/* ӫ, Ӫ */
	0x04ed, 0x04ec,	/* ӭ, Ӭ */
	0x04ef, 0x04ee,	/* ӯ, Ӯ */
	0x04f1, 0x04f0,	/* ӱ, Ӱ */
	0x04f3, 0x04f2,	/* ӳ, Ӳ */
	0x04f5, 0x04f4,	/* ӵ, Ӵ */
	0x04f7, 0x04f6,	/* ӷ, Ӷ */
	0x04f9, 0x04f8,	/* ӹ, Ӹ */
	0x0501, 0x0500,	/* ԁ, Ԁ */
	0x0503, 0x0502,	/* ԃ, Ԃ */
	0x0505, 0x0504,	/* ԅ, Ԅ */
	0x0507, 0x0506,	/* ԇ, Ԇ */
	0x0509, 0x0508,	/* ԉ, Ԉ */
	0x050b, 0x050a,	/* ԋ, Ԋ */
	0x050d, 0x050c,	/* ԍ, Ԍ */
	0x050f, 0x050e,	/* ԏ, Ԏ */
	0x0587, 0x0000,	/* և, <nil> */
	0x1d00, 0x0000,	/* ᴀ, <nil> */
	0x1d01, 0x0000,	/* ᴁ, <nil> */
	0x1d02, 0x0000,	/* ᴂ, <nil> */
	0x1d03, 0x0000,	/* ᴃ, <nil> */
	0x1d04, 0x0000,	/* ᴄ, <nil> */
	0x1d05, 0x0000,	/* ᴅ, <nil> */
	0x1d06, 0x0000,	/* ᴆ, <nil> */
	0x1d07, 0x0000,	/* ᴇ, <nil> */
	0x1d08, 0x0000,	/* ᴈ, <nil> */
	0x1d09, 0x0000,	/* ᴉ, <nil> */
	0x1d0a, 0x0000,	/* ᴊ, <nil> */
	0x1d0b, 0x0000,	/* ᴋ, <nil> */
	0x1d0c, 0x0000,	/* ᴌ, <nil> */
	0x1d0d, 0x0000,	/* ᴍ, <nil> */
	0x1d0e, 0x0000,	/* ᴎ, <nil> */
	0x1d0f, 0x0000,	/* ᴏ, <nil> */
	0x1d10, 0x0000,	/* ᴐ, <nil> */
	0x1d11, 0x0000,	/* ᴑ, <nil> */
	0x1d12, 0x0000,	/* ᴒ, <nil> */
	0x1d13, 0x0000,	/* ᴓ, <nil> */
	0x1d14, 0x0000,	/* ᴔ, <nil> */
	0x1d15, 0x0000,	/* ᴕ, <nil> */
	0x1d16, 0x0000,	/* ᴖ, <nil> */
	0x1d17, 0x0000,	/* ᴗ, <nil> */
	0x1d18, 0x0000,	/* ᴘ, <nil> */
	0x1d19, 0x0000,	/* ᴙ, <nil> */
	0x1d1a, 0x0000,	/* ᴚ, <nil> */
	0x1d1b, 0x0000,	/* ᴛ, <nil> */
	0x1d1c, 0x0000,	/* ᴜ, <nil> */
	0x1d1d, 0x0000,	/* ᴝ, <nil> */
	0x1d1e, 0x0000,	/* ᴞ, <nil> */
	0x1d1f, 0x0000,	/* ᴟ, <nil> */
	0x1d20, 0x0000,	/* ᴠ, <nil> */
	0x1d21, 0x0000,	/* ᴡ, <nil> */
	0x1d22, 0x0000,	/* ᴢ, <nil> */
	0x1d23, 0x0000,	/* ᴣ, <nil> */
	0x1d24, 0x0000,	/* ᴤ, <nil> */
	0x1d25, 0x0000,	/* ᴥ, <nil> */
	0x1d26, 0x0000,	/* ᴦ, <nil> */
	0x1d27, 0x0000,	/* ᴧ, <nil> */
	0x1d28, 0x0000,	/* ᴨ, <nil> */
	0x1d29, 0x0000,	/* ᴩ, <nil> */
	0x1d2a, 0x0000,	/* ᴪ, <nil> */
	0x1d2b, 0x0000,	/* ᴫ, <nil> */
	0x1d62, 0x0000,	/* ᵢ, <nil> */
	0x1d63, 0x0000,	/* ᵣ, <nil> */
	0x1d64, 0x0000,	/* ᵤ, <nil> */
	0x1d65, 0x0000,	/* ᵥ, <nil> */
	0x1d66, 0x0000,	/* ᵦ, <nil> */
	0x1d67, 0x0000,	/* ᵧ, <nil> */
	0x1d68, 0x0000,	/* ᵨ, <nil> */
	0x1d69, 0x0000,	/* ᵩ, <nil> */
	0x1d6a, 0x0000,	/* ᵪ, <nil> */
	0x1d6b, 0x0000,	/* ᵫ, <nil> */
	0x1d6c, 0x0000,	/* ᵬ, <nil> */
	0x1d6d, 0x0000,	/* ᵭ, <nil> */
	0x1d6e, 0x0000,	/* ᵮ, <nil> */
	0x1d6f, 0x0000,	/* ᵯ, <nil> */
	0x1d70, 0x0000,	/* ᵰ, <nil> */
	0x1d71, 0x0000,	/* ᵱ, <nil> */
	0x1d72, 0x0000,	/* ᵲ, <nil> */
	0x1d73, 0x0000,	/* ᵳ, <nil> */
	0x1d74, 0x0000,	/* ᵴ, <nil> */
	0x1d75, 0x0000,	/* ᵵ, <nil> */
	0x1d76, 0x0000,	/* ᵶ, <nil> */
	0x1d77, 0x0000,	/* ᵷ, <nil> */
	0x1d79, 0x0000,	/* ᵹ, <nil> */
	0x1d7a, 0x0000,	/* ᵺ, <nil> */
	0x1d7b, 0x0000,	/* ᵻ, <nil> */
	0x1d7c, 0x0000,	/* ᵼ, <nil> */
	0x1d7d, 0x0000,	/* ᵽ, <nil> */
	0x1d7e, 0x0000,	/* ᵾ, <nil> */
	0x1d7f, 0x0000,	/* ᵿ, <nil> */
	0x1d80, 0x0000,	/* ᶀ, <nil> */
	0x1d81, 0x0000,	/* ᶁ, <nil> */
	0x1d82, 0x0000,	/* ᶂ, <nil> */
	0x1d83, 0x0000,	/* ᶃ, <nil> */
	0x1d84, 0x0000,	/* ᶄ, <nil> */
	0x1d85, 0x0000,	/* ᶅ, <nil> */
	0x1d86, 0x0000,	/* ᶆ, <nil> */
	0x1d87, 0x0000,	/* ᶇ, <nil> */
	0x1d88, 0x0000,	/* ᶈ, <nil> */
	0x1d89, 0x0000,	/* ᶉ, <nil> */
	0x1d8a, 0x0000,	/* ᶊ, <nil> */
	0x1d8b, 0x0000,	/* ᶋ, <nil> */
	0x1d8c, 0x0000,	/* ᶌ, <nil> */
	0x1d8d, 0x0000,	/* ᶍ, <nil> */
	0x1d8e, 0x0000,	/* ᶎ, <nil> */
	0x1d8f, 0x0000,	/* ᶏ, <nil> */
	0x1d90, 0x0000,	/* ᶐ, <nil> */
	0x1d91, 0x0000,	/* ᶑ, <nil> */
	0x1d92, 0x0000,	/* ᶒ, <nil> */
	0x1d93, 0x0000,	/* ᶓ, <nil> */
	0x1d94, 0x0000,	/* ᶔ, <nil> */
	0x1d95, 0x0000,	/* ᶕ, <nil> */
	0x1d96, 0x0000,	/* ᶖ, <nil> */
	0x1d97, 0x0000,	/* ᶗ, <nil> */
	0x1d98, 0x0000,	/* ᶘ, <nil> */
	0x1d99, 0x0000,	/* ᶙ, <nil> */
	0x1d9a, 0x0000,	/* ᶚ, <nil> */
	0x1e01, 0x1e00,	/* ḁ, Ḁ */
	0x1e03, 0x1e02,	/* ḃ, Ḃ */
	0x1e05, 0x1e04,	/* ḅ, Ḅ */
	0x1e07, 0x1e06,	/* ḇ, Ḇ */
	0x1e09, 0x1e08,	/* ḉ, Ḉ */
	0x1e0b, 0x1e0a,	/* ḋ, Ḋ */
	0x1e0d, 0x1e0c,	/* ḍ, Ḍ */
	0x1e0f, 0x1e0e,	/* ḏ, Ḏ */
	0x1e11, 0x1e10,	/* ḑ, Ḑ */
	0x1e13, 0x1e12,	/* ḓ, Ḓ */
	0x1e15, 0x1e14,	/* ḕ, Ḕ */
	0x1e17, 0x1e16,	/* ḗ, Ḗ */
	0x1e19, 0x1e18,	/* ḙ, Ḙ */
	0x1e1b, 0x1e1a,	/* ḛ, Ḛ */
	0x1e1d, 0x1e1c,	/* ḝ, Ḝ */
	0x1e1f, 0x1e1e,	/* ḟ, Ḟ */
	0x1e21, 0x1e20,	/* ḡ, Ḡ */
	0x1e23, 0x1e22,	/* ḣ, Ḣ */
	0x1e25, 0x1e24,	/* ḥ, Ḥ */
	0x1e27, 0x1e26,	/* ḧ, Ḧ */
	0x1e29, 0x1e28,	/* ḩ, Ḩ */
	0x1e2b, 0x1e2a,	/* ḫ, Ḫ */
	0x1e2d, 0x1e2c,	/* ḭ, Ḭ */
	0x1e2f, 0x1e2e,	/* ḯ, Ḯ */
	0x1e31, 0x1e30,	/* ḱ, Ḱ */
	0x1e33, 0x1e32,	/* ḳ, Ḳ */
	0x1e35, 0x1e34,	/* ḵ, Ḵ */
	0x1e37, 0x1e36,	/* ḷ, Ḷ */
	0x1e39, 0x1e38,	/* ḹ, Ḹ */
	0x1e3b, 0x1e3a,	/* ḻ, Ḻ */
	0x1e3d, 0x1e3c,	/* ḽ, Ḽ */
	0x1e3f, 0x1e3e,	/* ḿ, Ḿ */
	0x1e41, 0x1e40,	/* ṁ, Ṁ */
	0x1e43, 0x1e42,	/* ṃ, Ṃ */
	0x1e45, 0x1e44,	/* ṅ, Ṅ */
	0x1e47, 0x1e46,	/* ṇ, Ṇ */
	0x1e49, 0x1e48,	/* ṉ, Ṉ */
	0x1e4b, 0x1e4a,	/* ṋ, Ṋ */
	0x1e4d, 0x1e4c,	/* ṍ, Ṍ */
	0x1e4f, 0x1e4e,	/* ṏ, Ṏ */
	0x1e51, 0x1e50,	/* ṑ, Ṑ */
	0x1e53, 0x1e52,	/* ṓ, Ṓ */
	0x1e55, 0x1e54,	/* ṕ, Ṕ */
	0x1e57, 0x1e56,	/* ṗ, Ṗ */
	0x1e59, 0x1e58,	/* ṙ, Ṙ */
	0x1e5b, 0x1e5a,	/* ṛ, Ṛ */
	0x1e5d, 0x1e5c,	/* ṝ, Ṝ */
	0x1e5f, 0x1e5e,	/* ṟ, Ṟ */
	0x1e61, 0x1e60,	/* ṡ, Ṡ */
	0x1e63, 0x1e62,	/* ṣ, Ṣ */
	0x1e65, 0x1e64,	/* ṥ, Ṥ */
	0x1e67, 0x1e66,	/* ṧ, Ṧ */
	0x1e69, 0x1e68,	/* ṩ, Ṩ */
	0x1e6b, 0x1e6a,	/* ṫ, Ṫ */
	0x1e6d, 0x1e6c,	/* ṭ, Ṭ */
	0x1e6f, 0x1e6e,	/* ṯ, Ṯ */
	0x1e71, 0x1e70,	/* ṱ, Ṱ */
	0x1e73, 0x1e72,	/* ṳ, Ṳ */
	0x1e75, 0x1e74,	/* ṵ, Ṵ */
	0x1e77, 0x1e76,	/* ṷ, Ṷ */
	0x1e79, 0x1e78,	/* ṹ, Ṹ */
	0x1e7b, 0x1e7a,	/* ṻ, Ṻ */
	0x1e7d, 0x1e7c,	/* ṽ, Ṽ */
	0x1e7f, 0x1e7e,	/* ṿ, Ṿ */
	0x1e81, 0x1e80,	/* ẁ, Ẁ */
	0x1e83, 0x1e82,	/* ẃ, Ẃ */
	0x1e85, 0x1e84,	/* ẅ, Ẅ */
	0x1e87, 0x1e86,	/* ẇ, Ẇ */
	0x1e89, 0x1e88,	/* ẉ, Ẉ */
	0x1e8b, 0x1e8a,	/* ẋ, Ẋ */
	0x1e8d, 0x1e8c,	/* ẍ, Ẍ */
	0x1e8f, 0x1e8e,	/* ẏ, Ẏ */
	0x1e91, 0x1e90,	/* ẑ, Ẑ */
	0x1e93, 0x1e92,	/* ẓ, Ẓ */
	0x1e95, 0x1e94,	/* ẕ, Ẕ */
	0x1e96, 0x0000,	/* ẖ, <nil> */
	0x1e97, 0x0000,	/* ẗ, <nil> */
	0x1e98, 0x0000,	/* ẘ, <nil> */
	0x1e99, 0x0000,	/* ẙ, <nil> */
	0x1e9a, 0x0000,	/* ẚ, <nil> */
	0x1e9b, 0x1e60,	/* ẛ, Ṡ */
	0x1ea1, 0x1ea0,	/* ạ, Ạ */
	0x1ea3, 0x1ea2,	/* ả, Ả */
	0x1ea5, 0x1ea4,	/* ấ, Ấ */
	0x1ea7, 0x1ea6,	/* ầ, Ầ */
	0x1ea9, 0x1ea8,	/* ẩ, Ẩ */
	0x1eab, 0x1eaa,	/* ẫ, Ẫ */
	0x1ead, 0x1eac,	/* ậ, Ậ */
	0x1eaf, 0x1eae,	/* ắ, Ắ */
	0x1eb1, 0x1eb0,	/* ằ, Ằ */
	0x1eb3, 0x1eb2,	/* ẳ, Ẳ */
	0x1eb5, 0x1eb4,	/* ẵ, Ẵ */
	0x1eb7, 0x1eb6,	/* ặ, Ặ */
	0x1eb9, 0x1eb8,	/* ẹ, Ẹ */
	0x1ebb, 0x1eba,	/* ẻ, Ẻ */
	0x1ebd, 0x1ebc,	/* ẽ, Ẽ */
	0x1ebf, 0x1ebe,	/* ế, Ế */
	0x1ec1, 0x1ec0,	/* ề, Ề */
	0x1ec3, 0x1ec2,	/* ể, Ể */
	0x1ec5, 0x1ec4,	/* ễ, Ễ */
	0x1ec7, 0x1ec6,	/* ệ, Ệ */
	0x1ec9, 0x1ec8,	/* ỉ, Ỉ */
	0x1ecb, 0x1eca,	/* ị, Ị */
	0x1ecd, 0x1ecc,	/* ọ, Ọ */
	0x1ecf, 0x1ece,	/* ỏ, Ỏ */
	0x1ed1, 0x1ed0,	/* ố, Ố */
	0x1ed3, 0x1ed2,	/* ồ, Ồ */
	0x1ed5, 0x1ed4,	/* ổ, Ổ */
	0x1ed7, 0x1ed6,	/* ỗ, Ỗ */
	0x1ed9, 0x1ed8,	/* ộ, Ộ */
	0x1edb, 0x1eda,	/* ớ, Ớ */
	0x1edd, 0x1edc,	/* ờ, Ờ */
	0x1edf, 0x1ede,	/* ở, Ở */
	0x1ee1, 0x1ee0,	/* ỡ, Ỡ */
	0x1ee3, 0x1ee2,	/* ợ, Ợ */
	0x1ee5, 0x1ee4,	/* ụ, Ụ */
	0x1ee7, 0x1ee6,	/* ủ, Ủ */
	0x1ee9, 0x1ee8,	/* ứ, Ứ */
	0x1eeb, 0x1eea,	/* ừ, Ừ */
	0x1eed, 0x1eec,	/* ử, Ử */
	0x1eef, 0x1eee,	/* ữ, Ữ */
	0x1ef1, 0x1ef0,	/* ự, Ự */
	0x1ef3, 0x1ef2,	/* ỳ, Ỳ */
	0x1ef5, 0x1ef4,	/* ỵ, Ỵ */
	0x1ef7, 0x1ef6,	/* ỷ, Ỷ */
	0x1ef9, 0x1ef8,	/* ỹ, Ỹ */
	0x1f50, 0x0000,	/* ὐ, <nil> */
	0x1f51, 0x1f59,	/* ὑ, Ὑ */
	0x1f52, 0x0000,	/* ὒ, <nil> */
	0x1f53, 0x1f5b,	/* ὓ, Ὓ */
	0x1f54, 0x0000,	/* ὔ, <nil> */
	0x1f55, 0x1f5d,	/* ὕ, Ὕ */
	0x1f56, 0x0000,	/* ὖ, <nil> */
	0x1f57, 0x1f5f,	/* ὗ, Ὗ */
	0x1fb2, 0x0000,	/* ᾲ, <nil> */
	0x1fb3, 0x1fbc,	/* ᾳ, ᾼ */
	0x1fb4, 0x0000,	/* ᾴ, <nil> */
	0x1fb6, 0x0000,	/* ᾶ, <nil> */
	0x1fb7, 0x0000,	/* ᾷ, <nil> */
	0x1fbe, 0x0399,	/* ι, Ι */
	0x1fc2, 0x0000,	/* ῂ, <nil> */
	0x1fc3, 0x1fcc,	/* ῃ, ῌ */
	0x1fc4, 0x0000,	/* ῄ, <nil> */
	0x1fc6, 0x0000,	/* ῆ, <nil> */
	0x1fc7, 0x0000,	/* ῇ, <nil> */
	0x1fd2, 0x0000,	/* ῒ, <nil> */
	0x1fd3, 0x0000,	/* ΐ, <nil> */
	0x1fd6, 0x0000,	/* ῖ, <nil> */
	0x1fd7, 0x0000,	/* ῗ, <nil> */
	0x1fe2, 0x0000,	/* ῢ, <nil> */
	0x1fe3, 0x0000,	/* ΰ, <nil> */
	0x1fe4, 0x0000,	/* ῤ, <nil> */
	0x1fe5, 0x1fec,	/* ῥ, Ῥ */
	0x1fe6, 0x0000,	/* ῦ, <nil> */
	0x1fe7, 0x0000,	/* ῧ, <nil> */
	0x1ff2, 0x0000,	/* ῲ, <nil> */
	0x1ff3, 0x1ffc,	/* ῳ, ῼ */
	0x1ff4, 0x0000,	/* ῴ, <nil> */
	0x1ff6, 0x0000,	/* ῶ, <nil> */
	0x1ff7, 0x0000,	/* ῷ, <nil> */
	0x2071, 0x0000,	/* ⁱ, <nil> */
	0x207f, 0x0000,	/* ⁿ, <nil> */
	0x210a, 0x0000,	/* ℊ, <nil> */
	0x210e, 0x0000,	/* ℎ, <nil> */
	0x210f, 0x0000,	/* ℏ, <nil> */
	0x2113, 0x0000,	/* ℓ, <nil> */
	0x212f, 0x0000,	/* ℯ, <nil> */
	0x2134, 0x0000,	/* ℴ, <nil> */
	0x2139, 0x0000,	/* ℹ, <nil> */
	0x213c, 0x0000,	/* ℼ, <nil> */
	0x213d, 0x0000,	/* ℽ, <nil> */
	0x2146, 0x0000,	/* ⅆ, <nil> */
	0x2147, 0x0000,	/* ⅇ, <nil> */
	0x2148, 0x0000,	/* ⅈ, <nil> */
	0x2149, 0x0000,	/* ⅉ, <nil> */
	0x2c81, 0x2c80,	/* ⲁ, Ⲁ */
	0x2c83, 0x2c82,	/* ⲃ, Ⲃ */
	0x2c85, 0x2c84,	/* ⲅ, Ⲅ */
	0x2c87, 0x2c86,	/* ⲇ, Ⲇ */
	0x2c89, 0x2c88,	/* ⲉ, Ⲉ */
	0x2c8b, 0x2c8a,	/* ⲋ, Ⲋ */
	0x2c8d, 0x2c8c,	/* ⲍ, Ⲍ */
	0x2c8f, 0x2c8e,	/* ⲏ, Ⲏ */
	0x2c91, 0x2c90,	/* ⲑ, Ⲑ */
	0x2c93, 0x2c92,	/* ⲓ, Ⲓ */
	0x2c95, 0x2c94,	/* ⲕ, Ⲕ */
	0x2c97, 0x2c96,	/* ⲗ, Ⲗ */
	0x2c99, 0x2c98,	/* ⲙ, Ⲙ */
	0x2c9b, 0x2c9a,	/* ⲛ, Ⲛ */
	0x2c9d, 0x2c9c,	/* ⲝ, Ⲝ */
	0x2c9f, 0x2c9e,	/* ⲟ, Ⲟ */
	0x2ca1, 0x2ca0,	/* ⲡ, Ⲡ */
	0x2ca3, 0x2ca2,	/* ⲣ, Ⲣ */
	0x2ca5, 0x2ca4,	/* ⲥ, Ⲥ */
	0x2ca7, 0x2ca6,	/* ⲧ, Ⲧ */
	0x2ca9, 0x2ca8,	/* ⲩ, Ⲩ */
	0x2cab, 0x2caa,	/* ⲫ, Ⲫ */
	0x2cad, 0x2cac,	/* ⲭ, Ⲭ */
	0x2caf, 0x2cae,	/* ⲯ, Ⲯ */
	0x2cb1, 0x2cb0,	/* ⲱ, Ⲱ */
	0x2cb3, 0x2cb2,	/* ⲳ, Ⲳ */
	0x2cb5, 0x2cb4,	/* ⲵ, Ⲵ */
	0x2cb7, 0x2cb6,	/* ⲷ, Ⲷ */
	0x2cb9, 0x2cb8,	/* ⲹ, Ⲹ */
	0x2cbb, 0x2cba,	/* ⲻ, Ⲻ */
	0x2cbd, 0x2cbc,	/* ⲽ, Ⲽ */
	0x2cbf, 0x2cbe,	/* ⲿ, Ⲿ */
	0x2cc1, 0x2cc0,	/* ⳁ, Ⳁ */
	0x2cc3, 0x2cc2,	/* ⳃ, Ⳃ */
	0x2cc5, 0x2cc4,	/* ⳅ, Ⳅ */
	0x2cc7, 0x2cc6,	/* ⳇ, Ⳇ */
	0x2cc9, 0x2cc8,	/* ⳉ, Ⳉ */
	0x2ccb, 0x2cca,	/* ⳋ, Ⳋ */
	0x2ccd, 0x2ccc,	/* ⳍ, Ⳍ */
	0x2ccf, 0x2cce,	/* ⳏ, Ⳏ */
	0x2cd1, 0x2cd0,	/* ⳑ, Ⳑ */
	0x2cd3, 0x2cd2,	/* ⳓ, Ⳓ */
	0x2cd5, 0x2cd4,	/* ⳕ, Ⳕ */
	0x2cd7, 0x2cd6,	/* ⳗ, Ⳗ */
	0x2cd9, 0x2cd8,	/* ⳙ, Ⳙ */
	0x2cdb, 0x2cda,	/* ⳛ, Ⳛ */
	0x2cdd, 0x2cdc,	/* ⳝ, Ⳝ */
	0x2cdf, 0x2cde,	/* ⳟ, Ⳟ */
	0x2ce1, 0x2ce0,	/* ⳡ, Ⳡ */
	0x2ce3, 0x2ce2,	/* ⳣ, Ⳣ */
	0x2ce4, 0x0000,	/* ⳤ, <nil> */
	0xfb00, 0x0000,	/* ff, <nil> */
	0xfb01, 0x0000,	/* fi, <nil> */
	0xfb02, 0x0000,	/* fl, <nil> */
	0xfb03, 0x0000,	/* ffi, <nil> */
	0xfb04, 0x0000,	/* ffl, <nil> */
	0xfb05, 0x0000,	/* ſt, <nil> */
	0xfb06, 0x0000,	/* st, <nil> */
	0xfb13, 0x0000,	/* ﬓ, <nil> */
	0xfb14, 0x0000,	/* ﬔ, <nil> */
	0xfb15, 0x0000,	/* ﬕ, <nil> */
	0xfb16, 0x0000,	/* ﬖ, <nil> */
	0xfb17, 0x0000,	/* ﬗ, <nil> */

};

static
Rune	__tolower2[] =
{
	0x0041, 0x005a, 0x0061,	/* A-Z, a-z */
	0x00c0, 0x00d6, 0x00e0,	/* À-Ö, à-ö */
	0x00d8, 0x00de, 0x00f8,	/* Ø-Þ, ø-þ */
	0x0189, 0x018a, 0x0256,	/* Ɖ-Ɗ, ɖ-ɗ */
	0x01b1, 0x01b2, 0x028a,	/* Ʊ-Ʋ, ʊ-ʋ */
	0x0388, 0x038a, 0x03ad,	/* Έ-Ί, έ-ί */
	0x038e, 0x038f, 0x03cd,	/* Ύ-Ώ, ύ-ώ */
	0x0391, 0x03a1, 0x03b1,	/* Α-Ρ, α-ρ */
	0x03a3, 0x03ab, 0x03c3,	/* Σ-Ϋ, σ-ϋ */
	0x0400, 0x040f, 0x0450,	/* Ѐ-Џ, ѐ-џ */
	0x0410, 0x042f, 0x0430,	/* А-Я, а-я */
	0x0531, 0x0556, 0x0561,	/* Ա-Ֆ, ա-ֆ */
	0x10a0, 0x10c5, 0x2d00,	/* Ⴀ-Ⴥ, ⴀ-ⴥ */
	0x1f08, 0x1f0f, 0x1f00,	/* Ἀ-Ἇ, ἀ-ἇ */
	0x1f18, 0x1f1d, 0x1f10,	/* Ἐ-Ἕ, ἐ-ἕ */
	0x1f28, 0x1f2f, 0x1f20,	/* Ἠ-Ἧ, ἠ-ἧ */
	0x1f38, 0x1f3f, 0x1f30,	/* Ἰ-Ἷ, ἰ-ἷ */
	0x1f48, 0x1f4d, 0x1f40,	/* Ὀ-Ὅ, ὀ-ὅ */
	0x1f68, 0x1f6f, 0x1f60,	/* Ὠ-Ὧ, ὠ-ὧ */
	0x1f88, 0x1f8f, 0x1f80,	/* ᾈ-ᾏ, ᾀ-ᾇ */
	0x1f98, 0x1f9f, 0x1f90,	/* ᾘ-ᾟ, ᾐ-ᾗ */
	0x1fa8, 0x1faf, 0x1fa0,	/* ᾨ-ᾯ, ᾠ-ᾧ */
	0x1fb8, 0x1fb9, 0x1fb0,	/* Ᾰ-Ᾱ, ᾰ-ᾱ */
	0x1fba, 0x1fbb, 0x1f70,	/* Ὰ-Ά, ὰ-ά */
	0x1fc8, 0x1fcb, 0x1f72,	/* Ὲ-Ή, ὲ-ή */
	0x1fd8, 0x1fd9, 0x1fd0,	/* Ῐ-Ῑ, ῐ-ῑ */
	0x1fda, 0x1fdb, 0x1f76,	/* Ὶ-Ί, ὶ-ί */
	0x1fe8, 0x1fe9, 0x1fe0,	/* Ῠ-Ῡ, ῠ-ῡ */
	0x1fea, 0x1feb, 0x1f7a,	/* Ὺ-Ύ, ὺ-ύ */
	0x1ff8, 0x1ff9, 0x1f78,	/* Ὸ-Ό, ὸ-ό */
	0x1ffa, 0x1ffb, 0x1f7c,	/* Ὼ-Ώ, ὼ-ώ */
	0x2160, 0x216f, 0x2170,	/* Ⅰ-Ⅿ, ⅰ-ⅿ */
	0x24b6, 0x24cf, 0x24d0,	/* Ⓐ-Ⓩ, ⓐ-ⓩ */
	0x2c00, 0x2c2e, 0x2c30,	/* Ⰰ-Ⱞ, ⰰ-ⱞ */
	0xff21, 0xff3a, 0xff41,	/* A-Z, a-z */
};

/*
 * We allow the target character to be nil so isupperrune() works,
 * even for bogus unicode that doesn't have a tolower().
 */

static
Rune	__tolower1[] =
{
	0x0100, 0x0101,	/* Ā, ā */
	0x0102, 0x0103,	/* Ă, ă */
	0x0104, 0x0105,	/* Ą, ą */
	0x0106, 0x0107,	/* Ć, ć */
	0x0108, 0x0109,	/* Ĉ, ĉ */
	0x010a, 0x010b,	/* Ċ, ċ */
	0x010c, 0x010d,	/* Č, č */
	0x010e, 0x010f,	/* Ď, ď */
	0x0110, 0x0111,	/* Đ, đ */
	0x0112, 0x0113,	/* Ē, ē */
	0x0114, 0x0115,	/* Ĕ, ĕ */
	0x0116, 0x0117,	/* Ė, ė */
	0x0118, 0x0119,	/* Ę, ę */
	0x011a, 0x011b,	/* Ě, ě */
	0x011c, 0x011d,	/* Ĝ, ĝ */
	0x011e, 0x011f,	/* Ğ, ğ */
	0x0120, 0x0121,	/* Ġ, ġ */
	0x0122, 0x0123,	/* Ģ, ģ */
	0x0124, 0x0125,	/* Ĥ, ĥ */
	0x0126, 0x0127,	/* Ħ, ħ */
	0x0128, 0x0129,	/* Ĩ, ĩ */
	0x012a, 0x012b,	/* Ī, ī */
	0x012c, 0x012d,	/* Ĭ, ĭ */
	0x012e, 0x012f,	/* Į, į */
	0x0130, 0x0069,	/* İ, i */
	0x0132, 0x0133,	/* IJ, ij */
	0x0134, 0x0135,	/* Ĵ, ĵ */
	0x0136, 0x0137,	/* Ķ, ķ */
	0x0139, 0x013a,	/* Ĺ, ĺ */
	0x013b, 0x013c,	/* Ļ, ļ */
	0x013d, 0x013e,	/* Ľ, ľ */
	0x013f, 0x0140,	/* Ŀ, ŀ */
	0x0141, 0x0142,	/* Ł, ł */
	0x0143, 0x0144,	/* Ń, ń */
	0x0145, 0x0146,	/* Ņ, ņ */
	0x0147, 0x0148,	/* Ň, ň */
	0x014a, 0x014b,	/* Ŋ, ŋ */
	0x014c, 0x014d,	/* Ō, ō */
	0x014e, 0x014f,	/* Ŏ, ŏ */
	0x0150, 0x0151,	/* Ő, ő */
	0x0152, 0x0153,	/* Œ, œ */
	0x0154, 0x0155,	/* Ŕ, ŕ */
	0x0156, 0x0157,	/* Ŗ, ŗ */
	0x0158, 0x0159,	/* Ř, ř */
	0x015a, 0x015b,	/* Ś, ś */
	0x015c, 0x015d,	/* Ŝ, ŝ */
	0x015e, 0x015f,	/* Ş, ş */
	0x0160, 0x0161,	/* Š, š */
	0x0162, 0x0163,	/* Ţ, ţ */
	0x0164, 0x0165,	/* Ť, ť */
	0x0166, 0x0167,	/* Ŧ, ŧ */
	0x0168, 0x0169,	/* Ũ, ũ */
	0x016a, 0x016b,	/* Ū, ū */
	0x016c, 0x016d,	/* Ŭ, ŭ */
	0x016e, 0x016f,	/* Ů, ů */
	0x0170, 0x0171,	/* Ű, ű */
	0x0172, 0x0173,	/* Ų, ų */
	0x0174, 0x0175,	/* Ŵ, ŵ */
	0x0176, 0x0177,	/* Ŷ, ŷ */
	0x0178, 0x00ff,	/* Ÿ, ÿ */
	0x0179, 0x017a,	/* Ź, ź */
	0x017b, 0x017c,	/* Ż, ż */
	0x017d, 0x017e,	/* Ž, ž */
	0x0181, 0x0253,	/* Ɓ, ɓ */
	0x0182, 0x0183,	/* Ƃ, ƃ */
	0x0184, 0x0185,	/* Ƅ, ƅ */
	0x0186, 0x0254,	/* Ɔ, ɔ */
	0x0187, 0x0188,	/* Ƈ, ƈ */
	0x018b, 0x018c,	/* Ƌ, ƌ */
	0x018e, 0x01dd,	/* Ǝ, ǝ */
	0x018f, 0x0259,	/* Ə, ə */
	0x0190, 0x025b,	/* Ɛ, ɛ */
	0x0191, 0x0192,	/* Ƒ, ƒ */
	0x0193, 0x0260,	/* Ɠ, ɠ */
	0x0194, 0x0263,	/* Ɣ, ɣ */
	0x0196, 0x0269,	/* Ɩ, ɩ */
	0x0197, 0x0268,	/* Ɨ, ɨ */
	0x0198, 0x0199,	/* Ƙ, ƙ */
	0x019c, 0x026f,	/* Ɯ, ɯ */
	0x019d, 0x0272,	/* Ɲ, ɲ */
	0x019f, 0x0275,	/* Ɵ, ɵ */
	0x01a0, 0x01a1,	/* Ơ, ơ */
	0x01a2, 0x01a3,	/* Ƣ, ƣ */
	0x01a4, 0x01a5,	/* Ƥ, ƥ */
	0x01a6, 0x0280,	/* Ʀ, ʀ */
	0x01a7, 0x01a8,	/* Ƨ, ƨ */
	0x01a9, 0x0283,	/* Ʃ, ʃ */
	0x01ac, 0x01ad,	/* Ƭ, ƭ */
	0x01ae, 0x0288,	/* Ʈ, ʈ */
	0x01af, 0x01b0,	/* Ư, ư */
	0x01b3, 0x01b4,	/* Ƴ, ƴ */
	0x01b5, 0x01b6,	/* Ƶ, ƶ */
	0x01b7, 0x0292,	/* Ʒ, ʒ */
	0x01b8, 0x01b9,	/* Ƹ, ƹ */
	0x01bc, 0x01bd,	/* Ƽ, ƽ */
	0x01c4, 0x01c6,	/* DŽ, dž */
	0x01c5, 0x01c6,	/* Dž, dž */
	0x01c7, 0x01c9,	/* LJ, lj */
	0x01c8, 0x01c9,	/* Lj, lj */
	0x01ca, 0x01cc,	/* NJ, nj */
	0x01cb, 0x01cc,	/* Nj, nj */
	0x01cd, 0x01ce,	/* Ǎ, ǎ */
	0x01cf, 0x01d0,	/* Ǐ, ǐ */
	0x01d1, 0x01d2,	/* Ǒ, ǒ */
	0x01d3, 0x01d4,	/* Ǔ, ǔ */
	0x01d5, 0x01d6,	/* Ǖ, ǖ */
	0x01d7, 0x01d8,	/* Ǘ, ǘ */
	0x01d9, 0x01da,	/* Ǚ, ǚ */
	0x01db, 0x01dc,	/* Ǜ, ǜ */
	0x01de, 0x01df,	/* Ǟ, ǟ */
	0x01e0, 0x01e1,	/* Ǡ, ǡ */
	0x01e2, 0x01e3,	/* Ǣ, ǣ */
	0x01e4, 0x01e5,	/* Ǥ, ǥ */
	0x01e6, 0x01e7,	/* Ǧ, ǧ */
	0x01e8, 0x01e9,	/* Ǩ, ǩ */
	0x01ea, 0x01eb,	/* Ǫ, ǫ */
	0x01ec, 0x01ed,	/* Ǭ, ǭ */
	0x01ee, 0x01ef,	/* Ǯ, ǯ */
	0x01f1, 0x01f3,	/* DZ, dz */
	0x01f2, 0x01f3,	/* Dz, dz */
	0x01f4, 0x01f5,	/* Ǵ, ǵ */
	0x01f6, 0x0195,	/* Ƕ, ƕ */
	0x01f7, 0x01bf,	/* Ƿ, ƿ */
	0x01f8, 0x01f9,	/* Ǹ, ǹ */
	0x01fa, 0x01fb,	/* Ǻ, ǻ */
	0x01fc, 0x01fd,	/* Ǽ, ǽ */
	0x01fe, 0x01ff,	/* Ǿ, ǿ */
	0x0200, 0x0201,	/* Ȁ, ȁ */
	0x0202, 0x0203,	/* Ȃ, ȃ */
	0x0204, 0x0205,	/* Ȅ, ȅ */
	0x0206, 0x0207,	/* Ȇ, ȇ */
	0x0208, 0x0209,	/* Ȉ, ȉ */
	0x020a, 0x020b,	/* Ȋ, ȋ */
	0x020c, 0x020d,	/* Ȍ, ȍ */
	0x020e, 0x020f,	/* Ȏ, ȏ */
	0x0210, 0x0211,	/* Ȑ, ȑ */
	0x0212, 0x0213,	/* Ȓ, ȓ */
	0x0214, 0x0215,	/* Ȕ, ȕ */
	0x0216, 0x0217,	/* Ȗ, ȗ */
	0x0218, 0x0219,	/* Ș, ș */
	0x021a, 0x021b,	/* Ț, ț */
	0x021c, 0x021d,	/* Ȝ, ȝ */
	0x021e, 0x021f,	/* Ȟ, ȟ */
	0x0220, 0x019e,	/* Ƞ, ƞ */
	0x0222, 0x0223,	/* Ȣ, ȣ */
	0x0224, 0x0225,	/* Ȥ, ȥ */
	0x0226, 0x0227,	/* Ȧ, ȧ */
	0x0228, 0x0229,	/* Ȩ, ȩ */
	0x022a, 0x022b,	/* Ȫ, ȫ */
	0x022c, 0x022d,	/* Ȭ, ȭ */
	0x022e, 0x022f,	/* Ȯ, ȯ */
	0x0230, 0x0231,	/* Ȱ, ȱ */
	0x0232, 0x0233,	/* Ȳ, ȳ */
	0x023a, 0x0000,	/* Ⱥ, <nil> */
	0x023b, 0x023c,	/* Ȼ, ȼ */
	0x023d, 0x019a,	/* Ƚ, ƚ */
	0x023e, 0x0000,	/* Ⱦ, <nil> */
	0x0241, 0x0294,	/* Ɂ, ʔ */
	0x0386, 0x03ac,	/* Ά, ά */
	0x038c, 0x03cc,	/* Ό, ό */
	0x03d2, 0x0000,	/* ϒ, <nil> */
	0x03d3, 0x0000,	/* ϓ, <nil> */
	0x03d4, 0x0000,	/* ϔ, <nil> */
	0x03d8, 0x03d9,	/* Ϙ, ϙ */
	0x03da, 0x03db,	/* Ϛ, ϛ */
	0x03dc, 0x03dd,	/* Ϝ, ϝ */
	0x03de, 0x03df,	/* Ϟ, ϟ */
	0x03e0, 0x03e1,	/* Ϡ, ϡ */
	0x03e2, 0x03e3,	/* Ϣ, ϣ */
	0x03e4, 0x03e5,	/* Ϥ, ϥ */
	0x03e6, 0x03e7,	/* Ϧ, ϧ */
	0x03e8, 0x03e9,	/* Ϩ, ϩ */
	0x03ea, 0x03eb,	/* Ϫ, ϫ */
	0x03ec, 0x03ed,	/* Ϭ, ϭ */
	0x03ee, 0x03ef,	/* Ϯ, ϯ */
	0x03f4, 0x03b8,	/* ϴ, θ */
	0x03f7, 0x03f8,	/* Ϸ, ϸ */
	0x03f9, 0x03f2,	/* Ϲ, ϲ */
	0x03fa, 0x03fb,	/* Ϻ, ϻ */
	0x03fd, 0x0000,	/* Ͻ, <nil> */
	0x03fe, 0x0000,	/* Ͼ, <nil> */
	0x03ff, 0x0000,	/* Ͽ, <nil> */
	0x0460, 0x0461,	/* Ѡ, ѡ */
	0x0462, 0x0463,	/* Ѣ, ѣ */
	0x0464, 0x0465,	/* Ѥ, ѥ */
	0x0466, 0x0467,	/* Ѧ, ѧ */
	0x0468, 0x0469,	/* Ѩ, ѩ */
	0x046a, 0x046b,	/* Ѫ, ѫ */
	0x046c, 0x046d,	/* Ѭ, ѭ */
	0x046e, 0x046f,	/* Ѯ, ѯ */
	0x0470, 0x0471,	/* Ѱ, ѱ */
	0x0472, 0x0473,	/* Ѳ, ѳ */
	0x0474, 0x0475,	/* Ѵ, ѵ */
	0x0476, 0x0477,	/* Ѷ, ѷ */
	0x0478, 0x0479,	/* Ѹ, ѹ */
	0x047a, 0x047b,	/* Ѻ, ѻ */
	0x047c, 0x047d,	/* Ѽ, ѽ */
	0x047e, 0x047f,	/* Ѿ, ѿ */
	0x0480, 0x0481,	/* Ҁ, ҁ */
	0x048a, 0x048b,	/* Ҋ, ҋ */
	0x048c, 0x048d,	/* Ҍ, ҍ */
	0x048e, 0x048f,	/* Ҏ, ҏ */
	0x0490, 0x0491,	/* Ґ, ґ */
	0x0492, 0x0493,	/* Ғ, ғ */
	0x0494, 0x0495,	/* Ҕ, ҕ */
	0x0496, 0x0497,	/* Җ, җ */
	0x0498, 0x0499,	/* Ҙ, ҙ */
	0x049a, 0x049b,	/* Қ, қ */
	0x049c, 0x049d,	/* Ҝ, ҝ */
	0x049e, 0x049f,	/* Ҟ, ҟ */
	0x04a0, 0x04a1,	/* Ҡ, ҡ */
	0x04a2, 0x04a3,	/* Ң, ң */
	0x04a4, 0x04a5,	/* Ҥ, ҥ */
	0x04a6, 0x04a7,	/* Ҧ, ҧ */
	0x04a8, 0x04a9,	/* Ҩ, ҩ */
	0x04aa, 0x04ab,	/* Ҫ, ҫ */
	0x04ac, 0x04ad,	/* Ҭ, ҭ */
	0x04ae, 0x04af,	/* Ү, ү */
	0x04b0, 0x04b1,	/* Ұ, ұ */
	0x04b2, 0x04b3,	/* Ҳ, ҳ */
	0x04b4, 0x04b5,	/* Ҵ, ҵ */
	0x04b6, 0x04b7,	/* Ҷ, ҷ */
	0x04b8, 0x04b9,	/* Ҹ, ҹ */
	0x04ba, 0x04bb,	/* Һ, һ */
	0x04bc, 0x04bd,	/* Ҽ, ҽ */
	0x04be, 0x04bf,	/* Ҿ, ҿ */
	0x04c0, 0x0000,	/* Ӏ, <nil> */
	0x04c1, 0x04c2,	/* Ӂ, ӂ */
	0x04c3, 0x04c4,	/* Ӄ, ӄ */
	0x04c5, 0x04c6,	/* Ӆ, ӆ */
	0x04c7, 0x04c8,	/* Ӈ, ӈ */
	0x04c9, 0x04ca,	/* Ӊ, ӊ */
	0x04cb, 0x04cc,	/* Ӌ, ӌ */
	0x04cd, 0x04ce,	/* Ӎ, ӎ */
	0x04d0, 0x04d1,	/* Ӑ, ӑ */
	0x04d2, 0x04d3,	/* Ӓ, ӓ */
	0x04d4, 0x04d5,	/* Ӕ, ӕ */
	0x04d6, 0x04d7,	/* Ӗ, ӗ */
	0x04d8, 0x04d9,	/* Ә, ә */
	0x04da, 0x04db,	/* Ӛ, ӛ */
	0x04dc, 0x04dd,	/* Ӝ, ӝ */
	0x04de, 0x04df,	/* Ӟ, ӟ */
	0x04e0, 0x04e1,	/* Ӡ, ӡ */
	0x04e2, 0x04e3,	/* Ӣ, ӣ */
	0x04e4, 0x04e5,	/* Ӥ, ӥ */
	0x04e6, 0x04e7,	/* Ӧ, ӧ */
	0x04e8, 0x04e9,	/* Ө, ө */
	0x04ea, 0x04eb,	/* Ӫ, ӫ */
	0x04ec, 0x04ed,	/* Ӭ, ӭ */
	0x04ee, 0x04ef,	/* Ӯ, ӯ */
	0x04f0, 0x04f1,	/* Ӱ, ӱ */
	0x04f2, 0x04f3,	/* Ӳ, ӳ */
	0x04f4, 0x04f5,	/* Ӵ, ӵ */
	0x04f6, 0x04f7,	/* Ӷ, ӷ */
	0x04f8, 0x04f9,	/* Ӹ, ӹ */
	0x0500, 0x0501,	/* Ԁ, ԁ */
	0x0502, 0x0503,	/* Ԃ, ԃ */
	0x0504, 0x0505,	/* Ԅ, ԅ */
	0x0506, 0x0507,	/* Ԇ, ԇ */
	0x0508, 0x0509,	/* Ԉ, ԉ */
	0x050a, 0x050b,	/* Ԋ, ԋ */
	0x050c, 0x050d,	/* Ԍ, ԍ */
	0x050e, 0x050f,	/* Ԏ, ԏ */
	0x1e00, 0x1e01,	/* Ḁ, ḁ */
	0x1e02, 0x1e03,	/* Ḃ, ḃ */
	0x1e04, 0x1e05,	/* Ḅ, ḅ */
	0x1e06, 0x1e07,	/* Ḇ, ḇ */
	0x1e08, 0x1e09,	/* Ḉ, ḉ */
	0x1e0a, 0x1e0b,	/* Ḋ, ḋ */
	0x1e0c, 0x1e0d,	/* Ḍ, ḍ */
	0x1e0e, 0x1e0f,	/* Ḏ, ḏ */
	0x1e10, 0x1e11,	/* Ḑ, ḑ */
	0x1e12, 0x1e13,	/* Ḓ, ḓ */
	0x1e14, 0x1e15,	/* Ḕ, ḕ */
	0x1e16, 0x1e17,	/* Ḗ, ḗ */
	0x1e18, 0x1e19,	/* Ḙ, ḙ */
	0x1e1a, 0x1e1b,	/* Ḛ, ḛ */
	0x1e1c, 0x1e1d,	/* Ḝ, ḝ */
	0x1e1e, 0x1e1f,	/* Ḟ, ḟ */
	0x1e20, 0x1e21,	/* Ḡ, ḡ */
	0x1e22, 0x1e23,	/* Ḣ, ḣ */
	0x1e24, 0x1e25,	/* Ḥ, ḥ */
	0x1e26, 0x1e27,	/* Ḧ, ḧ */
	0x1e28, 0x1e29,	/* Ḩ, ḩ */
	0x1e2a, 0x1e2b,	/* Ḫ, ḫ */
	0x1e2c, 0x1e2d,	/* Ḭ, ḭ */
	0x1e2e, 0x1e2f,	/* Ḯ, ḯ */
	0x1e30, 0x1e31,	/* Ḱ, ḱ */
	0x1e32, 0x1e33,	/* Ḳ, ḳ */
	0x1e34, 0x1e35,	/* Ḵ, ḵ */
	0x1e36, 0x1e37,	/* Ḷ, ḷ */
	0x1e38, 0x1e39,	/* Ḹ, ḹ */
	0x1e3a, 0x1e3b,	/* Ḻ, ḻ */
	0x1e3c, 0x1e3d,	/* Ḽ, ḽ */
	0x1e3e, 0x1e3f,	/* Ḿ, ḿ */
	0x1e40, 0x1e41,	/* Ṁ, ṁ */
	0x1e42, 0x1e43,	/* Ṃ, ṃ */
	0x1e44, 0x1e45,	/* Ṅ, ṅ */
	0x1e46, 0x1e47,	/* Ṇ, ṇ */
	0x1e48, 0x1e49,	/* Ṉ, ṉ */
	0x1e4a, 0x1e4b,	/* Ṋ, ṋ */
	0x1e4c, 0x1e4d,	/* Ṍ, ṍ */
	0x1e4e, 0x1e4f,	/* Ṏ, ṏ */
	0x1e50, 0x1e51,	/* Ṑ, ṑ */
	0x1e52, 0x1e53,	/* Ṓ, ṓ */
	0x1e54, 0x1e55,	/* Ṕ, ṕ */
	0x1e56, 0x1e57,	/* Ṗ, ṗ */
	0x1e58, 0x1e59,	/* Ṙ, ṙ */
	0x1e5a, 0x1e5b,	/* Ṛ, ṛ */
	0x1e5c, 0x1e5d,	/* Ṝ, ṝ */
	0x1e5e, 0x1e5f,	/* Ṟ, ṟ */
	0x1e60, 0x1e61,	/* Ṡ, ṡ */
	0x1e62, 0x1e63,	/* Ṣ, ṣ */
	0x1e64, 0x1e65,	/* Ṥ, ṥ */
	0x1e66, 0x1e67,	/* Ṧ, ṧ */
	0x1e68, 0x1e69,	/* Ṩ, ṩ */
	0x1e6a, 0x1e6b,	/* Ṫ, ṫ */
	0x1e6c, 0x1e6d,	/* Ṭ, ṭ */
	0x1e6e, 0x1e6f,	/* Ṯ, ṯ */
	0x1e70, 0x1e71,	/* Ṱ, ṱ */
	0x1e72, 0x1e73,	/* Ṳ, ṳ */
	0x1e74, 0x1e75,	/* Ṵ, ṵ */
	0x1e76, 0x1e77,	/* Ṷ, ṷ */
	0x1e78, 0x1e79,	/* Ṹ, ṹ */
	0x1e7a, 0x1e7b,	/* Ṻ, ṻ */
	0x1e7c, 0x1e7d,	/* Ṽ, ṽ */
	0x1e7e, 0x1e7f,	/* Ṿ, ṿ */
	0x1e80, 0x1e81,	/* Ẁ, ẁ */
	0x1e82, 0x1e83,	/* Ẃ, ẃ */
	0x1e84, 0x1e85,	/* Ẅ, ẅ */
	0x1e86, 0x1e87,	/* Ẇ, ẇ */
	0x1e88, 0x1e89,	/* Ẉ, ẉ */
	0x1e8a, 0x1e8b,	/* Ẋ, ẋ */
	0x1e8c, 0x1e8d,	/* Ẍ, ẍ */
	0x1e8e, 0x1e8f,	/* Ẏ, ẏ */
	0x1e90, 0x1e91,	/* Ẑ, ẑ */
	0x1e92, 0x1e93,	/* Ẓ, ẓ */
	0x1e94, 0x1e95,	/* Ẕ, ẕ */
	0x1ea0, 0x1ea1,	/* Ạ, ạ */
	0x1ea2, 0x1ea3,	/* Ả, ả */
	0x1ea4, 0x1ea5,	/* Ấ, ấ */
	0x1ea6, 0x1ea7,	/* Ầ, ầ */
	0x1ea8, 0x1ea9,	/* Ẩ, ẩ */
	0x1eaa, 0x1eab,	/* Ẫ, ẫ */
	0x1eac, 0x1ead,	/* Ậ, ậ */
	0x1eae, 0x1eaf,	/* Ắ, ắ */
	0x1eb0, 0x1eb1,	/* Ằ, ằ */
	0x1eb2, 0x1eb3,	/* Ẳ, ẳ */
	0x1eb4, 0x1eb5,	/* Ẵ, ẵ */
	0x1eb6, 0x1eb7,	/* Ặ, ặ */
	0x1eb8, 0x1eb9,	/* Ẹ, ẹ */
	0x1eba, 0x1ebb,	/* Ẻ, ẻ */
	0x1ebc, 0x1ebd,	/* Ẽ, ẽ */
	0x1ebe, 0x1ebf,	/* Ế, ế */
	0x1ec0, 0x1ec1,	/* Ề, ề */
	0x1ec2, 0x1ec3,	/* Ể, ể */
	0x1ec4, 0x1ec5,	/* Ễ, ễ */
	0x1ec6, 0x1ec7,	/* Ệ, ệ */
	0x1ec8, 0x1ec9,	/* Ỉ, ỉ */
	0x1eca, 0x1ecb,	/* Ị, ị */
	0x1ecc, 0x1ecd,	/* Ọ, ọ */
	0x1ece, 0x1ecf,	/* Ỏ, ỏ */
	0x1ed0, 0x1ed1,	/* Ố, ố */
	0x1ed2, 0x1ed3,	/* Ồ, ồ */
	0x1ed4, 0x1ed5,	/* Ổ, ổ */
	0x1ed6, 0x1ed7,	/* Ỗ, ỗ */
	0x1ed8, 0x1ed9,	/* Ộ, ộ */
	0x1eda, 0x1edb,	/* Ớ, ớ */
	0x1edc, 0x1edd,	/* Ờ, ờ */
	0x1ede, 0x1edf,	/* Ở, ở */
	0x1ee0, 0x1ee1,	/* Ỡ, ỡ */
	0x1ee2, 0x1ee3,	/* Ợ, ợ */
	0x1ee4, 0x1ee5,	/* Ụ, ụ */
	0x1ee6, 0x1ee7,	/* Ủ, ủ */
	0x1ee8, 0x1ee9,	/* Ứ, ứ */
	0x1eea, 0x1eeb,	/* Ừ, ừ */
	0x1eec, 0x1eed,	/* Ử, ử */
	0x1eee, 0x1eef,	/* Ữ, ữ */
	0x1ef0, 0x1ef1,	/* Ự, ự */
	0x1ef2, 0x1ef3,	/* Ỳ, ỳ */
	0x1ef4, 0x1ef5,	/* Ỵ, ỵ */
	0x1ef6, 0x1ef7,	/* Ỷ, ỷ */
	0x1ef8, 0x1ef9,	/* Ỹ, ỹ */
	0x1f59, 0x1f51,	/* Ὑ, ὑ */
	0x1f5b, 0x1f53,	/* Ὓ, ὓ */
	0x1f5d, 0x1f55,	/* Ὕ, ὕ */
	0x1f5f, 0x1f57,	/* Ὗ, ὗ */
	0x1fbc, 0x1fb3,	/* ᾼ, ᾳ */
	0x1fcc, 0x1fc3,	/* ῌ, ῃ */
	0x1fec, 0x1fe5,	/* Ῥ, ῥ */
	0x1ffc, 0x1ff3,	/* ῼ, ῳ */
	0x2102, 0x0000,	/* ℂ, <nil> */
	0x2107, 0x0000,	/* ℇ, <nil> */
	0x210b, 0x0000,	/* ℋ, <nil> */
	0x210c, 0x0000,	/* ℌ, <nil> */
	0x210d, 0x0000,	/* ℍ, <nil> */
	0x2110, 0x0000,	/* ℐ, <nil> */
	0x2111, 0x0000,	/* ℑ, <nil> */
	0x2112, 0x0000,	/* ℒ, <nil> */
	0x2115, 0x0000,	/* ℕ, <nil> */
	0x2119, 0x0000,	/* ℙ, <nil> */
	0x211a, 0x0000,	/* ℚ, <nil> */
	0x211b, 0x0000,	/* ℛ, <nil> */
	0x211c, 0x0000,	/* ℜ, <nil> */
	0x211d, 0x0000,	/* ℝ, <nil> */
	0x2124, 0x0000,	/* ℤ, <nil> */
	0x2126, 0x03c9,	/* Ω, ω */
	0x2128, 0x0000,	/* ℨ, <nil> */
	0x212a, 0x006b,	/* K, k */
	0x212b, 0x00e5,	/* Å, å */
	0x212c, 0x0000,	/* ℬ, <nil> */
	0x212d, 0x0000,	/* ℭ, <nil> */
	0x2130, 0x0000,	/* ℰ, <nil> */
	0x2131, 0x0000,	/* ℱ, <nil> */
	0x2133, 0x0000,	/* ℳ, <nil> */
	0x213e, 0x0000,	/* ℾ, <nil> */
	0x213f, 0x0000,	/* ℿ, <nil> */
	0x2145, 0x0000,	/* ⅅ, <nil> */
	0x2c80, 0x2c81,	/* Ⲁ, ⲁ */
	0x2c82, 0x2c83,	/* Ⲃ, ⲃ */
	0x2c84, 0x2c85,	/* Ⲅ, ⲅ */
	0x2c86, 0x2c87,	/* Ⲇ, ⲇ */
	0x2c88, 0x2c89,	/* Ⲉ, ⲉ */
	0x2c8a, 0x2c8b,	/* Ⲋ, ⲋ */
	0x2c8c, 0x2c8d,	/* Ⲍ, ⲍ */
	0x2c8e, 0x2c8f,	/* Ⲏ, ⲏ */
	0x2c90, 0x2c91,	/* Ⲑ, ⲑ */
	0x2c92, 0x2c93,	/* Ⲓ, ⲓ */
	0x2c94, 0x2c95,	/* Ⲕ, ⲕ */
	0x2c96, 0x2c97,	/* Ⲗ, ⲗ */
	0x2c98, 0x2c99,	/* Ⲙ, ⲙ */
	0x2c9a, 0x2c9b,	/* Ⲛ, ⲛ */
	0x2c9c, 0x2c9d,	/* Ⲝ, ⲝ */
	0x2c9e, 0x2c9f,	/* Ⲟ, ⲟ */
	0x2ca0, 0x2ca1,	/* Ⲡ, ⲡ */
	0x2ca2, 0x2ca3,	/* Ⲣ, ⲣ */
	0x2ca4, 0x2ca5,	/* Ⲥ, ⲥ */
	0x2ca6, 0x2ca7,	/* Ⲧ, ⲧ */
	0x2ca8, 0x2ca9,	/* Ⲩ, ⲩ */
	0x2caa, 0x2cab,	/* Ⲫ, ⲫ */
	0x2cac, 0x2cad,	/* Ⲭ, ⲭ */
	0x2cae, 0x2caf,	/* Ⲯ, ⲯ */
	0x2cb0, 0x2cb1,	/* Ⲱ, ⲱ */
	0x2cb2, 0x2cb3,	/* Ⲳ, ⲳ */
	0x2cb4, 0x2cb5,	/* Ⲵ, ⲵ */
	0x2cb6, 0x2cb7,	/* Ⲷ, ⲷ */
	0x2cb8, 0x2cb9,	/* Ⲹ, ⲹ */
	0x2cba, 0x2cbb,	/* Ⲻ, ⲻ */
	0x2cbc, 0x2cbd,	/* Ⲽ, ⲽ */
	0x2cbe, 0x2cbf,	/* Ⲿ, ⲿ */
	0x2cc0, 0x2cc1,	/* Ⳁ, ⳁ */
	0x2cc2, 0x2cc3,	/* Ⳃ, ⳃ */
	0x2cc4, 0x2cc5,	/* Ⳅ, ⳅ */
	0x2cc6, 0x2cc7,	/* Ⳇ, ⳇ */
	0x2cc8, 0x2cc9,	/* Ⳉ, ⳉ */
	0x2cca, 0x2ccb,	/* Ⳋ, ⳋ */
	0x2ccc, 0x2ccd,	/* Ⳍ, ⳍ */
	0x2cce, 0x2ccf,	/* Ⳏ, ⳏ */
	0x2cd0, 0x2cd1,	/* Ⳑ, ⳑ */
	0x2cd2, 0x2cd3,	/* Ⳓ, ⳓ */
	0x2cd4, 0x2cd5,	/* Ⳕ, ⳕ */
	0x2cd6, 0x2cd7,	/* Ⳗ, ⳗ */
	0x2cd8, 0x2cd9,	/* Ⳙ, ⳙ */
	0x2cda, 0x2cdb,	/* Ⳛ, ⳛ */
	0x2cdc, 0x2cdd,	/* Ⳝ, ⳝ */
	0x2cde, 0x2cdf,	/* Ⳟ, ⳟ */
	0x2ce0, 0x2ce1,	/* Ⳡ, ⳡ */
	0x2ce2, 0x2ce3,	/* Ⳣ, ⳣ */

};

static
Rune	__totitle1[] = 
{
	0x01C6, 0x01C5,	/* dž, Dž */
	0x01C5, 0x01C5,	/* Dž, Dž */
	0x01C9, 0x01C8,	/* lj, Lj */
	0x01C8, 0x01C8,	/* Lj, Lj */
	0x01CC, 0x01CB,	/* nj, Nj */
	0x01CB, 0x01CB,	/* Nj, Nj */
	0x01F3, 0x01F2,	/* dz, Dz */
	0x01F2, 0x01F2,	/* Dz, Dz */
	0x1F80, 0x1F88,	/* ᾀ, ᾈ */
	0x1F81, 0x1F89,	/* ᾁ, ᾉ */
	0x1F82, 0x1F8A,	/* ᾂ, ᾊ */
	0x1F83, 0x1F8B,	/* ᾃ, ᾋ */
	0x1F84, 0x1F8C,	/* ᾄ, ᾌ */
	0x1F85, 0x1F8D,	/* ᾅ, ᾍ */
	0x1F86, 0x1F8E,	/* ᾆ, ᾎ */
	0x1F87, 0x1F8F,	/* ᾇ, ᾏ */
	0x1F90, 0x1F98,	/* ᾐ, ᾘ */
	0x1F91, 0x1F99,	/* ᾑ, ᾙ */
	0x1F92, 0x1F9A,	/* ᾒ, ᾚ */
	0x1F93, 0x1F9B,	/* ᾓ, ᾛ */
	0x1F94, 0x1F9C,	/* ᾔ, ᾜ */
	0x1F95, 0x1F9D,	/* ᾕ, ᾝ */
	0x1F96, 0x1F9E,	/* ᾖ, ᾞ */
	0x1F97, 0x1F9F,	/* ᾗ, ᾟ */
	0x1FA0, 0x1FA8,	/* ᾠ, ᾨ */
	0x1FA1, 0x1FA9,	/* ᾡ, ᾩ */
	0x1FA2, 0x1FAA,	/* ᾢ, ᾪ */
	0x1FA3, 0x1FAB,	/* ᾣ, ᾫ */
	0x1FA4, 0x1FAC,	/* ᾤ, ᾬ */
	0x1FA5, 0x1FAD,	/* ᾥ, ᾭ */
	0x1FA6, 0x1FAE,	/* ᾦ, ᾮ */
	0x1FA7, 0x1FAF,	/* ᾧ, ᾯ */
	0x1FB3, 0x1FBC,	/* ᾳ, ᾼ */
	0x1FC3, 0x1FCC,	/* ῃ, ῌ */
	0x1FF3, 0x1FFC,	/* ῳ, ῼ */
};

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 15:33           ` erik quanstrom
@ 2006-07-28 17:52             ` Micah Stetson
  2006-07-28 18:19               ` erik quanstrom
  0 siblings, 1 reply; 15+ messages in thread
From: Micah Stetson @ 2006-07-28 17:52 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

> in addition, one would need to change the string from
>         "`^#*[]=|\\?${}()'<>&;"         (char*)
> to
>         L"`^#*[]=|\\?${}()'<>&;"        (Rune*)
> i was trying to avoid that.  i think it would make p9p harder.
> (i dont trust gcc with L"".)

No, utfrune finds a rune in a UTF-8 string (char *).  R is already a
Rune (even though it's declared int), so nothing needs to change,
except to replace strchr with utfrune.  Utfrune starts like this:

char*
utfrune(char *s, long c)
{
	...
	if(c < Runesync)		/* not part of utf sequence */
		return strchr(s, c);
	...

Which is exactly what you were doing (Runesync == 0x80).

Micah


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 17:52             ` Micah Stetson
@ 2006-07-28 18:19               ` erik quanstrom
  2006-07-28 19:16                 ` Micah Stetson
  0 siblings, 1 reply; 15+ messages in thread
From: erik quanstrom @ 2006-07-28 18:19 UTC (permalink / raw)
  To: 9fans

On Fri Jul 28 13:26:14 CDT 2006, micah@stetsonnet.org wrote:
> > in addition, one would need to change the string from
> >         "`^#*[]=|\\?${}()'<>&;"         (char*)
> > to
> >         L"`^#*[]=|\\?${}()'<>&;"        (Rune*)
> > i was trying to avoid that.  i think it would make p9p harder.
> > (i dont trust gcc with L"".)
>
> No, utfrune finds a rune in a UTF-8 string (char *).  R is already a
> Rune (even though it's declared int), so nothing needs to change,

you're right about this.  but why obfuscate the situation with Runes?
the only characters that rc will treat as special are us-ascii -- that is
< 0x80.

- erik

> except to replace strchr with utfrune.  Utfrune starts like this:
>
> char*
> utfrune(char *s, long c)
> {
> 	...
> 	if(c < Runesync)		/* not part of utf sequence */
> 		return strchr(s, c);
> 	...
>
> Which is exactly what you were doing (Runesync == 0x80).


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 18:19               ` erik quanstrom
@ 2006-07-28 19:16                 ` Micah Stetson
  0 siblings, 0 replies; 15+ messages in thread
From: Micah Stetson @ 2006-07-28 19:16 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

> you're right about this.  but why obfuscate the situation with Runes?
> the only characters that rc will treat as special are us-ascii -- that is
> < 0x80.

If r weren't a Rune, strchr would work as expected and you wouldn't
need the test for 0x80 (also, it would presumably be named c and not
r).  The function deals with Runes, not chars.  Isn't it less
obfuscated to do it explicitly?  I'm not suggesting you introduce
Runes where they aren't already, just that there's a library function
that does what you want with the Runes you've already got.

Micah


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [9fans] quote file name
  2006-07-28 13:23       ` "Nils O. Selåsdal"
@ 2006-07-28 19:37         ` geoff
  0 siblings, 0 replies; 15+ messages in thread
From: geoff @ 2006-07-28 19:37 UTC (permalink / raw)
  To: 9fans

> Surly the only space that needs concern is the "ascii"/U+0020 space,
> as that's used as a separator, not all the other unicode "space"
> characters.  ?

rc also treats tab and newline specially, so ascii space is not the
only whitespace character that needs quoting.

; grep -n '\\t' *
lex.c:11: 	return !strchr("\n \t#;&|^$=`'{}()<>", c) && c!=EOF;
lex.c:118: 		if(c==' ' || c=='\t')
simple.c:246: 	while(*s==' ' || *s=='\t' || *s=='\n') s++;



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2006-07-28 19:37 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-07-09 10:24 [9fans] quote file name arisawa
2006-07-09 10:53 ` quanstro
2006-07-10  0:46   ` quanstro
2006-07-28 12:41     ` arisawa
2006-07-28 12:48       ` erik quanstrom
2006-07-28 15:09         ` Micah Stetson
2006-07-28 15:33           ` erik quanstrom
2006-07-28 17:52             ` Micah Stetson
2006-07-28 18:19               ` erik quanstrom
2006-07-28 19:16                 ` Micah Stetson
2006-07-28 15:26         ` arisawa
2006-07-28 15:49           ` erik quanstrom
2006-07-28 15:51           ` erik quanstrom
2006-07-28 13:23       ` "Nils O. Selåsdal"
2006-07-28 19:37         ` geoff

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).