Mercurial > freewnn
diff Wnn/jserver/jikouho.c @ 0:bbc77ca4def5
initial import
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Thu, 13 Dec 2007 04:30:14 +0900 |
parents | |
children | 466fe6732d8d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Wnn/jserver/jikouho.c Thu Dec 13 04:30:14 2007 +0900 @@ -0,0 +1,647 @@ +/* + * $Id: jikouho.c,v 1.6 2002/05/12 22:51:16 hiroo Exp $ + */ + +/* + * FreeWnn is a network-extensible Kana-to-Kanji conversion system. + * This file is part of FreeWnn. + * + * Copyright Kyoto University Research Institute for Mathematical Sciences + * 1987, 1988, 1989, 1990, 1991, 1992 + * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999 + * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992 + * Copyright FreeWnn Project 1999, 2000, 2002 + * + * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/************************************************ + * 小文節次候補取りだし * + ************************************************/ +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <ctype.h> +#if STDC_HEADERS +# include <stdlib.h> +#endif /* STDC_HEADERS */ + +#include "commonhd.h" +#include "de_header.h" +#include "jdata.h" +#include "fzk.h" +#include "kaiseki.h" + +static struct JKT_SBN *find_jktsbn (); +static int cmp_dsd_sbn (), cnt_jkt_sbn (), get_suuji_kouho (), get_eisuu_kouho (), get_kigou_kouho (); + +static int +jkt_sbn (yomi_sno, yomi_eno, endvect, endvect1, tjktsbn, bnst_num, parent) + int yomi_sno; + int yomi_eno; + int endvect; /* 終端ベクタ */ + int endvect1; /* 終端ベクタ */ + struct JKT_SBN **tjktsbn; /* 小文節解析結果 */ + int bnst_num; + struct JKT_SBN *parent; /* 親の幹語ノード */ +{ + register int fzkcnt, ii, jktcnt; + register int i; + struct JKT_SBN *jktsbn; + struct JKT_SBN *jktsbn_top; + struct ICHBNP *ichbnpbp; + int cnt; + int gijiflag = 0; + + struct SYO_BNSETSU *getsbnsp (); + struct SYO_BNSETSU *giji_sbn; + + if (yomi_sno == yomi_eno) + return (NOTHING); + + jktcnt = 0; + if (fzk_ckvt (endvect) == NO && fzk_ckvt (endvect1) == NO) + return (NOTHING); + fzkcnt = fzk_kai (&bun[yomi_sno], &bun[yomi_eno], endvect, endvect1, &ichbnpbp); + if (fzkcnt <= 0) + return (fzkcnt); /* ERROR */ + for (ii = 0; ii < fzkcnt; ii++) + getfzkoh (ichbnpbp, ii)->offset += yomi_sno; + + jktsbn_top = 0; + + for (ii = 0; ii < fzkcnt; ii++) + { /* 辞書引き */ + i = getfzkoh (ichbnpbp, ii)->offset; + if (jmtp[i] == (struct jdata **) UN_KNOWN) + { /* もう引いた? */ + jmt_set (i); + } + } + + if ((giji_sbn = getsbnsp ()) == NO) + return (-1); /* ERROR */ + + giji_sbn->bend_m = yomi_sno; + if (getgiji (yomi_sno, yomi_eno, giji_sbn, ichbnpbp, fzkcnt, bnst_num) >= 0) + { + if ((giji_sbn->j_c == yomi_eno - 1) && (giji_sbn->hinsi_fk != katakanago_no && giji_sbn->hinsi_fk != giji_no && giji_sbn->hinsi_fk != fuzokugo_no)) + { + if (get_zen_giji (giji_sbn, &jktsbn) < 0) + return (-1); + jktsbn->parent = parent; + jktsbn->kbcnt = bnst_num; + jktsbn_top = jktsbn; + gijiflag = 1; + jktcnt = 1; + } + } + freesbn (giji_sbn); + + if ((cnt = jkt_sbn_one (yomi_sno, yomi_eno, &jktsbn_top, bnst_num, parent, ichbnpbp, fzkcnt)) < 0) + return (-1); + jktcnt += cnt; + +#ifndef NO_KANA + if (gijiflag == 0) + { /* ひらがな候補 */ + if ((jktsbn = get_hira_kouho (&jktsbn_top, yomi_sno, yomi_eno)) < (struct JKT_SBN *) 0) + return (-1); + if (jktsbn > (struct JKT_SBN *) 0) + { + jktsbn->parent = parent; + jktsbn->bend_m = yomi_sno; + jktsbn->kbcnt = bnst_num; + jktcnt++; + } + } +#endif /* NO_KANA */ + + *tjktsbn = jktsbn_top; + freeibsp (ichbnpbp); + return (jktcnt); +} + +int +jkt_sbn_one (yomi_sno, yomi_eno, jktsbn_top, bnst_num, parent, ichbnpbp, fzkcnt) + int yomi_sno; + int yomi_eno; + struct JKT_SBN **jktsbn_top; + int bnst_num; /* これまでに解析した小文節数 */ + struct JKT_SBN *parent; /* 親の幹語ノード */ + struct ICHBNP *ichbnpbp; + register int fzkcnt; +{ + register int ii, hyokaval, hyokaval0, hinsidt, jktcnt; + int hinsidt_fk; /* 複合品詞のセーブ */ + unsigned short *hinsi_buf; + struct jdata *jentptr; + register int i, /* 幹語の終わりのインデックス */ + t; + struct JKT_SBN *jktsbn; + register struct JKT_SONE *jktsone; + int ll; + struct fzkkouho *fzkptr; + + int connect_flg; + + jktcnt = 0; + + for (ii = 0; ii < fzkcnt; ii++) + { /* 付属語 */ + fzkptr = getfzkoh (ichbnpbp, ii); + i = fzkptr->offset; + jentptr = (i > yomi_eno - 1) ? (struct jdata *) NULL : (struct jdata *) C (i, yomi_eno - 1); + for (; jentptr; jentptr = jentptr->jptr) + { /* 辞書 */ + for (t = 0; t < (jentptr->kosuu); t++) + { /* 幹語 */ +#ifdef CONVERT_with_SiSheng + hyokaval = hyoka1 (jentptr->hindo[t], + (jentptr->hindo_in == 0 ? 0 : jentptr->hindo_in[t]), + diff_sisheng (jentptr->sisheng[t], jentptr->sisheng_int), yomi_eno - yomi_sno / 2 - i / 2, dic_table[jentptr->jishono].nice); +#else + hyokaval = hyoka1 (jentptr->hindo[t], (jentptr->hindo_in == 0 ? 0 : jentptr->hindo_in[t]), yomi_eno - i, yomi_eno - yomi_sno, dic_table[jentptr->jishono].nice); +#endif /* CONVERT_with_SiSheng */ + hinsidt_fk = hinsidt = jentptr->hinsi[t]; + if ((ll = wnn_get_fukugou_component_body (hinsidt_fk, &hinsi_buf)) == 0) + { + error1 ("wnn_get_fukugou_component:erroe in jkt_sbn_one.\n"); + return (-1); + } + for (; ll > 0; ll--) + { + hinsidt = *hinsi_buf; + hinsi_buf++; + /* ここから後は単純品詞だけ考えればいい */ + connect_flg = kan_ck_vector (hinsidt, fzkptr->vector); + if (!(jentptr->hindo_in && (jentptr->hindo_in[t] & 0x7f) == 0x7f) && ((jentptr->hindo[t] & 0x7f) != 0x7f) && + /*コメントアウトされた辞書エントリ */ + (connect_flg != NO || (bnst_num == 1 && kan_ck_vector (hinsidt, getfzkoh1 (ichbnpbp, ii)->vector) == WNN_CONNECT_BK))) + { + + if (bnst_num == 1) + /* endvect に接続できないものは評価値を下げる */ + hyokaval0 = (connect_flg != NO) ? hyokaval : _DIVID (hyokaval, 2); + else if (parent != 0) + { + /* 前の文節が endvect に接続できないものは、 + 評価値を下げる */ + struct JKT_SONE *tmp; + hyokaval0 = _DIVID (hyokaval, 2); + for (tmp = parent->sbn; tmp != 0; tmp = tmp->lnk_br) + { + if (tmp->status_bkwd == YES) + { + /* 実は接続できた */ + hyokaval0 = hyokaval; + break; + } + } + } + else + hyokaval0 = hyokaval; + + if ((jktsone = getjktsone ()) == NO) + return (-1); /* ERROR */ + jktsone->i_jc = i; + jktsone->v_jc = hyokaval0; + jktsone->jentptr = jentptr; + jktsone->t_jc = t; + jktsone->hinsi_fk = hinsidt_fk; + jktsone->status_bkwd = connect_flg; + if ((jktsbn = find_jktsbn (jktsbn_top, jktsone, hinsidt, yomi_eno - 1)) < (struct JKT_SBN *) 0) + return (-1); + if (jktsbn > (struct JKT_SBN *) 0) + { + jktsbn->parent = parent; + jktsbn->bend_m = yomi_sno; + jktsbn->kbcnt = bnst_num; + jktcnt++; + } + } /* 接続できる */ + } /* 単純品詞 */ + } /* 幹語 */ + } /* 辞書 */ +#if !defined(NO_KANA) && !defined(KOREAN) + /* カタカナ候補 */ + if ((jktsbn = get_kata_kouho (jktsbn_top, yomi_sno, yomi_eno, i, fzkptr->vector, getfzkoh1 (ichbnpbp, ii)->vector, ii)) < (struct JKT_SBN *) 0) + return (-1); + if (jktsbn > (struct JKT_SBN *) 0) + { + jktsbn->parent = parent; + jktsbn->bend_m = yomi_sno; + jktsbn->kbcnt = bnst_num; + jktcnt++; + } +#endif /* !defined(NO_KANA) && !defined(KOREAN) */ + } /* 付属語 */ + return (jktcnt); +} + +#if !defined(NO_KANA) && !defined(KOREAN) +/* カタカナ候補 */ +struct JKT_SBN * +get_kata_kouho (jktsbn_top, yomi_sno, yomi_eno, i_jc, vector, vector1, hyouka) + struct JKT_SBN **jktsbn_top; + int yomi_sno, yomi_eno, i_jc; + int *vector; + int *vector1; + int hyouka; +{ + struct JKT_SONE *jktsone; + int connect_flg; + + if (!isjhira (bun[i_jc]) && !BAR_CODE (bun[i_jc]) && (i_jc + 1 == yomi_eno || !isjhira (bun[i_jc + 1]))) + return ((struct JKT_SBN *) 0); + + if (i_jc != yomi_eno && !(touten (bun[i_jc])) && !(kuten (bun[i_jc]))) + { + if (kan_ck_vector (giji_no, vector) == WNN_CONNECT_BK) + { + connect_flg = WNN_CONNECT_BK; + } + else if (kan_ck_vector (giji_no, vector1) == WNN_NOT_CONNECT_BK) + { + return ((struct JKT_SBN *) 0); + } + else + { + connect_flg = WNN_NOT_CONNECT_BK; + } + if ((jktsone = getjktsone ()) == 0) + return ((struct JKT_SBN *) 0); + jktsone->i_jc = i_jc; + jktsone->jentptr = 0; + jktsone->t_jc = WNN_KATAKANA; /* カタカナ */ + jktsone->v_jc = (yomi_eno - i_jc) * KATA_HYOUKA; + jktsone->hinsi_fk = giji_no; + jktsone->status_bkwd = connect_flg; + return (find_jktsbn (jktsbn_top, jktsone, giji_no, yomi_eno - 1)); + } + else + { + return ((struct JKT_SBN *) 0); + } +} +#endif /* !defined(NO_KANA) && !defined(KOREAN) */ + +struct JKT_SBN * +get_hira_kouho (jktsbn_top, yomi_sno, yomi_eno) + struct JKT_SBN **jktsbn_top; + int yomi_sno, yomi_eno; +{ + struct JKT_SONE *jktsone; + + if ((jktsone = getjktsone ()) == 0) + return ((struct JKT_SBN *) -1); + jktsone->i_jc = yomi_sno; + jktsone->jentptr = 0; + jktsone->t_jc = WNN_HIRAGANA; /* ひらがな候補 */ +#ifdef KOREAN + jktsone->hinsi_fk = katakanago_no; /* Hangul */ +#else + jktsone->hinsi_fk = giji_no; +#endif + jktsone->v_jc = (yomi_eno - yomi_sno) * HIRA_HYOUKA; + jktsone->status_bkwd = WNN_NOT_CONNECT_BK; + return (find_jktsbn (jktsbn_top, jktsone, giji_no, yomi_eno - 1)); +} + +static struct JKT_SBN * +find_jktsbn (jktsbn, jktsone, hinsi, j_c) + struct JKT_SBN **jktsbn; + struct JKT_SONE *jktsone; + int hinsi; + int j_c; +{ + register struct JKT_SBN *sbn; + struct JKT_SBN *tsbn; + register struct JKT_SONE *sone; + int v_jc; + int kangovect; + + kangovect = ft->kango_hinsi_area[hinsi]; + sbn = *jktsbn; + if (sbn == 0 || sbn->j_c != j_c || sbn->kangovect > kangovect) + { + if ((sbn = getjktsbn ()) == NO) + return ((struct JKT_SBN *) -1); + sbn->lnk_br = *jktsbn; + *jktsbn = sbn; + sbn->j_c = j_c; + sbn->sbn = jktsone; + sbn->kangovect = kangovect; + return (sbn); + } + while (sbn != 0 && sbn->j_c == j_c) + { + if (sbn->kangovect == kangovect) + { + /* 評価値で SORT */ + v_jc = jktsone->v_jc; + sone = sbn->sbn; + if (sone == 0 || sone->v_jc < v_jc) + { + sbn->sbn = jktsone; + jktsone->lnk_br = sone; + return (0); + } + while (sone) + { + if (sone->lnk_br == 0 || sone->lnk_br->v_jc < v_jc) + { + jktsone->lnk_br = sone->lnk_br; + sone->lnk_br = jktsone; + return (0); + } + sone = sone->lnk_br; + } + } + else if (sbn->lnk_br == 0 || sbn->lnk_br->j_c != j_c || sbn->lnk_br->kangovect > kangovect) + { + if ((tsbn = getjktsbn ()) == NO) + return ((struct JKT_SBN *) -1); + tsbn->lnk_br = sbn->lnk_br; + sbn->lnk_br = tsbn; + tsbn->sbn = jktsone; + tsbn->kangovect = kangovect; + tsbn->j_c = j_c; + return (tsbn); + } + sbn = sbn->lnk_br; + } + return (NULL); +} + +/************************************************** + * jkt_get_syo : 次候補 all 取りだし 小文節 + **************************************************/ +int +#ifdef NO_FZK +jkt_get_syo (yomi_sno, yomi_eno, beginvect, endvect, endvect1, dsd_sbn) +#else +jkt_get_syo (yomi_sno, yomi_eno, beginvect, fzkchar, endvect, endvect1, dsd_sbn) +#endif /* NO_FZK */ + int yomi_sno; + int yomi_eno; + int beginvect; /* 前端ベクタ(-1:文節先頭、-2:なんでも)品詞No. */ +#ifndef NO_FZK + w_char *fzkchar; +#endif /* NO_FZK */ + int endvect; /* 終端ベクタ */ + int endvect1; /* 終端ベクタ */ + struct DSD_SBN **dsd_sbn; +{ + struct DSD_SBN *d_sbn; + struct JKT_SBN *tjktsbn = 0; /* 小文節解析結果 */ + register int cnt = 0; /* 次候補数 */ + register struct JKT_SBN *jktsbn; + struct JKT_SBN *next_sbn; + register struct JKT_SONE *sone_p; + int sbn_cnt; + int divid; + + if (c_env->fzk_fid == -1) + { + wnn_errorno = WNN_FZK_FILE_NO_LOAD; + return (-1); + } + + ft = (struct FT *) files[c_env->fzk_fid].area; + + if (jkt_sbn (yomi_sno, yomi_eno, endvect, endvect1, &tjktsbn, 1, (struct JKT_SBN *) 0) < 0) + { + init_work_areas (); + return (-1); + } + + sbn_cnt = cnt_jkt_sbn (tjktsbn); + if ((*dsd_sbn = d_sbn = get_dsd_sbn (sbn_cnt)) <= (struct DSD_SBN *) 0) + { + init_work_areas (); + return (-1); + } + for (jktsbn = tjktsbn; jktsbn != 0;) + { + next_sbn = jktsbn->lnk_br; + for (sone_p = jktsbn->sbn; sone_p != 0; sone_p = sone_p->lnk_br) + { + d_sbn->bun_m = jktsbn->bend_m; + d_sbn->bun_jc = jktsbn->j_c; + d_sbn->i_jc = sone_p->i_jc; + d_sbn->jentptr = sone_p->jentptr; + d_sbn->t_jc = sone_p->t_jc; + d_sbn->hinsi = sone_p->hinsi_fk; + d_sbn->kangovect = jktsbn->kangovect; + d_sbn->status_bkwd = sone_p->status_bkwd; + divid = get_jkt_status (jktsbn->kangovect, beginvect, +#ifndef NO_FZK + fzkchar, +#endif /* NO_FZK */ + &(jktsbn->status)); + d_sbn->v_jc = DIVID_HYOUKA (sone_p->v_jc, divid); + if (sone_p->jentptr == 0 && jktsbn->status == WNN_NOT_CONNECT) + d_sbn->status = WNN_GIJI; + else + d_sbn->status = jktsbn->status; + cnt++; + d_sbn++; + } + freejktsbn (jktsbn); + jktsbn = next_sbn; + } + qsort ((char *) *dsd_sbn, cnt, sizeof (struct DSD_SBN), cmp_dsd_sbn); + return (cnt); +} + +static int +cmp_dsd_sbn (sbn1, sbn2) + struct DSD_SBN *sbn1; + struct DSD_SBN *sbn2; +{ + return (sbn2->v_jc - sbn1->v_jc); +} + +static int +cnt_jkt_sbn (sbn) + register struct JKT_SBN *sbn; +{ + register int cnt; + cnt = 0; + while (sbn) + { + cnt += cnt_sone (sbn->sbn); + sbn = sbn->lnk_br; + } + return (cnt); +} + +int +get_zen_giji (giji_sbn, jktsbn) + struct SYO_BNSETSU *giji_sbn; + struct JKT_SBN **jktsbn; +{ + int hinsi; + hinsi = giji_sbn->hinsi_fk; + + if ((*jktsbn = getjktsbn ()) == NULL) + return (-1); + if (((*jktsbn)->sbn = getjktsone ()) == NULL) + return (-1); + + (*jktsbn)->j_c = giji_sbn->j_c; + (*jktsbn)->bend_m = giji_sbn->bend_m; + (*jktsbn)->kangovect = giji_sbn->kangovect; + (*jktsbn)->sbn->i_jc = giji_sbn->i_jc; + (*jktsbn)->sbn->v_jc = giji_sbn->v_jc; + (*jktsbn)->sbn->jentptr = 0; + (*jktsbn)->sbn->t_jc = giji_sbn->t_jc; + (*jktsbn)->sbn->hinsi_fk = giji_sbn->hinsi_fk; + (*jktsbn)->sbn->status_bkwd = giji_sbn->status_bkwd; + + if ((*jktsbn)->sbn->hinsi_fk == fuzokugo_no) + return (1); + if (hinsi == suuji_no) + return (get_suuji_kouho (*jktsbn)); + if (isascii (bun[(*jktsbn)->sbn->i_jc])) + { + if (hinsi == eisuu_no) + return (get_eisuu_kouho (*jktsbn)); + else + return (get_kigou_kouho (*jktsbn)); + } + else + { + return (1); + } +} + +static struct JKT_SONE * +cp_sone (d_sone, s_sone) + register struct JKT_SONE *d_sone, *s_sone; +{ + if ((d_sone->lnk_br = getjktsone ()) == NO) + return ((struct JKT_SONE *) -1); + d_sone = d_sone->lnk_br; + d_sone->i_jc = s_sone->i_jc; + d_sone->v_jc = s_sone->v_jc - 10; /* 第1候補より評価値を下げる */ + d_sone->jentptr = 0; + d_sone->hinsi_fk = s_sone->hinsi_fk; + d_sone->status_bkwd = s_sone->status_bkwd; + return (d_sone); +} + +/* 半角数字 */ +static int +get_suuji_kouho (jktsbn) + register struct JKT_SBN *jktsbn; +{ + register struct JKT_SONE *jktsone; + int hinsi; + int len; + + hinsi = jktsbn->sbn->t_jc; + len = jktsbn->j_c - jktsbn->sbn->i_jc; + if (isspace (bun[jktsbn->j_c]) || isjspace (bun[jktsbn->j_c])) + len--; + + if ((jktsone = cp_sone (jktsbn->sbn, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + + if (hinsi != WNN_NUM_HAN) + { + jktsone->t_jc = WNN_NUM_HAN; /* 半角数字 */ + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + if (hinsi != WNN_NUM_ZEN) + { + jktsone->t_jc = WNN_NUM_ZEN; /* 123 */ + if (len < 0 && hinsi == WNN_NUM_KAN) + return (3); + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + if (hinsi != WNN_NUM_KAN) + { + jktsone->t_jc = WNN_NUM_KAN; /* 一二三 */ + if (len < 0) + return (3); + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + if (hinsi != WNN_NUM_KANSUUJI) + { + jktsone->t_jc = WNN_NUM_KANSUUJI; /* 百二十三 */ + if (len < 3 && hinsi == WNN_NUM_KANOLD) + return (5); + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + if (hinsi != WNN_NUM_KANOLD) + { + jktsone->t_jc = WNN_NUM_KANOLD; /* 壱百弐拾参 */ + jktsone->v_jc -= 2; /* 評価値をちょっと下げる */ + if (len < 3) + return (5); + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + if (hinsi != WNN_NUM_ZENCAN) + { + jktsone->t_jc = WNN_NUM_ZENCAN; /* 1,234 */ + if (hinsi == WNN_NUM_HANCAN) + return (7); + if ((jktsone = cp_sone (jktsone, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + } + jktsone->t_jc = WNN_NUM_HANCAN; /* 1,234 */ + return (7); +} + +static int +get_eisuu_kouho (jktsbn) + struct JKT_SBN *jktsbn; +{ + struct JKT_SONE *jktsone; + if ((jktsone = cp_sone (jktsbn->sbn, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + + if (jktsbn->sbn->t_jc == WNN_ALP_ZEN) + jktsone->t_jc = WNN_ALP_HAN; + else + jktsone->t_jc = WNN_ALP_ZEN; + return (2); +} + +static int +get_kigou_kouho (jktsbn) + struct JKT_SBN *jktsbn; +{ + struct JKT_SONE *jktsone; + if ((jktsone = cp_sone (jktsbn->sbn, jktsbn->sbn)) < (struct JKT_SONE *) 0) + return (-1); + + if (jktsbn->sbn->t_jc == WNN_KIG_JIS) + jktsone->t_jc = WNN_KIG_HAN; + else + jktsone->t_jc = WNN_KIG_JIS; + return (2); +}