2011年12月5日月曜日

KAKASIをCから使う。

cからkakasiを使う方法。
参考 : kakasi-2.3.4/doc/README.lib


① ソース
#include 
#include 
#include 
#include 
#include 
#define MYBUFSZ 1024
int UtfToEuc(char *str , char *outs);
int EucToUtf(char *str , char *outs);

int
main(int argc, char *argv[]){    
//--    
    char *srcStr, *dstStr;    
    char *srcStr2, *dstStr2;    
    char buffer[256];    
    int  strLen;    
    char *option[] = { "kakasi", "-JH"};   
    int ret;   
 //--   
    srcStr  = argv[1];   
    srcStr2 = srcStr;    
    UtfToEuc(srcStr,srcStr2);    
    ret = kakasi_getopt_argv(2, option);   
    if(ret == 0)
    {       
        dstStr2 = kakasi_do(srcStr2);       
        dstStr  = dstStr2;        
        printf(dstStr2);        
        if(dstStr2)
        {
            //--
            EucToUtf(dstStr2,dstStr);
            printf(dstStr);
            kakasi_free(dstStr2);
            dstStr  = NULL;
            dstStr2 = NULL;
            return 1;
        }
        else
        {
            printf("ERROR2\n");
        }
    }
    else
    {
        printf("ERROR1\n");
    }

    return 0;
}

int EucToUtf(char *str , char *outs)
{
    iconv_t ic;
    char str_in[MYBUFSZ+1];
    char str_out[MYBUFSZ+1];    char *ptr_in = str_in;
    char *ptr_out = str_out;
    size_t mybufsz = (size_t)MYBUFSZ;

    strcpy(str_in,str);
    ic = iconv_open("UTF-8","EUC-JP");
    iconv(ic, &ptr_in, &mybufsz, &ptr_out, &mybufsz);
    iconv_close(ic);
    strcpy(outs,str_out);

    return 0;
}

int UtfToEuc(char *str , char *outs)
{
    iconv_t ic;
    char str_in[MYBUFSZ+1];
    char str_out[MYBUFSZ+1];

    char *ptr_in = str_in;
    char *ptr_out = str_out;
    size_t mybufsz = (size_t)MYBUFSZ;

    strcpy(str_in,str);
    ic = iconv_open("EUC-JP","UTF-8");
    iconv(ic, &ptr_in, &mybufsz, &ptr_out, &mybufsz);
    iconv_close(ic);
    strcpy(outs,str_out);

    return 0;
}

ぶっちゃけ、Cよくわからず、適当に作った感は否めない。
今度ちゃんとCの勉強しよう。
って、いっつもも思う。


② コンパイル
$ sudo ln -s /usr/local/lib/libkakasi.so.2 /usr/lib64/libkakasi.so.2
$ gcc -lkakasi -o kakasi kakasi.c

普通にインストールしたら、/usr/local/lib/にsoファイルができた。
cから使おうとすると/usr/lib64から読もうとしていたので、
シンボリックリングを張った。


③ 実行
$./kakasi 狩野達也
かのたつや

辞書、追加しようかな。

0 件のコメント:

コメントを投稿