Fix multi-context

This commit is contained in:
Nishi 2026-06-20 00:17:43 +09:00
commit 788eed763a
15 changed files with 163 additions and 125 deletions

View file

@ -151,6 +151,10 @@ int hzstrlen(u_char*, int);
void seg_count(SJ3_CONTEXT DICT*);
void mkidxtbl(SJ3_CONTEXT DICT*);
void initwork(SJ3_CONTEXT2);
#ifndef SJ3_GLOBAL
Sj3Context* alloccontext(const char*);
void free_context(Sj3Context*);
#endif
/* istrcmp.c */
int istrcmp(u_char*, u_char*, int, int);
@ -178,12 +182,12 @@ JREC* argjrec(SJ3_CONTEXT int, JREC*);
/* mkkouho.c */
void mkkouho(SJ3_CONTEXT2);
u_char* makekan_none(u_char*, u_char*, int);
u_char* makekan_1byte(u_char*, u_char*, int);
u_char* makekan_none(SJ3_CONTEXT u_char*, u_char*, int);
u_char* makekan_1byte(SJ3_CONTEXT u_char*, u_char*, int);
u_char* makekan_knj(SJ3_CONTEXT u_char*, u_char*, int);
u_char* makekan_ofs(SJ3_CONTEXT u_char*, u_char*, int);
u_char* makekan_norm(u_char*, u_char*, int);
u_char* makekan_ascii(u_char*, u_char*, int);
u_char* makekan_norm(SJ3_CONTEXT u_char*, u_char*, int);
u_char* makekan_ascii(SJ3_CONTEXT u_char*, u_char*, int);
int sel_sjmode(JREC*);
/* mknumber.c */
@ -260,12 +264,12 @@ extern u_short* selsjadrs[];
int setconj(SJ3_CONTEXT TypeGram, JREC*, CREC*);
/* setjrec.c */
int setj_atrb(u_char*);
int setj_atrb(SJ3_CONTEXT u_char*);
int setj_ofs(SJ3_CONTEXT u_char*);
int setj_knj(SJ3_CONTEXT u_char*);
int setj_norm1(u_char*);
int setj_norm2(u_char*);
int setj_norm3(u_char*); /* unused??? */
int setj_norm1(SJ3_CONTEXT u_char*);
int setj_norm2(SJ3_CONTEXT u_char*);
int setj_norm3(SJ3_CONTEXT u_char*); /* unused??? */
void setjrec(SJ3_CONTEXT u_char*, int);
void setnumrec(SJ3_CONTEXT u_char*, JREC*, TypeGram);
void setcrec(SJ3_CONTEXT u_char*);
@ -273,13 +277,13 @@ void setcrec(SJ3_CONTEXT u_char*);
/* setkouho.c */
void setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, int);
void ph_setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, STDYIN*);
int hiraknj_atrb(u_char*, int*);
int hiraknj_atrb(SJ3_CONTEXT u_char*, int*);
int hiraknj_ofs(SJ3_CONTEXT u_char*, int*);
int hiraknj_knj(SJ3_CONTEXT u_char*, int*);
int hiraknj_hask(u_char*, int*);
int hiraknj_kask(u_char*, int*);
int hiraknj_norm(u_char*, int*);
int hiraknj_hira(u_char*, int*);
int hiraknj_hask(SJ3_CONTEXT u_char*, int*);
int hiraknj_kask(SJ3_CONTEXT u_char*, int*);
int hiraknj_norm(SJ3_CONTEXT u_char*, int*);
int hiraknj_hira(SJ3_CONTEXT u_char*, int*);
/* setubi.c */
u_char* getstb(TypeGram);

View file

@ -202,6 +202,8 @@
#define seg_count Jseg_count
#define mkidxtbl Jmkidxtbl
#define initwork Jinitwork
#define alloccontext Jalloccontext
#define free_context Jfree_context
#define free_jlst Jfree_jlst
#define free_clst Jfree_clst

View file

@ -98,7 +98,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
segnum = srchidx(SJ3_CONTEXT_PASS(TypeDicSeg) DICSEGBASE, cnvlen);
for(;;) {
(*curdict->getdic)(curdict, segnum);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segnum);
i = srchkana(SJ3_CONTEXT_PASS & p1, &saml);
dstofs = douofs = p1 - dicbuf;
hnsofs = knjofs = 0;
@ -153,7 +153,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
if((unsigned int)freidx < getplen(p1) + nlen + 1)
return AD_OVFLWINDEX;
if((*curdict->putdic)(curdict, curdict->segunit))
if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit))
return AD_OVFLWUSRDIC;
sprt_seg(SJ3_CONTEXT_PASS segnum, pos);
@ -166,15 +166,15 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
if((unsigned int)freidx < cnvlen + 1)
return AD_OVFLWINDEX;
if((*curdict->putdic)(curdict, curdict->segunit))
if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit))
return AD_OVFLWUSRDIC;
curdict->segunit++;
(*curdict->getdic)(curdict, curdict->segunit - 1);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit - 1);
memset(dicbuf, DICSEGTERM, (int)curdict->seglen);
dicbuf[0] = 0;
(*curdict->putdic)(curdict, curdict->segunit - 1);
(*curdict->rszdic)(curdict, curdict->segunit);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit - 1);
(*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit);
mkidxtbl(SJ3_CONTEXT_PASS curdict);
segnum++;
@ -183,7 +183,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
if((unsigned int)freidx < getplen(p1) + nlen + 1)
return AD_OVFLWINDEX;
if((*curdict->putdic)(curdict, curdict->segunit))
if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit))
return AD_OVFLWUSRDIC;
sprt_seg(SJ3_CONTEXT_PASS segnum, douofs);
@ -258,7 +258,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
if(!knjofs)
*dstptr++ = HINSIBLKTERM;
(*curdict->putdic)(curdict, segnum);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, segnum);
if(StudyExist()) {
size -= nxtask;
@ -418,13 +418,13 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) {
STDYIN* stdy;
for(s = curdict->segunit - 1; s >= seg; s--) {
(*curdict->getdic)(curdict, s);
(*curdict->putdic)(curdict, s + 1);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, s);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, s + 1);
}
curdict->segunit++;
(*curdict->rszdic)(curdict, curdict->segunit);
(*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit);
(*curdict->getdic)(curdict, seg + 1);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, seg + 1);
pos = dicbuf + ofs;
@ -455,7 +455,7 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) {
p += i;
memset(p, DICSEGTERM, (dicbuf + curdict->seglen - p));
(*curdict->putdic)(curdict, seg + 1);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg + 1);
if(StudyExist()) {
dicid = curdict->dicid;
@ -473,9 +473,9 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) {
}
}
(*curdict->getdic)(curdict, seg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, seg);
memset(dicbuf + ofs, DICSEGTERM, (int)(curdict->seglen - ofs));
(*curdict->putdic)(curdict, seg);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg);
}
static void
@ -493,7 +493,7 @@ apnd_uidx(SJ3_CONTEXT TypeDicSeg seg, u_char* yomi, int len) {
*p++ = *yomi++;
*p = 0;
(*curdict->putidx)(curdict, 0);
(*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0);
mkidxtbl(SJ3_CONTEXT_PASS curdict);
}

View file

@ -347,7 +347,7 @@ void chg_uidx(SJ3_CONTEXT TypeDicSeg seg, u_char* yomi, int len) {
}
while(len--) *p++ = *yomi++;
(*curdict->putidx)(curdict, 0);
(*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0);
mkidxtbl(SJ3_CONTEXT_PASS curdict);
}

View file

@ -82,7 +82,7 @@ void cvtdict(SJ3_CONTEXT KHREC* krec, CLREC* clrec, int flg) {
if(flg) {
(*Cvtnum_func[krec->mode - 1])(ystart + sttlen, yptr, jrec);
(*Cvtnum_func[krec->mode - 1])(SJ3_CONTEXT_PASS ystart + sttlen, yptr, jrec);
yptr += (i = jrec->numlen) * 2;
jlen -= i;
@ -108,7 +108,7 @@ void cvtdict(SJ3_CONTEXT KHREC* krec, CLREC* clrec, int flg) {
if(ofs) {
if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) {
(*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg);
get_askknj(SJ3_CONTEXT_PASS2);
kanjitmp +=
getkanji(SJ3_CONTEXT_PASS yptr, jlen, dicbuf + ofs, kanjitmp);

View file

@ -69,7 +69,7 @@ u_int deldic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
cnvlen = sstrlen(yptr);
useg = srchidx(SJ3_CONTEXT_PASS(TypeDicSeg) DICSEGBASE, cnvlen);
(*curdict->getdic)(curdict, useg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, useg);
if(!(dblknum = srchkana(SJ3_CONTEXT_PASS & p1, &samlen))) return AD_NOMIDASI;
@ -108,7 +108,7 @@ u_int deldic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
set_size(p1, (int)(getsize(p1) - size),
(int)getplen(p1), (int)getnlen(p1));
(*curdict->putdic)(curdict, useg);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, useg);
del_stdy(SJ3_CONTEXT_PASS useg, ofs, size);
@ -154,7 +154,7 @@ del_douon(SJ3_CONTEXT TypeDicSeg seg, u_char* ptr, TypeDicOfs ofs) {
}
}
(*curdict->putdic)(curdict, seg);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg);
del_stdy(SJ3_CONTEXT_PASS seg, ofs, size);
@ -171,17 +171,17 @@ del_segment(SJ3_CONTEXT TypeDicSeg seg) {
if(curdict->segunit > 1) {
for(sg = seg + 1; sg < curdict->segunit; sg++) {
(*curdict->getdic)(curdict, sg);
(*curdict->putdic)(curdict, sg - 1);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, sg);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, sg - 1);
}
curdict->segunit--;
} else {
memset(dicbuf, DICSEGTERM, (int)curdict->seglen);
dicbuf[0] = 0;
(*curdict->putdic)(curdict, DICSEGBASE);
(*curdict->putdic)(SJ3_CONTEXT_PASS curdict, DICSEGBASE);
}
(*curdict->rszdic)(curdict, curdict->segunit);
(*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit);
del_uidx(SJ3_CONTEXT_PASS seg);
@ -227,7 +227,7 @@ del_uidx(SJ3_CONTEXT TypeDicSeg seg) {
len = q - p;
memset(idxbuf + curdict->idxlen - len, 0, len);
(*curdict->putidx)(curdict, 0);
(*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0);
mkidxtbl(SJ3_CONTEXT_PASS curdict);
}

View file

@ -82,8 +82,8 @@ int seldict(SJ3_CONTEXT TypeDicID id) {
u_char*
get_idxptr(SJ3_CONTEXT TypeDicSeg seg) {
(*curdict->getofs)(curdict);
(*curdict->getidx)(curdict);
(*curdict->getofs)(SJ3_CONTEXT_PASS curdict);
(*curdict->getidx)(SJ3_CONTEXT_PASS curdict);
return idxbuf + idxofs[seg];
}

View file

@ -43,7 +43,7 @@ void seg_count(SJ3_CONTEXT DICT* dict) {
TypeDicSeg segcnt = 0;
if(dict->getidx) {
(*dict->getidx)(dict);
(*dict->getidx)(SJ3_CONTEXT_PASS dict);
p = idxbuf;
q = p + dict->idxlen;
@ -64,8 +64,8 @@ void mkidxtbl(SJ3_CONTEXT DICT* dict) {
seg = 0;
(*dict->getidx)(dict);
(*dict->getofs)(dict);
(*dict->getidx)(SJ3_CONTEXT_PASS dict);
(*dict->getofs)(SJ3_CONTEXT_PASS dict);
idxofs[0] = 0;
for(p = idxbuf; p < idxbuf + dict->idxlen && seg < dict->segunit;) {
@ -78,3 +78,49 @@ void initwork(SJ3_CONTEXT2) {
jrt1st = jrt2nd = maxjptr = (JREC*)0;
clt1st = clt2nd = maxclptr = (CLREC*)0;
}
#ifndef SJ3_GLOBAL
Sj3Context* alloccontext(const char* dic) {
Sj3Context* ctx = calloc(1, sizeof(*ctx));
DictFile* dict;
DICTL* node;
ctx->work = calloc(1, sizeof(*ctx->work));
ctx->stdy = calloc(1, sizeof(*ctx->stdy));
node = calloc(1, sizeof(*node));
ctx->work->Jdictlist = node;
initwork(ctx);
dict = opendict(ctx, (char*)dic, "");
node->dict = &dict->dict;
node->next = NULL;
seldict(ctx, dict->dict.dicid);
return ctx;
}
void free_context(Sj3Context* ctx) {
DICTL* node;
node = ctx->work->Jdictlist;
while(node != NULL) {
DICTL* next = node->next;
closedict(ctx, (DictFile*)node->dict);
free(node);
node = next;
}
freework(ctx);
free(ctx->stdy);
free(ctx->work);
free(ctx);
}
#endif

View file

@ -99,7 +99,7 @@ cl_kanji(SJ3_CONTEXT JREC* jrec, CLREC* clrec) {
int kcount = khcount;
if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) {
(*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg);
ptr = dicbuf + jrec->jofsst + 1;
get_askknj(SJ3_CONTEXT_PASS2);
@ -116,12 +116,12 @@ cl_kanji(SJ3_CONTEXT JREC* jrec, CLREC* clrec) {
}
u_char*
makekan_none(u_char* s, u_char* d, int flg) {
makekan_none(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
return d;
}
u_char*
makekan_1byte(u_char* s, u_char* d, int flg) {
makekan_1byte(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
if((*s & KANJIMODEMASK) == ZENHIRAASSYUKU)
*d++ = 0x10 | (*s & KNJASSYUKUMASK);
else
@ -142,7 +142,7 @@ u_char* makekan_ofs(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
}
u_char*
makekan_norm(u_char* s, u_char* d, int flg) {
makekan_norm(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
u_char c;
if(*s != 0) {
@ -159,7 +159,7 @@ makekan_norm(u_char* s, u_char* d, int flg) {
}
u_char*
makekan_ascii(u_char* s, u_char* d, int flg) {
makekan_ascii(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
u_char c;
c = s[1];
@ -181,11 +181,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
if(s[csize] == KANJISTREND) {
switch(*s & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
d = makekan_1byte(s, d, flg);
d = makekan_1byte(SJ3_CONTEXT_PASS s, d, flg);
break;
case ZENKATAASSYUKU:
d = makekan_1byte(s, d, flg);
d = makekan_1byte(SJ3_CONTEXT_PASS s, d, flg);
break;
case OFFSETASSYUKU:
@ -193,11 +193,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
break;
case AIATTRIBUTE:
d = makekan_none(s, d, flg);
d = makekan_none(SJ3_CONTEXT_PASS s, d, flg);
break;
case LEADINGHANKAKU:
d = makekan_ascii(s, d, flg);
d = makekan_ascii(SJ3_CONTEXT_PASS s, d, flg);
break;
case KANJIASSYUKU:
@ -205,17 +205,17 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
break;
default:
d = makekan_norm(s, d, flg);
d = makekan_norm(SJ3_CONTEXT_PASS s, d, flg);
}
break;
} else
switch(*s & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
d = makekan_1byte(s, d, FALSE);
d = makekan_1byte(SJ3_CONTEXT_PASS s, d, FALSE);
break;
case ZENKATAASSYUKU:
d = makekan_1byte(s, d, FALSE);
d = makekan_1byte(SJ3_CONTEXT_PASS s, d, FALSE);
break;
case OFFSETASSYUKU:
@ -223,11 +223,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
break;
case AIATTRIBUTE:
d = makekan_none(s, d, FALSE);
d = makekan_none(SJ3_CONTEXT_PASS s, d, FALSE);
break;
case LEADINGHANKAKU:
d = makekan_ascii(s, d, FALSE);
d = makekan_ascii(SJ3_CONTEXT_PASS s, d, FALSE);
break;
case KANJIASSYUKU:
@ -235,7 +235,7 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) {
break;
default:
d = makekan_norm(s, d, FALSE);
d = makekan_norm(SJ3_CONTEXT_PASS s, d, FALSE);
}
s += codesize(*s);
}
@ -404,7 +404,7 @@ cl_numcmn(SJ3_CONTEXT JREC* jrec, CLREC* clrec) {
i = sel_sjmode(jrec);
if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) {
(*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg);
p = dicbuf + jrec->jofsst + 1;

View file

@ -50,7 +50,7 @@ int getusr(SJ3_CONTEXT u_char* buf) {
peepyomi[0] = peepknj[0] = peepgrm = 0;
(*curdict->getdic)(curdict, peepidx = DICSEGBASE);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx = DICSEGBASE);
get_askknj(SJ3_CONTEXT_PASS2);
peepdptr = segtop();
@ -74,7 +74,7 @@ int getusr(SJ3_CONTEXT u_char* buf) {
}
int nextusr(SJ3_CONTEXT u_char* buf) {
(*curdict->getdic)(curdict, peepidx);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx);
get_askknj(SJ3_CONTEXT_PASS2);
if(next_kanji(SJ3_CONTEXT_PASS2)) {
@ -89,7 +89,7 @@ int nextusr(SJ3_CONTEXT u_char* buf) {
}
int prevusr(SJ3_CONTEXT u_char* buf) {
(*curdict->getdic)(curdict, peepidx);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx);
get_askknj(SJ3_CONTEXT_PASS2);
if(prev_kanji(SJ3_CONTEXT_PASS2)) {
@ -185,7 +185,7 @@ prev_douon(SJ3_CONTEXT2) {
if(peepdptr <= segtop()) {
if(peepidx <= DICSEGBASE) return 0;
(*curdict->getdic)(curdict, --peepidx);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, --peepidx);
get_askknj(SJ3_CONTEXT_PASS2);
set_idxyomi(SJ3_CONTEXT_PASS2);
@ -272,7 +272,7 @@ next_douon(SJ3_CONTEXT2) {
if(segend(p1)) {
if(peepidx + 1 < curdict->segunit) {
(*curdict->getdic)(curdict, ++peepidx);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, ++peepidx);
get_askknj(SJ3_CONTEXT_PASS2);
peepdptr = segtop();

View file

@ -50,7 +50,7 @@ ph_setsty(SJ3_CONTEXT CLREC* clrec) {
return;
}
(*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg);
ptr = dicbuf + jrec->jofsst + 1;
for(; *ptr != HINSIBLKTERM; ptr = skipkstr(ptr)) {

View file

@ -39,7 +39,7 @@
#include "sj_kanakan.h"
int setj_atrb(u_char* p) {
int setj_atrb(SJ3_CONTEXT u_char* p) {
return 2;
}
@ -52,11 +52,11 @@ int setj_ofs(SJ3_CONTEXT u_char* p) {
if(p[codesize(*p)] == KANJISTREND) contf = FALSE;
switch(*p & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
p += setj_norm1(p);
p += setj_norm1(SJ3_CONTEXT_PASS p);
break;
case ZENKATAASSYUKU:
p += setj_norm1(p);
p += setj_norm1(SJ3_CONTEXT_PASS p);
break;
case OFFSETASSYUKU:
@ -64,11 +64,11 @@ int setj_ofs(SJ3_CONTEXT u_char* p) {
break;
case AIATTRIBUTE:
p += setj_atrb(p);
p += setj_atrb(SJ3_CONTEXT_PASS p);
break;
case LEADINGHANKAKU:
p += setj_norm2(p);
p += setj_norm2(SJ3_CONTEXT_PASS p);
break;
case KANJIASSYUKU:
@ -80,7 +80,7 @@ int setj_ofs(SJ3_CONTEXT u_char* p) {
break;
default:
p += setj_norm2(p);
p += setj_norm2(SJ3_CONTEXT_PASS p);
}
} while(contf);
@ -96,11 +96,11 @@ int setj_knj(SJ3_CONTEXT u_char* p) {
if(p[codesize(*p)] == KANJISTREND) contf = FALSE;
switch(*p & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
p += setj_norm1(p);
p += setj_norm1(SJ3_CONTEXT_PASS p);
break;
case ZENKATAASSYUKU:
p += setj_norm1(p);
p += setj_norm1(SJ3_CONTEXT_PASS p);
break;
case OFFSETASSYUKU:
@ -108,11 +108,11 @@ int setj_knj(SJ3_CONTEXT u_char* p) {
break;
case AIATTRIBUTE:
p += setj_atrb(p);
p += setj_atrb(SJ3_CONTEXT_PASS p);
break;
case LEADINGHANKAKU:
p += setj_norm2(p);
p += setj_norm2(SJ3_CONTEXT_PASS p);
break;
case KANJIASSYUKU:
@ -124,22 +124,22 @@ int setj_knj(SJ3_CONTEXT u_char* p) {
break;
default:
p += setj_norm2(p);
p += setj_norm2(SJ3_CONTEXT_PASS p);
}
} while(contf);
return 1;
}
int setj_norm1(u_char* p) {
int setj_norm1(SJ3_CONTEXT u_char* p) {
return 1;
}
int setj_norm2(u_char* p) {
int setj_norm2(SJ3_CONTEXT u_char* p) {
return 2;
}
int setj_norm3(u_char* p) {
int setj_norm3(SJ3_CONTEXT u_char* p) {
return 3;
}
@ -187,11 +187,11 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) {
for(tmp = ptr + 1; *tmp != HINSIBLKTERM;) {
switch(*tmp & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
tmp += setj_norm1(tmp);
tmp += setj_norm1(SJ3_CONTEXT_PASS tmp);
break;
case ZENKATAASSYUKU:
tmp += setj_norm1(tmp);
tmp += setj_norm1(SJ3_CONTEXT_PASS tmp);
break;
case OFFSETASSYUKU:
@ -199,11 +199,11 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) {
break;
case AIATTRIBUTE:
tmp += setj_atrb(tmp);
tmp += setj_atrb(SJ3_CONTEXT_PASS tmp);
break;
case LEADINGHANKAKU:
tmp += setj_norm2(tmp);
tmp += setj_norm2(SJ3_CONTEXT_PASS tmp);
break;
case KANJIASSYUKU:
@ -215,7 +215,7 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) {
break;
default:
tmp += setj_norm2(tmp);
tmp += setj_norm2(SJ3_CONTEXT_PASS tmp);
}
}
@ -255,11 +255,11 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) {
for(tmp = ptr + 1; *tmp != HINSIBLKTERM;) {
switch(*tmp & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
tmp += setj_norm1(tmp);
tmp += setj_norm1(SJ3_CONTEXT_PASS tmp);
break;
case ZENKATAASSYUKU:
tmp += setj_norm1(tmp);
tmp += setj_norm1(SJ3_CONTEXT_PASS tmp);
break;
case OFFSETASSYUKU:
@ -267,11 +267,11 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) {
break;
case AIATTRIBUTE:
tmp += setj_atrb(tmp);
tmp += setj_atrb(SJ3_CONTEXT_PASS tmp);
break;
case LEADINGHANKAKU:
tmp += setj_norm2(tmp);
tmp += setj_norm2(SJ3_CONTEXT_PASS tmp);
break;
case KANJIASSYUKU:
@ -283,7 +283,7 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) {
break;
default:
tmp += setj_norm2(tmp);
tmp += setj_norm2(SJ3_CONTEXT_PASS tmp);
}
}

View file

@ -163,11 +163,11 @@ hiraknj(SJ3_CONTEXT u_char* p) {
if(p[codesize(*p)] == KANJISTREND) flg = FALSE;
switch(*p & KANJIMODEMASK) {
case ZENHIRAASSYUKU:
result = hiraknj_hask(p, &i);
result = hiraknj_hask(SJ3_CONTEXT_PASS p, &i);
break;
case ZENKATAASSYUKU:
result = hiraknj_kask(p, &i);
result = hiraknj_kask(SJ3_CONTEXT_PASS p, &i);
break;
case OFFSETASSYUKU:
@ -175,11 +175,11 @@ hiraknj(SJ3_CONTEXT u_char* p) {
break;
case AIATTRIBUTE:
result = hiraknj_atrb(p, &i);
result = hiraknj_atrb(SJ3_CONTEXT_PASS p, &i);
break;
case LEADINGHANKAKU:
result = hiraknj_norm(p, &i);
result = hiraknj_norm(SJ3_CONTEXT_PASS p, &i);
break;
case KANJIASSYUKU:
@ -187,7 +187,7 @@ hiraknj(SJ3_CONTEXT u_char* p) {
break;
default:
result = hiraknj_hira(p, &i);
result = hiraknj_hira(SJ3_CONTEXT_PASS p, &i);
}
if(result) return result;
@ -198,7 +198,7 @@ hiraknj(SJ3_CONTEXT u_char* p) {
return 0;
}
int hiraknj_atrb(u_char* p, int* len) {
int hiraknj_atrb(SJ3_CONTEXT u_char* p, int* len) {
*len = 2;
return 0;
}
@ -213,22 +213,22 @@ int hiraknj_knj(SJ3_CONTEXT u_char* p, int* len) {
return hiraknj(SJ3_CONTEXT_PASS askknj[*p & KNJASSYUKUMASK]);
}
int hiraknj_hask(u_char* p, int* len) {
int hiraknj_hask(SJ3_CONTEXT u_char* p, int* len) {
*len = 1;
return 2;
}
int hiraknj_kask(u_char* p, int* len) {
int hiraknj_kask(SJ3_CONTEXT u_char* p, int* len) {
*len = 1;
return 3;
}
int hiraknj_norm(u_char* p, int* len) {
int hiraknj_norm(SJ3_CONTEXT u_char* p, int* len) {
*len = codesize(*p);
return 1;
}
int hiraknj_hira(u_char* p, int* len) {
int hiraknj_hira(SJ3_CONTEXT u_char* p, int* len) {
u_char ch;
*len = codesize(*p);

View file

@ -90,7 +90,7 @@ srchdict(SJ3_CONTEXT u_char* tagp) {
segno = srchidx(SJ3_CONTEXT_PASS prevseg, (int)dicinl);
(*curdict->getdic)(curdict, segno);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segno);
if(prevseg != segno) {
@ -109,7 +109,7 @@ srchdict(SJ3_CONTEXT u_char* tagp) {
if(segno >= curdict->segunit) return NULL;
(*curdict->getdic)(curdict, segno);
(*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segno);
tagp = dicbuf;
}

View file

@ -1,27 +1,11 @@
#include <sj_kanakan.h>
int main(int argc, char** argv) {
DictFile* dict;
DICTL* node;
char out[64 * 1024];
int i = 0;
char c[64 * 1024];
char b;
Sj3Context ctx;
ctx.work = calloc(1, sizeof(Global));
node = calloc(1, sizeof(DICTL));
ctx.work->Jdictlist = node;
initwork(&ctx);
dict = opendict(&ctx, "dic.bin", "");
node->dict = &dict->dict;
node->next = NULL;
seldict(&ctx, dict->dict.dicid);
char out[64 * 1024];
int i = 0;
char c[64 * 1024];
char b;
Sj3Context* ctx = alloccontext("dic.bin");
c[0] = 0;
@ -37,7 +21,7 @@ int main(int argc, char** argv) {
}
i = 0;
while((strlen(c) - i) > 0 && (i += cl2knj(&ctx, (u_char*)c + i, strlen(c) - i, (u_char*)out))) {
while((strlen(c) - i) > 0 && (i += cl2knj(ctx, (u_char*)c + i, strlen(c) - i, (u_char*)out))) {
STDYOUT* s = (STDYOUT*)out;
printf("> %s\n", out + sizeof(STDYOUT));
@ -46,5 +30,7 @@ int main(int argc, char** argv) {
c[0] = 0;
}
free_context(ctx);
return 0;
}