Author: iratqq
Date: Sat Mar 8 08:09:18 2008
New Revision: 5279
Modified:
trunk/uim/wnnlib.c
Log:
* uim/wnnlib.c: Merged from kinput2-v3.1.
Modified: trunk/uim/wnnlib.c
==============================================================================
--- trunk/uim/wnnlib.c (original)
+++ trunk/uim/wnnlib.c Sat Mar 8 08:09:18 2008
@@ -301,8 +301,14 @@
* /usr/local/lib/wnn
$B$K7h$a$&$A!#(B($B%*!<%P!<%i%$%I$9$k$3$H$O$G$-$k(B)
*
* --- kinput2 version 3.0 $B%j%j!<%9(B ---
+ *
+ * ver ?.?? 01/01/10
+ * Wnn7 $BBP1~!#$H$O$$$C$F$b:G>.8B$NBP1~$G!"(BWnn7 $B$N?7$7$$5!G=$r(B
+ * $BMxMQ$G$-$k$o$1$G$O$J$$!#(B
+ * $B;HMQ$5$l$F$$$J$$JQ?t$r:o=|!#(B
*/
+
/*
* $B%U%!%s%/%7%g%s(B
*
@@ -620,6 +626,29 @@
#include "gettext.h"
#include "plugin.h"
+/*
+ * Wnn7 [EMAIL PROTECTED]/$D$+$N(B API $B4X?t$K%P%C%U%!%5%$%:$r;XDj$9$k(B
+ * $B0z?t$rDI2C$7$F$$$k$?$a!"%P!<%8%g%s$rD4$Y!"$=$l$K$h$C$F0z?t$r(B
+ * $BJQ99$7$J$1$l$P$J$i$J$$!#$H$j$"$($:K\%W%m%0%i%`$G$O(B Wnn7
$B$N0z?t$K9g$o$;$k!#(B
+ */
+
+/* Wnn7 $B$+$I$&$+$NH=Dj(B */
+#ifdef WNN_RENSOU
+#define WNN7
+#endif
+
+#ifdef WNN7
+#define ki2_jl_get_yomi jl_get_yomi
+#define ki2_jl_get_kanji jl_get_kanji
+#define ki2_jl_get_zenkouho_kanji jl_get_zenkouho_kanji
+#define ki2_jl_fuzokugo_get jl_fuzokugo_get
+#else
+#define ki2_jl_get_yomi(a, b, c, d, sz) jl_get_yomi(a, b, c, d)
+#define ki2_jl_get_kanji(a, b, c, d, sz) jl_get_kanji(a, b, c, d)
+#define ki2_jl_get_zenkouho_kanji(a, b, c, sz) jl_get_zenkouho_kanji(a, b, c)
+#define ki2_jl_fuzokugo_get(a, b, sz) jl_fuzokugo_get(a, b)
+#endif /* WNN7 */
+
#ifdef DEBUG_WNNLIB
static void showBuffers(jcConvBuf *, char *);
static void printBuffer(wchar *start, wchar *end);
@@ -637,6 +666,9 @@
#define KANAEND 0xa4f3 /* '$B$s(B' */
#define KATAOFFSET 0x100 /* $B%+%?%+%J$H$R$i$,$J$N%3!<%I!&%*%U%;%C%H(B
*/
+/* [EMAIL PROTECTED]&4A;z$r<h$j=P$9%P%C%U%!$N%5%$%:(B */
+#define CL_BUFSZ 512
+
/* $B%G%U%)%k%H$N%P%C%U%!%5%$%:(B */
#define DEF_BUFFERSIZE 100 /* 100 $BJ8;z(B */
#define DEF_CLAUSESIZE 20 /* 20 [EMAIL PROTECTED](B */
@@ -661,6 +693,7 @@
#endif
/* $B%U%!%s%/[EMAIL PROTECTED]@(B */
+static wchar *wstrcpy(wchar *, wchar *);
static int wstrlen(wchar *);
static void moveKBuf(jcConvBuf *, int, int);
static void moveDBuf(jcConvBuf *, int, int);
@@ -689,14 +722,6 @@
* portability $B$N$?$a$N%U%!%s%/%7%g%s(B
*/
-static int
-wstrcmp(wchar *s1, wchar *s2)
-{
- while (*s1 && *s1 == *s2)
- s1++, s2++;
- return (int)(*s1 - *s2);
-}
-
#ifdef OVERLAP_BCOPY
#undef bcopy
static void
@@ -719,6 +744,24 @@
/*
* wnnlib $BFbIt$G;H$o$l$k%U%!%s%/%7%g%s(B
*/
+static int
+wstrcmp(wchar *s1, wchar *s2)
+{
+ while (*s1 && *s1 == *s2)
+ s1++, s2++;
+ return (int)(*s1 - *s2);
+}
+
+static wchar *
+wstrcpy(wchar *s1, wchar *s2)
+{
+ wchar *ret = s1;
+
+ while (*s1++ = *s2++)
+ ;
+
+ return ret;
+}
/* wstrlen -- wchar $B7?J8;zNs$N(B strlen */
static int
@@ -840,8 +883,8 @@
len * sizeof(jcClause));
}
buf->nClause += move;
-
- /*
+
+ /*
* $B8uJd$r<[EMAIL PROTECTED],$"$l$P!"L58z$K$7$F$*$/!#(B
*
* [EMAIL PROTECTED]"8uJd$r<h$j=P$7$?7k2L!"[EMAIL
PROTECTED],JQ2=$7$?>l9g$K$O!"(B
@@ -1163,7 +1206,7 @@
/* jl_get_kanji $B$O!"(BNULL $B$^$G%3%T!<$9$k$N$GCm0U(B */
len = jl_kanji_len(buf->wnn, cl, n);
savechar = dispp[len];
- (void)jl_get_kanji(buf->wnn, cl, n, dispp);
+ (void)ki2_jl_get_kanji(buf->wnn, cl, n, dispp, len);
dispp[len] = savechar;
dispp += len;
@@ -1290,7 +1333,7 @@
/* jl_get_kanji $B$O!"(BNULL $B$^$G%3%T!<$9$k$N$GCm0U(B */
len = jl_kanji_len(buf->wnn, cls, n);
savechar = dispp[len];
- (void)jl_get_kanji(buf->wnn, cls, n, dispp);
+ (void)ki2_jl_get_kanji(buf->wnn, cls, n, dispp, len);
dispp[len] = savechar;
dispp += len;
@@ -1384,7 +1427,7 @@
/* $BI=<(%P%C%U%!$XJQ49J8;zNs$r%3%T!<(B */
/* jl_get_kanji $B$G$O!":G8e$N(B NULL $B$b%3%T!<$5$l$k$N$GCm0U(B */
savechar = clp->dispp[len];
- (void)jl_get_kanji(buf->wnn, cl, next, clp->dispp);
+ (void)ki2_jl_get_kanji(buf->wnn, cl, next, clp->dispp, len);
clp->dispp[len] = savechar;
/* $B<!$N(B clauseInfo [EMAIL PROTECTED](B */
@@ -1650,7 +1693,7 @@
* [EMAIL PROTECTED],(B 1
$B$G$"$C$?>l9g!"?-$P$7$?7k2L%+%l%s%H(B
* [EMAIL PROTECTED]@a$,$J$/$J$k(B) $B$+(B start + 2
$B$K$J$k(B
*/
-
+
/* $B$^$:!"[EMAIL PROTECTED];;$9$k(B */
ksize = buf->clauseInfo[end].kanap - clp->kanap + len;
@@ -1723,7 +1766,7 @@
/* [EMAIL PROTECTED],JQ49$5$l$F$$$k$3$H$rJ]>Z$9$k(B */
makeConverted(buf, buf->nClause);
- /*
+ /*
* [EMAIL PROTECTED];~!"[EMAIL PROTECTED]@\B32DG=$K$7$F$*$/$H(B
* $B:$$k$3$H$,$"$k!#Nc$($P!VL5NLBg?t!W$HF~NO$7$h$&$H$7$F!"(B
* a) "$B$`$j$g$&$?$$$9$&(B" $B$rJQ49$9$k$H(B"$BL5NA(B
$BBP?t(B" $B$H$J$k!#(B
@@ -1786,7 +1829,7 @@
int i = jl_kanji_len(buf->wnn, start, end);
wchar c = dispp[i];
- (void)jl_get_kanji(buf->wnn, start, end, dispp);
+ (void)ki2_jl_get_kanji(buf->wnn, start, end, dispp, i);
dispp[i] = c; /* $B85$KLa$9(B */
dispp += i; /* $B0LCV$N99?7(B */
clp->conv = 1;
@@ -1824,7 +1867,7 @@
getCandidates(jcConvBuf *buf, int small)
{
int start, end;
-
+
TRACE("getCandidates", "Enter")
/*
@@ -1838,7 +1881,7 @@
if (buf->candKind == CAND_SMALL &&
buf->candClause == buf->curClause)
return 0;
-
+
/* $B%+%l%s%H>[EMAIL PROTECTED]<h$j=P$9(B */
start = buf->curClause;
end = start + 1;
@@ -1914,11 +1957,11 @@
n, buf->candKind == CAND_SMALL ? "small" : "large");
showBuffers(buf, "setCandiate (before)");
#endif
-
+
clp = buf->clauseInfo + start;
oldlen = (buf->clauseInfo + end)->dispp - clp->dispp;
oldclen = jl_bun_suu(buf->wnn);
-
+
if (buf->candKind == CAND_SMALL) {
/* $B%+%l%s%H>[EMAIL PROTECTED]";XDj8uJd$GCV$-49$($k(B */
if (jl_set_jikouho(buf->wnn, n) < 0) {
@@ -1932,7 +1975,7 @@
return -1;
}
}
-
+
/* [EMAIL PROTECTED]'%C%/$9$k(B */
newclen = jl_bun_suu(buf->wnn);
if (newclen < 0) {
@@ -1941,7 +1984,7 @@
}
cdiff = newclen - oldclen;
newend = end + cdiff;
-
+
/* $BJQ498e$N%G%#%9%W%l%$%P%C%U%!$N%5%$%:$r%A%'%C%/$9$k(B */
newlen = jl_kanji_len(buf->wnn, start, newend);
if (newlen <= 0) {
@@ -1953,7 +1996,7 @@
#ifdef DEBUG_WNNLIB
{
wchar candstr[1024];
-
+
fprintf(stderr, "Candidate[%s]: '",
buf->candKind == CAND_SMALL ? "small" : "large");
if (newlen >= 1024) {
@@ -1962,7 +2005,7 @@
newlen);
} else {
candstr[0] = 0;
- jl_get_zenkouho_kanji(buf->wnn, n, candstr);
+ ki2_jl_get_zenkouho_kanji(buf->wnn, n, candstr,
sizeof(candstr));
printBuffer (candstr, candstr + newlen);
}
fprintf(stderr, "'\n");
@@ -1980,20 +2023,21 @@
int buflen = (buf->displayEnd - buf->displayBuf) + bdiff;
wchar *dispp = clp->dispp;
wchar tmp;
-
+
if (buflen > buf->bufferSize
&& resizeBuffer(buf, buflen) < 0) {
return -1;
}
-
+
moveDBuf(buf, end, bdiff);
-
+
/*
* $B8uJdJ8;zNs$NA^F~$O!"(Bjl_get_kanji() $B$rMQ$$$k$N$G!"(B
* $B$=$l$,@_Dj$9$k:G8e$N(B NUL $BJ8;z$KCm0U!#(B
*/
tmp = dispp[newlen];
- if (jl_get_kanji(buf->wnn, start, newend, dispp) <= 0) {
+ if (ki2_jl_get_kanji(buf->wnn, start, newend,
+ dispp, newlen) <= 0) {
jcErrno = JE_WNNERROR;
return -1;
}
@@ -2011,12 +2055,12 @@
{
wchar *kanap, *dispp;
int i, j;
-
+
if (buf->nClause + cdiff > buf->clauseSize
&& resizeCInfo(buf, buf->nClause + cdiff) < 0) {
return -1;
}
-
+
moveCInfo(buf, end, cdiff);
kanap = clp->kanap;
@@ -2040,7 +2084,7 @@
*/
for (i = 0; i < start; i++)
buf->clauseInfo[i].ltop = jl_dai_top(buf->wnn, i);
- for (i = newend; i < newclen; i++)
+ for (i = newend; i < newclen; i++)
buf->clauseInfo[i].ltop = jl_dai_top(buf->wnn, i);
}
@@ -2092,7 +2136,7 @@
{
int i, j, k;
int status;
- wchar yomi[512], kanji[512];
+ wchar yomi[CL_BUFSZ], kanji[CL_BUFSZ];
TRACE("forceStudy", "Enter")
@@ -2173,13 +2217,20 @@
* $B$3$3$G$O(B jllib $B$NFI$_%G!<%?$r;HMQ$9$k(B
*/
+ /* $BFI$_J8;zNs$HJQ49:QJ8;zNs$ND9$5%A%'%C%/(B */
+ if (jl_yomi_len(buf->wnn, i, j) >= CL_BUFSZ ||
+ jl_kanji_len(buf->wnn, i, j) >= CL_BUFSZ) {
+ /* $B%P%C%U%!%*!<%P%U%m!<$rHr$1$k(B */
+ continue;
+ }
+
/* $BFI$_J8;zNs$N<h$j=P$7(B */
- if (jl_get_yomi(buf->wnn, i, j, yomi) < 0) {
+ if (ki2_jl_get_yomi(buf->wnn, i, j, yomi, CL_BUFSZ) < 0) {
jcErrno = JE_WNNERROR;
return -1;
}
/* $BJQ49:Q$_J8;zNs$r<h$j=P$9(B */
- if (jl_get_kanji(buf->wnn, i, j, kanji) < 0) {
+ if (ki2_jl_get_kanji(buf->wnn, i, j, kanji, CL_BUFSZ) < 0) {
jcErrno = JE_WNNERROR;
return -1;
}
@@ -2217,7 +2268,10 @@
return -1;
}
for (k = 0; k < status; k++) {
- jl_get_zenkouho_kanji(buf->wnn, k, kanji);
+ ki2_jl_get_zenkouho_kanji(buf->wnn, k, kanji,
+ CL_BUFSZ);
+ /* $BI,$:(B NUL
$B%?!<%_%M!<%H$5$l$k$h$&$K$7$F$*$/(B */
+ kanji[CL_BUFSZ - 1] = 0;
if (wstrcmp(yomi, kanji) != 0)
continue;
if (jl_set_jikouho(buf->wnn, k) < 0) {
@@ -2863,7 +2917,9 @@
int
jcGetCandidate(jcConvBuf *buf, int n, wchar *candstr)
{
- TRACE("jcGetCandidates", "Enter")
+ wchar tmp[CL_BUFSZ];
+
+ TRACE("jcGetCandidate", "Enter")
CHECKFIXED(buf);
@@ -2880,7 +2936,9 @@
}
/* $BJ8;zNs$r%3%T!<(B */
- jl_get_zenkouho_kanji(buf->wnn, n, candstr);
+ ki2_jl_get_zenkouho_kanji(buf->wnn, n, tmp, CL_BUFSZ);
+ tmp[CL_BUFSZ - 1] = 0;
+ wstrcpy(candstr, tmp);
return 0;
}
@@ -3630,7 +3688,7 @@
char fzk[1024];
int serv_ver, lib_ver;
- if (jl_fuzokugo_get(wnnbuf, fzk) != -1) {
+ if (ki2_jl_fuzokugo_get(wnnbuf, fzk, 1024) != -1) {
env_exists = 1;
TRACE("jcOpen2", "env exists");
} else {
@@ -3817,7 +3875,7 @@
fprintf(stderr, "'\n");
if (clp->conv == 1) {
fprintf(stderr, "clause[%d]: Yomi = '", i);
- (void)jl_get_yomi(buf->wnn, i, i + 1, ws);
+ (void)ki2_jl_get_yomi(buf->wnn, i, i + 1, ws,
sizeof(ws));
printBuffer(ws, ws + jl_yomi_len(buf->wnn, i, i + 1));
fprintf(stderr, "'\n");
}
@@ -3826,7 +3884,7 @@
fprintf(stderr, "'\n");
if (clp->conv == 1) {
fprintf(stderr, "clause[%d]: Conv = '", i);
- (void)jl_get_kanji(buf->wnn, i, i + 1, ws);
+ (void)ki2_jl_get_kanji(buf->wnn, i, i + 1, ws,
sizeof(ws));
printBuffer(ws, ws + jl_kanji_len(buf->wnn, i, i + 1));
fprintf(stderr, "'\n");
}