/*
 *	mkf_ucs4_to_georgian_ps.table
 */

#ifndef  __MKF_UCS4_TO_GEORGIAN_PS_TABLE__
#define  __MKF_UCS4_TO_GEORGIAN_PS_TABLE__


#include  <stdio.h>			/* NULL */
#include  <kiklib/kik_types.h>		/* u_xxx */


#ifdef  REMOVE_MAPPING_TABLE

#define  CONV_UCS4_TO_GEORGIAN_PS(ch)  0x0

#else

typedef struct ucs4_to_georgian_ps_range
{
	u_int32_t  beg ;
	u_int32_t  end ;

} ucs4_to_georgian_ps_range_t ;

typedef struct ucs4_to_georgian_ps_table
{
	u_int8_t *  table ;
	ucs4_to_georgian_ps_range_t *  range ;

} ucs4_to_georgian_ps_table_t ;

static u_int8_t ucs4_to_georgian_ps_table_0[] =
{
	/* 0x80 */
	0x80 ,
	0x81 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x8d ,
	0x8e ,
	0x8f ,

	/* 0x90 */
	0x90 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x9d ,
	0x9e ,
	0x00 ,

	/* 0xa0 */
	0xa0 ,
	0xa1 ,
	0xa2 ,
	0xa3 ,
	0xa4 ,
	0xa5 ,
	0xa6 ,
	0xa7 ,
	0xa8 ,
	0xa9 ,
	0xaa ,
	0xab ,
	0xac ,
	0xad ,
	0xae ,
	0xaf ,

	/* 0xb0 */
	0xb0 ,
	0xb1 ,
	0xb2 ,
	0xb3 ,
	0xb4 ,
	0xb5 ,
	0xb6 ,
	0xb7 ,
	0xb8 ,
	0xb9 ,
	0xba ,
	0xbb ,
	0xbc ,
	0xbd ,
	0xbe ,
	0xbf ,

	/* 0xc0 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0xd0 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0xe0 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0xe6 ,
	0xe7 ,
	0xe8 ,
	0xe9 ,
	0xea ,
	0xeb ,
	0xec ,
	0xed ,
	0xee ,
	0xef ,

	/* 0xf0 */
	0xf0 ,
	0xf1 ,
	0xf2 ,
	0xf3 ,
	0xf4 ,
	0xf5 ,
	0xf6 ,
	0xf7 ,
	0xf8 ,
	0xf9 ,
	0xfa ,
	0xfb ,
	0xfc ,
	0xfd ,
	0xfe ,
	0xff ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_0 =
{
	0x80 , 0xff
} ;

static u_int8_t ucs4_to_georgian_ps_table_1[] =
{
	/* 0x152 */
	0x8c ,
	0x9c ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x8a ,
	0x9a ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0x170 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x9f ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0x180 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0x190 */
	0x00 ,
	0x00 ,

	/* 0x192 */
	0x83 ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_1 =
{
	0x152 , 0x192
} ;

static u_int8_t ucs4_to_georgian_ps_table_2[] =
{
	/* 0x2c6 */
	0x88 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,

	/* 0x2d0 */
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x98 ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_2 =
{
	0x2c6 , 0x2dc
} ;

static u_int8_t ucs4_to_georgian_ps_table_10[] =
{
	/* 0x10d0 */
	0xc0 ,
	0xc1 ,
	0xc2 ,
	0xc3 ,
	0xc4 ,
	0xc5 ,
	0xc6 ,
	0xc8 ,
	0xc9 ,
	0xca ,
	0xcb ,
	0xcc ,
	0xcd ,
	0xcf ,
	0xd0 ,
	0xd1 ,

	/* 0x10e0 */
	0xd2 ,
	0xd3 ,
	0xd4 ,
	0xd6 ,
	0xd7 ,
	0xd8 ,
	0xd9 ,
	0xda ,
	0xdb ,
	0xdc ,
	0xdd ,
	0xde ,
	0xdf ,
	0xe0 ,
	0xe1 ,
	0xe3 ,

	/* 0x10f0 */
	0xe4 ,
	0xc7 ,
	0xce ,
	0xd5 ,
	0xe2 ,
	0xe5 ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_10 =
{
	0x10d0 , 0x10f5
} ;

static u_int8_t ucs4_to_georgian_ps_table_20[] =
{
	/* 0x2013 */
	0x96 ,
	0x97 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x91 ,
	0x92 ,
	0x82 ,
	0x00 ,
	0x93 ,
	0x94 ,
	0x84 ,
	0x00 ,
	0x86 ,
	0x87 ,
	0x95 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x85 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x89 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x00 ,
	0x8b ,
	0x9b ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_20 =
{
	0x2013 , 0x203a
} ;

static u_int8_t ucs4_to_georgian_ps_table_21[] =
{
	/* 0x2122 */
	0x99 ,
} ;

static ucs4_to_georgian_ps_range_t ucs4_to_georgian_ps_range_21 =
{
	0x2122 , 0x2122
} ;

static u_int32_t  ucs4_to_georgian_ps_beg = 0x80 ;

static u_int32_t  ucs4_to_georgian_ps_end = 0x2122 ;

static ucs4_to_georgian_ps_table_t ucs4_to_georgian_ps_tables[] =
{
	{ ucs4_to_georgian_ps_table_0 , &ucs4_to_georgian_ps_range_0 } ,
	{ ucs4_to_georgian_ps_table_1 , &ucs4_to_georgian_ps_range_1 } ,
	{ ucs4_to_georgian_ps_table_2 , &ucs4_to_georgian_ps_range_2 } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ ucs4_to_georgian_ps_table_10 , &ucs4_to_georgian_ps_range_10 } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ NULL , NULL , } ,
	{ ucs4_to_georgian_ps_table_20 , &ucs4_to_georgian_ps_range_20 } ,
	{ ucs4_to_georgian_ps_table_21 , &ucs4_to_georgian_ps_range_21 } ,
} ;

/* 'i' is UCS4(32bit) */
#define  HI(i)  ( ((i)>>8) & 0xffffff )
#define  LO(i)  ( (i) & 0xff )

static u_int8_t
CONV_UCS4_TO_GEORGIAN_PS(
	u_int32_t  ch
	)
{
	u_int32_t  hi_ch ;
	u_int32_t  hi_beg ;
	u_int8_t *  table ;
	ucs4_to_georgian_ps_range_t *  range ;

	if( ch < ucs4_to_georgian_ps_beg || ucs4_to_georgian_ps_end < ch)
	{
		return  0 ;
	}
	
	hi_ch = HI(ch) ;
	hi_beg = HI(ucs4_to_georgian_ps_beg) ;
	
	if( ! ( table = ucs4_to_georgian_ps_tables[ hi_ch - hi_beg].table))
	{
		return  0 ;
	}

	range = ucs4_to_georgian_ps_tables[ hi_ch - hi_beg].range ;
	
	if( ch < range->beg || range->end < ch)
	{
		return  0 ;
	}

	return  table[ LO(ch) - LO(range->beg)] ;
}

#undef  HI
#undef  LO

#endif	/* REMOVE_MAPPING_TABLE */


#endif
