Add KANAKANCOST

This commit is contained in:
Nishi 2026-06-21 08:00:28 +09:00
commit a6a7858eaf
20 changed files with 58916 additions and 59081 deletions

View file

@ -50,6 +50,7 @@ int codesize(u_char code) {
case LEADINGHANKAKU:
case OFFSETASSYUKU:
case AIATTRIBUTE:
case KANAKANCOST:
return 2;
default:
return 2;

View file

@ -43,27 +43,3 @@ VFunc cvtnum_func[] = {
(VFunc)num_type04, (VFunc)num_type05, (VFunc)num_type06, (VFunc)num_type07,
(VFunc)num_type08, (VFunc)num_type09, (VFunc)num_type10, (VFunc)num_type11,
(VFunc)num_type12, (VFunc)num_type13, (VFunc)num_type14};
UCPFunc getkan_func[] = {
(UCPFunc)getkan_norm, (UCPFunc)getkan_norm, (UCPFunc)getkan_hira, (UCPFunc)getkan_kata,
(UCPFunc)getkan_knj, (UCPFunc)getkan_ofs, (UCPFunc)getkan_norm, (UCPFunc)getkan_none,
(UCPFunc)getkan_norm, (UCPFunc)getkan_norm, (UCPFunc)getkan_hira, (UCPFunc)getkan_kata,
(UCPFunc)getkan_knj, (UCPFunc)getkan_ofs, (UCPFunc)getkan_norm, (UCPFunc)getkan_none};
IFunc setjrec_func[] = {
(IFunc)setj_norm2, (IFunc)setj_norm2, (IFunc)setj_norm1, (IFunc)setj_norm1,
(IFunc)setj_knj, (IFunc)setj_ofs, (IFunc)setj_norm2, (IFunc)setj_atrb,
(IFunc)setj_norm2, (IFunc)setj_norm2, (IFunc)setj_norm1, (IFunc)setj_norm1,
(IFunc)setj_knj, (IFunc)setj_ofs, (IFunc)setj_norm2, (IFunc)setj_atrb};
IFunc hiraknj_func[] = {
(IFunc)hiraknj_hira, (IFunc)hiraknj_norm, (IFunc)hiraknj_hask, (IFunc)hiraknj_kask,
(IFunc)hiraknj_knj, (IFunc)hiraknj_ofs, (IFunc)hiraknj_norm, (IFunc)hiraknj_atrb,
(IFunc)hiraknj_hira, (IFunc)hiraknj_norm, (IFunc)hiraknj_hask, (IFunc)hiraknj_kask,
(IFunc)hiraknj_knj, (IFunc)hiraknj_ofs, (IFunc)hiraknj_norm, (IFunc)hiraknj_atrb};
UCPFunc makekan_func[] = {
(UCPFunc)makekan_norm, (UCPFunc)makekan_norm, (UCPFunc)makekan_1byte, (UCPFunc)makekan_1byte,
(UCPFunc)makekan_knj, (UCPFunc)makekan_ofs, (UCPFunc)makekan_norm, (UCPFunc)makekan_none,
(UCPFunc)makekan_norm, (UCPFunc)makekan_norm, (UCPFunc)makekan_1byte, (UCPFunc)makekan_1byte,
(UCPFunc)makekan_knj, (UCPFunc)makekan_ofs, (UCPFunc)makekan_norm, (UCPFunc)makekan_none};

View file

@ -151,6 +151,7 @@ code2kanji(SJ4_CONTEXT u_char* s, u_char* d, u_char* ym, int yl, int flg) {
break;
case AIATTRIBUTE:
case KANAKANCOST:
d = getkan_none(s, d, ym, yl, flg);
break;
@ -181,6 +182,7 @@ code2kanji(SJ4_CONTEXT u_char* s, u_char* d, u_char* ym, int yl, int flg) {
break;
case AIATTRIBUTE:
case KANAKANCOST:
d = getkan_none(s, d, ym, yl, FALSE);
break;

View file

@ -60,6 +60,16 @@ set2nd(SJ4_CONTEXT CLREC* clrec) {
return rec2 ? (clrec->cllen + rec2->cllen) : (clrec->cllen);
}
static int cost_penalty(CLREC* clrec) {
int c = clrec->jnode->cost;
if(c < 0xfff / 5 * 1) return 8;
if(c < 0xfff / 5 * 2) return 4;
if(c < 0xfff / 5 * 3) return 2;
if(c < 0xfff / 5 * 4) return 1;
return 0;
};
void mk2claus(SJ4_CONTEXT2) {
u_char* keepptr;
int keeplen;
@ -117,7 +127,7 @@ void mk2claus(SJ4_CONTEXT2) {
if(selcl->cl2len > clrec->cl2len) continue;
prty = priority(SJ4_CONTEXT_PASS clrec) - prty2;
prty = priority(SJ4_CONTEXT_PASS clrec) - prty2 + cost_penalty(clrec);
prty2++;

View file

@ -193,6 +193,7 @@ makekan(SJ4_CONTEXT u_char* s, u_char* d, int flg) {
break;
case AIATTRIBUTE:
case KANAKANCOST:
d = makekan_none(SJ4_CONTEXT_PASS s, d, flg);
break;
@ -223,6 +224,7 @@ makekan(SJ4_CONTEXT u_char* s, u_char* d, int flg) {
break;
case AIATTRIBUTE:
case KANAKANCOST:
d = makekan_none(SJ4_CONTEXT_PASS s, d, FALSE);
break;

View file

@ -79,6 +79,10 @@ int setj_ofs(SJ4_CONTEXT u_char* p) {
contf = FALSE;
break;
case KANAKANCOST:
p += 2;
break;
default:
p += setj_norm2(SJ4_CONTEXT_PASS p);
}
@ -123,6 +127,10 @@ int setj_knj(SJ4_CONTEXT u_char* p) {
contf = FALSE;
break;
case KANAKANCOST:
p += 2;
break;
default:
p += setj_norm2(SJ4_CONTEXT_PASS p);
}
@ -171,6 +179,7 @@ void setjrec(SJ4_CONTEXT u_char* tagp, int mode) {
int plen;
int nlen;
int len;
int cost = 0;
plen = getplen(tagp);
nlen = getnlen(tagp);
@ -214,6 +223,11 @@ void setjrec(SJ4_CONTEXT u_char* tagp, int mode) {
tmp++;
break;
case KANAKANCOST:
cost = ((*tmp & 0xf) << 8) | *(tmp + 1);
tmp += 2;
break;
default:
tmp += setj_norm2(SJ4_CONTEXT_PASS tmp);
}
@ -232,6 +246,7 @@ void setjrec(SJ4_CONTEXT u_char* tagp, int mode) {
rec->dicid = curdict->dicid;
rec->hinsi = gram;
rec->sttofs = headcode;
rec->cost = cost;
}
}
@ -282,6 +297,10 @@ void setnumrec(SJ4_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) {
tmp++;
break;
case KANAKANCOST:
tmp += 2;
break;
default:
tmp += setj_norm2(SJ4_CONTEXT_PASS tmp);
}

View file

@ -186,6 +186,11 @@ hiraknj(SJ4_CONTEXT u_char* p) {
result = hiraknj_knj(SJ4_CONTEXT_PASS p, &i);
break;
case KANAKANCOST:
result = 0;
i = 2;
break;
default:
result = hiraknj_hira(SJ4_CONTEXT_PASS p, &i);
}