#define MAX_COMPOSE_CHARS 14
#define MAX_COMPOSE_PRE 60
static const char *compose_chars =
"`'~^,/\"AaPpSs!?0123CcRr-_<>Xx.=Yy |EeIiOoUu+NnLlgDd:*TtMmVv";
static const char compose_lookups[MAX_COMPOSE_PRE][MAX_COMPOSE_CHARS] =
{
{'A','E','I','O','U','a','e','i','o','u', 0, 0, 0, 0},
{' ','A','E','I','O','U','Y','a','e','i','o','u','y', 39},
{'A','N','O','a','n','o', 0, 0, 0, 0, 0, 0, 0, 0},
{'A','E','I','O','U','a','e','i','o','u','0','1','2','3'},
{' ','C','c',',', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'O','o','u','U', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','A','E','I','O','U','a','e','i','o','u','y','\"', 0},
{'E','`', 39,'~','^','"','o','*','-','>','_', 0, 0, 0},
{'e','`', 39,'~','^','"','o','*','-','>','_', 0, 0, 0},
{' ','G','!', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','g','!', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'S','!','O','0','A', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'s','!','a','1','2','3','0','o', 0, 0, 0, 0, 0, 0},
{' ','!', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','?', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'^','*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','2','4','^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','4','^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'O',',','$','|', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'|','o',',','/','$', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'O', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','+',',','-','^',':', 0, 0, 0, 0, 0, 0, 0, 0},
{'_','^', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'<', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'>', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'O','X', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','o','x', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','^','.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'Y','y', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'=', 39,'-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'=', 39,'"','$','-', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{' ','c','|','P','p','^','-', 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','"','>', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','"','>', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','"','>', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','"','>', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','~','"','/','C','R','-','>','A','a', 0, 0},
{' ','A','a','x','-','`', 39,'^','~','"','/','>','_', 0},
{'`', 39,'^','"','>', 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'`', 39,'^','"',' ','>', 0, 0, 0, 0, 0, 0, 0, 0},
{'-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'~','-','O', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'~','-','o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'$','=','-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'$','=','-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'$', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'E','-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'e','-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'-', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'m','M','a','A', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'H', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'h', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'U', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'u', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'B', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{'b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
static const unsigned char compose_keys[MAX_COMPOSE_PRE][MAX_COMPOSE_CHARS] =
{
{192,200,204,210,217,224,232,236,242,249, 0, 0, 0, 0},
{180,193,201,205,211,218,221,225,233,237,243,250,253,180},
{195,209,213,227,241,245, 0, 0, 0, 0, 0, 0, 0, 0},
{194,202,206,212,219,226,234,238,244,251,176,185,178,179},
{184,199,231,184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{216,248,181,181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{168,196,203,207,214,220,228,235,239,246,252,255,168, 0},
{198,192,193,195,194,196,197,197,195,194,170, 0, 0, 0},
{230,224,225,227,226,228,229,229,227,226,170, 0, 0, 0},
{222,182,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{254,182,182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{167,167,167,186,170, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{223,167,170,185,178,179,186,167, 0, 0, 0, 0, 0, 0},
{161,161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{191,191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{176,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{185,189,188,185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{178,178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{179,190,179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{169,199,162,162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{162,169,231,162,162, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{173,177,172,173,175,247, 0, 0, 0, 0, 0, 0, 0, 0},
{175,175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{164,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{215,164,215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{183,183,183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{165,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{165,221,165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{165,253,255,165,165, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{166,162,166,222,254,166,163, 0, 0, 0, 0, 0, 0, 0},
{200,201,202,203,202, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{232,233,234,235,234, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{204,205,206,207,206, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{236,237,238,239,238, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{210,211,212,213,214,216,169,174,213,212,197,229, 0, 0},
{176,197,229,164,245,242,243,244,245,246,248,244,186, 0},
{217,218,219,220,219, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{249,250,251,252,181,251, 0, 0, 0, 0, 0, 0, 0, 0},
{177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{209,209,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{241,241,172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{163,163,163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{163,163,163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{176,208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{176,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{181,181,229,197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
static KeySym compose_key = 0;
static int compose_mask = 0;