www.pudn.com > tableq.rar > bld_uni_table.c


/*-----------------------------------------------*\ 
|  GB2312 unicode table constructor               | 
|  author: Spark Song                             ||  file  : build_uni_table.c                      | 
|  date  : 2005-11-18                             | 
\*-----------------------------------------------*/ 
 
#include  
#include  
 
 
void UnicodeToGB2312(unsigned char* pOut,unsigned short uData); 
void Gb2312ToUnicode(unsigned short* pOut,unsigned char *gbBuffer); 
void construct_unicode_table(); 
 
int main(int argc, char *argv[]) 
{ 
	construct_unicode_table(); 
	return 0; 
} 
 
void construct_unicode_table() 
{ 
    #define GB2312_MATRIX   (94) 
    #define DELTA           (0xA0) 
    #define FONT_ROW_BEGIN (16  + DELTA) 
    #define FONT_ROW_END   (87 + DELTA) 
    #define FONT_COL_BEGIN (1  + DELTA) 
    #define FONT_COL_END   (GB2312_MATRIX + DELTA) 
    #define FONT_TOTAL     (72 * GB2312_MATRIX) 
 
    int i, j; 
    unsigned char   chr[2]; 
    unsigned short  uni; 
    unsigned short  data[FONT_TOTAL] = {0}; 
    int index = 0; 
    unsigned short buf; 
 
    //生成unicode码表 
    for (i=FONT_ROW_BEGIN; i<=FONT_ROW_END; i++) 
        for(j=FONT_COL_BEGIN; j<=FONT_COL_END; j++) 
        { 
            chr[0] = i;  
            chr[1] = j; 
            Gb2312ToUnicode(&uni, chr); 
            data[index] = uni; index++; 
        } 
 
 
   //排个序,以后检索的时候就可以用binary-search了 
    for (i=0;idata[j]) 
            { 
                buf = data[i];  
                data[i] = data[j]; 
                data[j] = buf; 
            }             
     
    //输出到STD_OUT 
    printf("const unsigned short uni_table[]={\n"); 
 
    for (i=0; i Row:%.2d Col:%.2d */\n",  
                uni,  
                i==index-1?" ":",", 
                chr[0], 
                chr[1], 
                chr[0] - DELTA, 
                chr[1] - DELTA 
                ); 
    } 
 
    printf("};\n"); 
    return ; 
} 
 
 
void UnicodeToGB2312(unsigned char* pOut,unsigned short uData) 
{ 
    WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(unsigned short),NULL,NULL); 
    return; 
}      
  
void Gb2312ToUnicode(unsigned short* pOut,unsigned char *gbBuffer) 
{ 
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1); 
    return; 
}