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");
                }

Reply via email to