#include <stdint.h>
#include <wctype.h>
#include "iswalpha.h"

static const unsigned char alpha_idx[] = {
 2, 1, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,
17, 1,18,19,20, 1,21,22,23,24,25,26,27,28, 1,29,
30,31, 0, 0,32, 0, 0, 0, 0, 0, 0, 0,33,34, 0, 0,
35,36, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,37, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,38,
 1, 1, 1, 1,39, 1,40,41,42,43,44,45, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 1, 1, 1, 1, 1, 1, 1,46, 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, 1,47,48, 1,49,50,51,

52,53,54,55,56,57, 1,58,59,60,61,62,63, 0, 0, 0, /* 0x10000 - 0x10FFF */
64,65,66,67,68,69,70,71,72, 0,73, 0,74,75, 0, 0, /* 0x11000 - 0x11FFF */
 1, 1, 1,76,77,78, 0, 0, 0, 0, 0, 0, 0, 0, 0,79, /* 0x12000 - 0x12FFF */
 1, 1, 1, 1,80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x13000 - 0x13FFF */
 0, 0, 0, 0, 1, 1,81, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x14000 - 0x14FFF */
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x15000 - 0x15FFF */
 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,82,83, 0, 0, 0,84, /* 0x16000 - 0x16FFF */
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x17000 - 0x17FFF */
 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, /* 0x18000 - 0x18FFF */
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x19000 - 0x19FFF */
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,85, /* 0x1A000 - 0x1AFFF */
 1,86,87, 0, 0, 0, 0, 0, 0, 0, 0, 0,88, 0, 0, 0, /* 0x1B000 - 0x1BFFF */
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1C000 - 0x1CFFF */
 0, 0, 0, 0,89,90,91,92, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1D000 - 0x1DFFF */
93, 0, 0, 0, 0, 0, 0, 0,94,95, 0, 0, 0, 0,96, 0, /* 0x1E000 - 0x1EFFF */
 0,97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x1F000 - 0x1FFFF */
};

int iswalpha(wint_t wc)
{
	if (wc<0x20000U) {
        unsigned int idx = alpha_idx[wc>>8]*32;
		return (alpha_table[idx+((wc&255)>>3)]>>(wc&7))&1;
    }
	if (wc<0x3fffeU)
		return 1;
	return 0;
}

