Mercurial > kinput2.yaz
comparison lib/wnnlib.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children | 983aff0dcf18 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92745d501b9a |
---|---|
1 /* | |
2 * wnnlib -- $B$+$J4A;zJQ49MQ%i%$%V%i%j(B (jllib $BBP1~HG(B) | |
3 * | |
4 * $B$3$N%i%$%V%i%j$O!"(Bkinput V2 $B$KIUB0$7$F$$$?!"(BSRA $B$N@PA>:,$5$s$N(B | |
5 * jclib 5.2 $B$r%Y!<%9$K:n@.$7$^$7$?!#(B | |
6 * | |
7 * $B?9It(B $B1QG7(B | |
8 */ | |
9 | |
10 /* | |
11 * Copyright (c) 1989 Software Research Associates, Inc. | |
12 * Copyright (c) 1998 MORIBE, Hideyuki | |
13 * | |
14 * Permission to use, copy, modify, and distribute this software and its | |
15 * documentation for any purpose and without fee is hereby granted, provided | |
16 * that the above copyright notice appear in all copies and that both that | |
17 * copyright notice and this permission notice appear in supporting | |
18 * documentation, and that the name of Software Research Associates not be | |
19 * used in advertising or publicity pertaining to distribution of the | |
20 * software without specific, written prior permission. Software Research | |
21 * Associates makes no representations about the suitability of this software | |
22 * for any purpose. It is provided "as is" without express or implied | |
23 * warranty. | |
24 * | |
25 * Author: Makoto Ishisone, Software Research Associates, Inc., Japan | |
26 * ishisone@sra.co.jp | |
27 * MORIBE, Hideyuki | |
28 */ | |
29 | |
30 /* | |
31 * Portability issue: | |
32 * | |
33 * + define SYSV, SVR4 or USG if you don't have bcopy() or bzero(). | |
34 * | |
35 * if you define USG (which should be defined if your OS is based | |
36 * on System V Rel 2) or SYSV (in case of System V Rel 3), | |
37 * memchr() is used for bzero(), and my own version of bcopy() | |
38 * is used in order to handle overlapping regions. | |
39 * | |
40 * if you define SVR4 (yes, System V Rel4), memmove() is used for | |
41 * bcopy(), and memchr() is used for bzero(). | |
42 * | |
43 * + wnnlib assumes bcopy() can handle overlapping data blocks. | |
44 * If your bcopy() can't, you should define OVERLAP_BCOPY, | |
45 * which force to use my own bcopy() rather than the one | |
46 * in libc.a. | |
47 */ | |
48 | |
49 /* | |
50 * $B35MW(B | |
51 * | |
52 * wnnlib $B$O(B Wnn6 $B$K$bBP1~$7$?(B kinput $B$N(B CcWnn $B%*%V%8%'%/%H8~$1$N9b%l%Y%k(B | |
53 * $B$+$J4A;zJQ49%i%$%V%i%j$G$"$k!#(B | |
54 * | |
55 * $B=>Mh$N(B Kinput $B$K$*$$$F$O!"(BWnn $B$H$N%$%s%?%U%'!<%9$O!"(Bjslib $B%Y!<%9$N(B | |
56 * jilib $B$H(B jclib $B$G$"$C$?!#$H$3$m$,!"(BWnn6 $B$G3HD%$5$l$?5!G=$r;HMQ$7$?$/$F(B | |
57 * $B$b!"(Bjslib $B%l%Y%k$N;EMM$,$[$H$s$IH=$i$J$+$C$?!#$3$N$?$a!"(Bmule $B$N(B egg $B%$(B | |
58 * $B%s%?%U%'!<%9$G;HMQ$7$F$$$k(B jllib $B$rMQ$$$F!"=>Mh$N(B jilib $B$H(B jclib $B$N%$(B | |
59 * $B%s%?%U%'!<%9$r$G$-$k$@$1JQ99$7$J$$$h$&$K$7$F!"?7$?$K(B wnnlib $B$H$7$F=q$-(B | |
60 * $B49$($?!#(B | |
61 * | |
62 * wnnlib $B$O!"(BWnn6 $B$@$1$G$J$/!"$=$l0JA0$N(B Wnn4 $B$K$bBP1~$7$F$$$k$O$:$G(B | |
63 * $B$"$k$,%F%9%H$O$7$F$$$J$$!#(B | |
64 * | |
65 * wnnlib $B$O!"=>Mh$N(B jclib $B$HF1MM$K!"$+$J%P%C%U%!$HI=<(%P%C%U%!$H$$$$D(B | |
66 * $B$N%P%C%U%!$r;}$D!#$+$J%P%C%U%!$K$OFI$_J8;zNs$,F~$j!"I=<(%P%C%U%!$K$OJQ(B | |
67 * $B497k2L(B($BI=<(J8;zNs(B)$B$,F~$k!#$+$J%P%C%U%!$H8@$&8F$SJ}$O$"$^$j@53N$G$O$J$$!#(B | |
68 * Wnn Version 4 $B0J9_$G$O4A;z$+$JJQ49$b$G$-$k$+$i$G$"$k!#(B | |
69 * | |
70 * $B%I%C%H$H%+%l%s%HJ8@a$H$$$&35G0$r;}$A!"J8;z$NA^F~(B / $B:o=|$O%I%C%H$N0LCV$K(B | |
71 * $BBP$7$F9T$J$o$l!"JQ49$=$NB>$NA`:n$O%+%l%s%HJ8@a$KBP$7$F9T$J$o$l$k!#(B | |
72 * Wnn Version 4 $B0J9_$G$OBgJ8@a$H>.J8@a$H$$$<oN`$NJ8@a$N35G0$,$"$k$,!"(B | |
73 * $B$=$l$KBP1~$7$F(B wnnlib $B$bEvA3$3$N#2<oN`$r07$&$3$H$,$G$-$k!#(B | |
74 * | |
75 * $B$3$N%i%$%V%i%j$O<!$N$h$&$J5!G=$rDs6!$9$k!#(B | |
76 * $B!&$+$J%P%C%U%!$X$NJ8;z$NA^F~(B / $B:o=|(B | |
77 * $B!&$+$J4A;zJQ49(B / $B:FJQ49(B / $BL5JQ49(B | |
78 * $B!&$R$i$,$J"N%+%?%+%JJQ49(B | |
79 * $B!&3NDj(B | |
80 * $B!&J8@a$N3HBg(B / $B=L>.(B | |
81 * $B!&%+%l%s%HJ8@a(B / $B%I%C%H$N0\F0(B | |
82 * $B!&<!8uJd(B/$BA08uJdCV$-49$((B | |
83 * $B!&8uJd<h$j=P$7(B / $BA*Br(B | |
84 * $B!&%P%C%U%!$N%/%j%"(B | |
85 * | |
86 * $BJ8;z%3!<%I$H$7$F$O(B Wnn $B$HF1$8$/(B EUC $BFbIt%3!<%I(B (process code) $B$r;HMQ$9$k!#(B | |
87 */ | |
88 | |
89 /* | |
90 * Wnn Version 6 (FI Wnn) $BBP1~$K$"$?$C$F(B | |
91 * | |
92 * $B=>Mh$N(B Kinput2 $B$G$O!"(BWnn $B$H$N%$%s%?!<%U%'!<%9$O!"(Bjslib $B$r%Y!<%9$K(B | |
93 * $B$7$?(Bjilib $B$H(B jclib $B$G!"$b$H$b$H(B Wnn Version 3 $B$N(B libjd $B$N>e$K:n$i(B | |
94 * $B$l$?%i%$%V%i%j$G$"$k!#(B | |
95 * | |
96 * Wnn Version 6 $BBP1~$K$"$?$C$F!"(Bjslib $B%l%Y%k$NDI2C5!G=$d>\:Y%$%s%?%U%'!<(B | |
97 * $B%9$,H=$i$J$+$C$?$?$a!"(Bjslib $B$NBe$o$j$K(B mule $B$N(B egg $B%$%s%?%U%'!<%9$G;H(B | |
98 * $BMQ$5$l$F$$$k(B jllib $B$r%Y!<%9$K$7$F!"(Bjilib $B$H(B jclib $B$r?7$?$K(B wnnlib $B$H$7(B | |
99 * $B$F=q$-49$($k$3$H$K$7$?!#=q$-49$($O!"0J2<$NJ}?K$G9T$C$?!#(B | |
100 * | |
101 * 1. $B%G!<%?9=B$!"%$%s%?%U%'!<%9(B ($B4X?tL>$dJQ?tL>$b(B) $B$r$J$k$Y$/=>Mh$N(B | |
102 * jclib$B$HF1$8$K$9$k!#(B | |
103 * | |
104 * 2. $B$+$J%P%C%U%!$HI=<(%P%C%U%!$NFs$D$NJ8;z%P%C%U%!$r;}$A!"(B | |
105 * $B$+$J%P%C%U%!$K$OFI$_!"I=<(%P%C%U%!$K$OJQ497k2L$,F~$k$H$+(B | |
106 * $BMM!9$JA`:n$O%+%l%s%HJ8@a$H8F$P$l$kJ8@a$KBP$7$F9T$J$o$l$k$H$+$$$C$?(B | |
107 * $B4pK\E*$J%3%s%;%W%H$OJQ$($J$$!#(B | |
108 * | |
109 * 3. $B=>Mh$N%i%$%V%i%j$r;H$C$?%"%W%j%1!<%7%g%s$,?7$7$$%i%$%V%i%j$K(B | |
110 * $B0\9T$7$d$9$$$h$&$K!"4X?t%$%s%?!<%U%'%$%9$b$G$-$k$@$1;w$?$b$N$K$9$k!#(B | |
111 * | |
112 * 4. 1,2,3 $B$NJ}?K$r$G$-$k$@$1<i$j$D$D!"(BWnn6 $B$GF3F~$5$l$?<!$N$h$&$J(B | |
113 * $B5!G=$r%5%]!<%H$9$k!#(B | |
114 * $B!&(BFI $BJQ49(B/$B3X=,(B | |
115 * $B!&L5JQ493X=,(B | |
116 * | |
117 * 5. 1 $B$+$i(B 4 $B$^$G$NJ}?K$K=>$$$D$D!"%/%$%C%/!&%O%C%/$9$k!#(B | |
118 */ | |
119 | |
120 /* | |
121 * $B%a%b(B ($BCm(B: $B:G=i$NItJ,$O!"@PA>:,$5$s$N(B jclib $B:n@.%a%b(B) | |
122 * | |
123 * ver 0.0 89/07/21 | |
124 * $B$H$j$"$($::n$j$O$8$a$k(B | |
125 * ver 0.1 89/08/02 | |
126 * $BH>J,$/$i$$$+$1$?(B | |
127 * $B<!8uJd4XO"$,$^$@$G$-$F$$$J$$(B | |
128 * ver 0.2 89/08/04 | |
129 * jcInsertChar() / jcDeleteChar() $B$r:n@.(B | |
130 * ver 0.3 89/08/07 | |
131 * $B0l1~$G$-$?(B | |
132 * $B$^$@$$$/$D$+5?LdE@$,$"$k$1$l$I(B | |
133 * ver 0.4 89/08/08 | |
134 * $B:#;H$C$?$h%S%C%H$N07$$$r;D$7$F!"$[$\$G$-$?$N$G$O$J$$$+$H(B | |
135 * $B;W$o$l$k(B | |
136 * $B:Y$+$$%P%0$r$+$J$j=$@5(B | |
137 * ver 0.5 89/08/09 | |
138 * $BN)LZ$5$s(B@KABA $B$K<ALd$7$?=j!":#;H$C$?$h%S%C%H$rMn$9$N$b(B | |
139 * $B%/%i%$%"%s%HB&$N@UG$$G$"$k$3$H$,$o$+$k(B | |
140 * $B$3$l$X$NBP1~(B | |
141 * $B$D$$$G$K%G!<%?9=B$$N@bL@$rDI2C(B | |
142 * $B%U%!%$%k$N%5%$%:$,(B 80KB $B$r1[$($F$7$^$C$?(B | |
143 * $B%3%a%s%H$r$H$l$P$+$J$j>.$5$/$J$k$s$@$1$I(B | |
144 * ver 0.6 89/08/22 | |
145 * jcDeleteChar() $B$rA4LLE*$K=q$-D>$9(B | |
146 * $B$3$l$G0l1~@5$7$/F0:n$9$k$h$&$K$J$C$?(B | |
147 * jcInsertChar() $B$G:G8e$N(B clauseInfo $B$N@_Dj$,4V0c$C$F$$$?$N$G(B | |
148 * $B$=$l$r=$@5(B | |
149 * jcPrintDetail() $B$K4JC1$J(B clauseInfo $B%G!<%?$N(B consistency check $B$r(B | |
150 * $BF~$l$k(B | |
151 * ver 0.7 89/08/26 | |
152 * jcExpand() $B$N%P%0=$@5(B | |
153 * $B>.J8@a$NC1J8@aJQ49$r>/$7=$@5(B | |
154 * ver 0.8 89/08/30 | |
155 * changecinfo() $B$G(B conv $B%U%i%0$r%;%C%H$9$k$N$rK:$l$F$$$?(B | |
156 * moveKBuf()/moveDBuf()/moveCInfo() $B$r>/$7=$@5(B | |
157 * SYSV $B$,(B define $B$5$l$F$$$l$P(B bcopy()/bzero() $B$NBe$o$j$K(B | |
158 * memcpy()/memset() $B$r;H$&$h$&$K=$@5(B | |
159 * ver 0.9 89/09/22 | |
160 * setLCandData() $B$G<!8uJd%P%C%U%!$N8uJd?t$K%+%l%s%HBgJ8@a$N(B | |
161 * $BJ,$r2C$($k$N$rK:$l$F$$$?(B | |
162 * ver 0.10 89/10/16 | |
163 * wnn-4.0.1 $B$G(B commonheader.h -> commonhd.h $B$K$J$C$?$N$G(B | |
164 * $B$=$l$N=$@5(B | |
165 * ver 0.11 89/10/18 | |
166 * USG $B$,(B define $B$5$l$F$$$F$b(B memcpy()/memset() $B$r;H$&$h$&$K=$@5(B | |
167 * ver 0.12 89/10/19 | |
168 * resizeBuffer() $B$G%I%C%H$N:F@_Dj$rK:$l$F$$$k$H$$$&=EBg$J%P%0$r=$@5(B | |
169 * ver 4.0 89/10/27 | |
170 * $B%P!<%8%g%sHV9f$r=$@5$7$F(B 4.0 $B$K$9$k!#(B | |
171 * --- kinput $B$r(B R4 $B$K(B contribute --- | |
172 * ver 4.1 90/06/04 | |
173 * $B%/%i%$%"%s%HB&$K$"$k<-=q!&IQEY%U%!%$%k$N%;!<%V$,$G$-$J$$$H$$$&(B | |
174 * $B=EBg$J%P%0$r=$@5(B | |
175 * ver 4.2 90/06/15 | |
176 * $B<-=q$,EPO?2DG=$+$I$&$+$NH=Dj$,4V0c$C$F$$$F!"5UJQ492DG=<-=q$N(B | |
177 * $B%;!<%V$,$G$-$J$$$H$$$&$^$?$^$?=EBg$J%P%0$r=$@5(B | |
178 * $B:#$N$H$3$m(B kinput/wterm $B$H$bC18lEPO?5!G=$,$D$$$F$J$$$N$G(B | |
179 * $B<B32$O$J$+$C$?$,(B | |
180 * ver 4.3 91/08/15 | |
181 * $BJ8;z%G!<%?7?$H$7$F(B wchar_t $B$G$O$J$/!"(Bwchar $B$r;H$&$h$&$K$9$k(B | |
182 * $B:G=*E*$K$O(B Wnn $B$N<!4|%P!<%8%g%s$N7?$K9g$o$;$k$D$b$j(B | |
183 * ver 4.4 91/09/18 | |
184 * SYSV $B$^$?$O(B USG $B$,Dj5A$5$l$F$$$k>l9g$K$O<+F0E*$K(B OVERLAP_BCOPY | |
185 * $B$bDj5A$9$k$h$&$K$7$?(B | |
186 * SVR4 $B$,Dj5A$5$l$F$$$k>l9g$K$O(B bcopy $B$NBe$o$j$K(B memmove() $B$r;HMQ(B | |
187 * $B$9$k$h$&$K$7$?(B | |
188 * ver 4.5 91/09/23 | |
189 * DEBUG $B$r(B DEBUG_JCLIB $B$KJQ99(B | |
190 * ver 5.0 91/10/01 | |
191 * kinput2 $B%j%j!<%98~$1$K%P!<%8%g%sHV9f$r=$@5$7$F(B 5.0 $B$K$9$k!#(B | |
192 * --- kinput2 $B$r(B R5 $B$K(B contribute --- | |
193 * ver 5.1 92/02/07 | |
194 * John Yates $B$5$s(B (yates@bldrsoft.com) $B$+$i(B getLCandDataLen() $B$G(B | |
195 * $BJ8;z?t$r?t$(4V0c$($F$$$?$N$r;XE&$5$l$?$N$G$=$l$N=$@5(B | |
196 * ver 5.2 92/12/24 | |
197 * jcInsertChar() $B$G%G!<%?$N=i4|2=$r$7$F$$$J$+$C$?ItJ,$,$"$C$?(B | |
198 * $B$N$G=$@5(B ($BCM$,BeF~$5$l$k$^$G;HMQ$5$l$J$$$N$G%P%0$G$O$J$$$N$@$,(B | |
199 * $B$A$g$C$H5$;}$A$o$k$$$N$G(B) | |
200 * | |
201 * --- wnnlib $B:n@.%a%b(B --- | |
202 * | |
203 * ver 0.1 98/03/12 | |
204 * $B$H$j$"$($:!"(Bjllib $B%$%s%?%U%'!<%9$K=q49$($r;O$a$k!#(B | |
205 * ver 0.2 98/03/16 | |
206 * $B$^$@$$$/$D$+7|G0;v9`$O$"$k$b$N$N!"4pK\E*$J=q49$($,=*$o$C$?$N$G!"(B | |
207 * $B%G%P%C%0$r;O$a$k!#$=$l$J$j$K!"F0$$$F$$$kMM;R!#(B | |
208 * ver 0.3 98/03/18 | |
209 * $B$$$/$+%P%0$,8+$D$+$C$?(B ($B%3%"!&%@%s%W$7$?(B) $B$N$G!"$=$l$i$r=$@5!#(B | |
210 * $B$^$@!"(BWnn6 $B$N5!G=$,M-8z$K$J$C$F$$$k$+NI$/$o$+$i$J$$!#(B | |
211 * ver 0.4 98/07/01 | |
212 * $B0JA0$+$i5$$K$J$C$F$$$?%k!<%W$K4Y$k8=>]$N860x$,$d$C$HH=$C$?!#(B | |
213 * $B860x$O!"JQ49$N(B cancel $B$N1dD9$G8F$P$l$k(B expandOrShrink $B$NCf$G!"(B | |
214 * $BL5JQ49;XDj$N;~$G$b(B ltop ($BBgJ8@a(B) $B%U%i%C%0$r%j%;%C%H$7$F$$$J$+$C(B | |
215 * $B$?$?$a$G!"$=$l$r=$@5$7$?!#(B | |
216 * ver 0.5 98/10/15 | |
217 * $B:G8e$N=$@5$+$iLs(B 3 $B%v7n4V!";HMQ$7$?$,FC$KLdBj$,$J$+$C$?$N$G!"(B | |
218 * kinput2-fix5 $B$N(B alpha $BHG$,$G$?$N$r5!2q$K!"(Bkinput2 $B%a!<%j%s%0!&(B | |
219 * $B%j%9%H$XEj9F!#(B | |
220 * ver 0.6 98/12/03 | |
221 * $B@PA>:,$5$s$h$j!"J8@a3HBg$N$G$N%P%0$NJs9p$,$"$C$?$N$G(B (kinput2 | |
222 * $B%a!<%j%s%0!&%j%9%H(B 2106 $B!A(B 2118 $B;2>H(B)$B!"$=$l$r=$@5!#(B | |
223 * | |
224 * --- kinput2-fix-alpha2 $B$K<h$j9~$^$l$k(B --- | |
225 * | |
226 * ver 0.7 98/12/23 | |
227 * doKantanSCConvert() $B$G>.J8@a$H$7$FC1J8@aJQ49$7$J$1$l$P$$$1$J$$(B | |
228 * $B$H$3$m$r!"BgJ8@a$H$7$FJQ49$7$F$$$?%P%0$r=$@5!#(B | |
229 * | |
230 * ver 0.8 99/01/06 | |
231 * kinput2-fix5-alpha4 $B$,$G$?$N$r5!2q$K!"%I%C%H0J9_$r:o=|$9$kJT=8(B | |
232 * $B5!G=(B (kill-line) $B$r<B8=$9$k(B jcKillLine() $B$rDI2C$9$k(B ($B<B$O!"(Bwnnlib | |
233 * $B:n@.;~$+$i<B8=$7$h$&$H;W$C$F$$$F!"%@%_!<4X?t$@$1$O(B wnnlib $B$KB8(B | |
234 * $B:_$7$F$$$?(B)$B!#$3$l$N%G%P%C%0Cf$K!">e$N(B ver 0.4 $B$G=$@5$7$?$O$:$N(B | |
235 * $B%P%0$,:F8=!#(B | |
236 * | |
237 * ver 0.9 99/01/18 | |
238 * $B$d$O$j!"(Bcancel $B$N1dD9$N=hM}$,$&$^$/$J$$$3$H$,H=L@!#$D$^$j!"J8(B | |
239 * $B@a3HBg$K$h$k(B cancel $B=hM}$G$O!"J8@a>pJs$,(B CcWnn $B$,4|BT$9$k$b$N(B | |
240 * $B$H0[$C$F$$$k$?$a(B ($B$3$l$,!"(Bjclib $B$H(B wnnlib $B$N0c$$(B)$B!"8mF0:n$r$7(B | |
241 * $B$?!#$3$N$?$a!"FHN)$7$?(B cancel $B=hM}$r(B jcCancel() $B%U%!%s%/%7%g%s(B | |
242 * $B$H$7$F<B8=$9$k$3$H$K$7$?!#$G$b!"(Bexpand-noconv $B$d(B shrink-noconv | |
243 * $B$J$I$G$OF1MM$NLdBj$,B8:_$9$k$N$G!"(Bjclib $B$H$N8_49$rJ]$D0UL#$G!"(B | |
244 * expandOrShrink $B$NCf$GFCJL07$$$9$k$3$H$K$7$?(B ($B;H$&?M$O!"$$$J$$(B | |
245 * $B$H;W$&$,!#(Bdoc/ccdef $B;2>H(B)$B!#(B | |
246 * $B$^$?!"(BgetHint() $B$H(B forceStudy() $B$N=hM}$r<c43$N8+D>$7$?!#(B | |
247 * | |
248 * ver 0.99 99/03/05 | |
249 * $BA02s$N(B getHint() $B$N=hM}$NI{:nMQ$G!"(BsetCandiate() $B$G<!8uJd<h$j=P$7(B | |
250 * $B8e$NBgJ8@a>pJs$NJQ99J}K!$K$"$C$?@x:_%P%0$r=$@5!#(B | |
251 * | |
252 * ver ?.?? 99/03/29 ishisone | |
253 * $BA0$K<h$j=P$7$?8uJd0lMw$r:FMxMQ$9$k$+$I$&$+$NH=Dj$rJQ99!#(B | |
254 * $B:FMxMQ$N>r7o$r$-$D$/$9$k!#$^$?(B Wnn4 $B$N(B jl $B%i%$%V%i%j$NIT6q9g(B | |
255 * ($B;EMM$+$b(B) $B$N2sHr:v$NAH$_9~$_!#(B | |
256 * | |
257 * ver ?.?? 99/04/12 ishisone | |
258 * jcOpen() $B$K2C$($F(B jcOpen2() $B$r<BAu!#$3$l$O(B Wnn4 $B$H(B Wnn6 $B$=$l$>$l$N(B | |
259 * $B=i4|2=%U%!%$%k$r;XDj$9$k$3$H$,$G$-!"<B:]$K@\B3$7$?%5!<%P$N(B | |
260 * $B%P!<%8%g%s$r%A%'%C%/$7$F!"$I$A$i$r;HMQ$9$k$+7h$a$k$H$$$&$b$N!#(B | |
261 * | |
262 * ver ?.?? 99/05/07 ishisone | |
263 * $B!VL5NLBg?t!WLdBj$N2sHr:v$N<BAu!#$H$O$$$C$F$bJ8@a?-=L$N:]$N(B | |
264 * $BA0J8@a$H$N@\B3$r$d$a$k$@$1!#!VL5NLBg?t!WLdBj$K$D$$$F$O(B | |
265 * expandOrShrink() $B$N%3%a%s%H;2>H!#(B | |
266 * | |
267 * ver ?.?? 99/05/25 ishisone | |
268 * config.h $B$r%$%s%/%k!<%I$7$J$$$h$&$K$9$k!#I,MW$J$N$O(B LIBDIR $B$@$1(B | |
269 * $B$@$7!"(Bconfig.h $B$N(B LIBDIR $B$NCM$,@5$7$$$H$$$&J]>Z$b$J$$$?$a!#(B | |
270 * /usr/local/lib/wnn $B$K7h$a$&$A!#(B($B%*!<%P!<%i%$%I$9$k$3$H$O$G$-$k(B) | |
271 * | |
272 * --- kinput2 version 3.0 $B%j%j!<%9(B --- | |
273 * | |
274 * ver ?.?? 01/01/10 | |
275 * Wnn7 $BBP1~!#$H$O$$$C$F$b:G>.8B$NBP1~$G!"(BWnn7 $B$N?7$7$$5!G=$r(B | |
276 * $BMxMQ$G$-$k$o$1$G$O$J$$!#(B | |
277 * $B;HMQ$5$l$F$$$J$$JQ?t$r:o=|!#(B | |
278 */ | |
279 | |
280 /* | |
281 * $B%U%!%s%/%7%g%s(B | |
282 * | |
283 * struct wnn_buf jcOpen(char *servername, char *envname, | |
284 * char *rcfilename, int override, | |
285 * void (*errmsgfunc)(), int (*confirmfunc)(), | |
286 * int timeout) | |
287 * jl_open $B$"$k$$$O(B jl_open_lang $B$KBP1~$7$?(B wnnlib $B$N%$%s%?%U%'!<(B | |
288 * $B%9$G!"$3$N4X?t$NCf$G<B:]$K(B jl_open $B$"$k$$$O(B jl_open_lang $B$r8F(B | |
289 * $B$S=P$9!#(Boverride $B$,(B True $B$N>l9g!"4{$K4D6-$,%5!<%PB&$K$"$C$F$b!"(B | |
290 * $B4D6-$r:F=i4|2=$9$k!#(B | |
291 * | |
292 * int jcClose(struct wnn_buf *wnnbuf) | |
293 * jl_close $B$r8F$S=P$7!"(BjcOpen $B$G3MF@$7$?(B wnnbuf $B$N2rJ|$H%5!<%P$H(B | |
294 * $B$N@\B3$r@Z$k!#(B | |
295 * | |
296 * int jcIsConnect(struct wnn_buf *wnnbuf) | |
297 * $B%5!<%P$H$N@\B3>uBV$r(B jl_isconnect $B$GD4$Y$k!#(Bwnnbuf $B$,(B NULL$B!"(B | |
298 * $B4D6-$,:n@.$5$l$F$$$J$$!"$"$k$$$O%5!<%P$H@\B3$5$l$F$$$J$$>l9g$K$O(B 0$B!#(B | |
299 * wnnbuf $B$,%5!<%P$H@\B3$5$l$F$$$l$P!"(B1 $B$rJV$9!#(B | |
300 * | |
301 * jcConvBuf *jcCreateBuffer(struct wnn_env *env, int nclause, int buffersize) | |
302 * $B;XDj$5$l$?4D6-$r;H$C$FJQ49$N%P%C%U%!$r:n@.$9$k!#%P%C%U%!$O(B | |
303 * $BJ#?t:n$k$3$H$,$G$-$k!#0l$D$N%P%C%U%!$G$OF1;~$KJ#?t$NJ8$r(B | |
304 * $BJQ49$9$k$3$H$O$G$-$J$$$N$G!"J#?t$NJ8$rJB9T$7$FJQ49$7$?$$>l9g$K$O(B | |
305 * $B4v$D$+$N%P%C%U%!$rMQ0U$7$J$/$F$O$J$i$J$$!#(B | |
306 * $B4D6-$N@_Dj$^$G$rM=$a$d$C$F$*$/I,MW$,$"$k!#$D$^$j%5!<%P$H$N@\B3!"(B | |
307 * $B4D6-$N@8@.!"<-=q$N@_Dj$J$I$O(B jcOpen $B$G9T$C$F$*$/I,MW$,$"$k!#(B | |
308 * $B0z?t$N(B nclause $B$H(B buffersize $B$G!"$=$l$>$l=i4|2=;~$K%"%m%1!<%H$9$k(B | |
309 * $BJ8@a>pJs$*$h$S$+$J(B/$BI=<(%P%C%U%!$NBg$-$5$,;XDj$G$-$k!#(B | |
310 * $B$?$@$7$3$l$i$O!"%5%$%:$,B-$j$J$/$J$l$PI,MW$K1~$8$F<+F0E*$K(B | |
311 * $BA}$d$5$l$k$?$a!"$3$3$K;XDj$7$?0J>e$N?t$NJ8@a$d!"J8;zNs$,JQ49$G$-$J$$(B | |
312 * $B$o$1$G$O$J$$!#$=$l$>$l(B 0 $B$^$?$OIi$NCM$r;XDj$9$k$H!"%G%U%)%k%H$N(B | |
313 * $B%5%$%:$G%"%m%1!<%H$5$l$k!#=>$C$FDL>o$O(B nclause/buffersize $B$H$b(B | |
314 * 0 $B$r;XDj$7$F$*$1$P$h$$!#(B | |
315 * $B%j%?!<%s%P%j%e!<$H$7$F%P%C%U%!$rJV$9!#%(%i!<$N;~$K$O(B NULL $B$,(B | |
316 * $BJV$5$l$k!#(B | |
317 * | |
318 * int jcDestroyBuffer(jcConvBuf *buf, int savedic) | |
319 * $B%P%C%U%!$N;HMQ$r=*N;$9$k!#4D6-$r>C$7$?$j!"%5!<%P$H$N@\B3$r@Z$C$?$j(B | |
320 * $B$9$k$3$H$O!"(BjcClose $B$G9T$&!#(B | |
321 * $B0z?t(B savedic $B$,(B 0 $B$G$J$1$l$P!"4D6-Cf$G;HMQ$5$l$F$$$kA4$F$N<-=q$r(B | |
322 * $B%;!<%V$9$k!#(B | |
323 * | |
324 * int jcClear(jcConvBuf *buf) | |
325 * $B%P%C%U%!$r%/%j%"$9$k!#?7$?$KJQ49$r;O$a$k:]$K$O:G=i$K$3$N(B | |
326 * $B%U%!%s%/%7%g%s$r8F$P$J$1$l$P$J$i$J$$!#(B | |
327 * | |
328 * int jcInsertChar(jcConvBuf *buf, int c) | |
329 * $B%I%C%H$K#1J8;zA^F~$9$k!#(B | |
330 * $B%+%l%s%HJ8@a$,4{$KJQ49$5$l$F$$$l$PL5JQ49$N>uBV$KLa$k!#(B | |
331 * $B%+%l%s%HJ8@a$OBgJ8@a$G$"$k!#(B | |
332 * | |
333 * int jcDeleteChar(jcConvBuf *buf, int prev) | |
334 * $B%I%C%H$NA0Kt$O8e$m$N#1J8;z$r:o=|$9$k!#(B | |
335 * $B%+%l%s%HJ8@a$,4{$KJQ49$5$l$F$$$l$PL5JQ49$N>uBV$KLa$k!#(B | |
336 * $B%+%l%s%HJ8@a$OBgJ8@a$G$"$k!#(B | |
337 * | |
338 * int jcConvert(jcConvBuf *buf, int small, int tan, int jump) | |
339 * $B%+%l%s%HJ8@a$+$i8e$m$rJQ49$9$k!#(B | |
340 * $B0z?t(B tan $B$,(B 0 $B$J$iO"J8@aJQ49!"$=$&$G$J$1$l$P%+%l%s%HJ8@a$r(B | |
341 * $BC1J8@aJQ49$7!"$=$N$"$H$rO"J8@aJQ49$9$k!#(B | |
342 * $B0z?t(B small $B$,(B 0 $B$G$J$1$l$P>.J8@a$,!"$=$&$G$J$1$l$PBgJ8@a$,(B | |
343 * $B%+%l%s%HJ8@a$H$7$F;H$o$l$k!#(B | |
344 * $B0z?t(B jump $B$G!"JQ498e$N%+%l%s%HJ8@a$N0LCV$,7h$^$k!#(Bjump $B$,(B | |
345 * 0 $B$J$i%+%l%s%HJ8@a$N0LCV$OJQ49$7$F$bJQ$o$i$J$$(B ($B$?$@$7(B | |
346 * $B%+%l%s%HJ8@a$H$7$FBgJ8@a$r;XDj$7$?>l9g!"JQ498e$N%+%l%s%H(B | |
347 * $B>.J8@a$O%+%l%s%HBgJ8@a$N:G=i$N>.J8@a$K$J$k(B) $B$,!"(B0 $B$G$J$1$l$P(B | |
348 * $B:G8e$NJ8@a$N<!(B ($B6uJ8@a(B) $B$K0\F0$9$k!#C`<!JQ49$7$F$$$/$h$&$J(B | |
349 * $B%"%W%j%1!<%7%g%s$G$O$3$l$r(B 1 $B$K$9$k$H$h$$$@$m$&!#(B | |
350 * | |
351 * int jcUnconvert(jcConvBuf *buf) | |
352 * $B%+%l%s%HBgJ8@a$rL5JQ49$N>uBV$KLa$9!#(B | |
353 * $B%+%l%s%HBgJ8@a$,$$$/$D$+$N>.J8@a$+$i$G$-$F$$$?>l9g!"$3$l$i$N(B | |
354 * $B>.J8@a$O$^$H$a$i$l!"0l$D$NL5JQ49>uBV$NJ8@a$K$J$k!#(B | |
355 * $B%+%l%s%H>.J8@a$rL5JQ49$KLa$95!G=$OMQ0U$7$J$$!#$J$<$+$H$$$&$H!"(B | |
356 * $BBgJ8@a$NCf$N(B 1 $B>.J8@a$N$_$,L5JQ49$K$J$C$F$7$^$&$H!"$=$NJ8@a$K(B | |
357 * $B4X$7$F(B jcMove() $B$G0\F0$r9T$J$C$?;~!"$I$&0\F0$9$l$P$h$$$N$+(B | |
358 * $B$h$/$o$+$i$J$$!"$D$^$j0\F0$N%;%^%s%F%#%/%9$,ITL@3N$K$J$C$F$7$^$&(B | |
359 * $B$+$i$G$"$k!#(B | |
360 * | |
361 * int jcKana(jcConvBuf *buf, int small, int kind) | |
362 * $B%+%l%s%HJ8@a$r$+$J$K$9$k!#(B | |
363 * $B0z?t(B kind $B$,!"(BJC_HIRAGANA $B$J$i$R$i$,$J!"(BJC_KATAKANA $B$J$i%+%?%+%J$K(B | |
364 * $BJQ$o$k!#J8@a$NJQ49>uBV$OJQ2=$7$J$$!#$D$^$jJQ49$5$l$F$$$l$P(B | |
365 * $BJQ49>uBV$N$^$^!"L$JQ49$N>uBV$J$iL$JQ49$N$^$^$G$"$k!#(B | |
366 * $B0z?t(B small $B$,(B 0 $B$G$J$1$l$P%+%l%s%H>.J8@a$,!"$=$&$G$J$1$l$P(B | |
367 * $B%+%l%s%HBgJ8@a$,JQ$o$k!#(B | |
368 * $B%+%l%s%HBgJ8@a$r$+$J$K$9$k>l9g!"$=$NCf$N>.J8@a$O0l$D$K$^$H$a$i$l$k!#(B | |
369 * | |
370 * int jcFix(jcConvBuf *buf) | |
371 * $B8=:_!"%P%C%U%!$K$O$$$C$F$$$kJQ49J8;zNs$r3NDj$5$;$k!#(B | |
372 * | |
373 * int jcFix1(jcConvBuf *buf) | |
374 * $B8=:_!"%P%C%U%!$K$O$$$C$F$$$kJQ49J8;zNs$N@hF,0lJ8;z$@$1$r3NDj$5$;$k!#(B | |
375 * | |
376 * int jcExpand(jcConvBuf *buf, int small, int convf) | |
377 * $B%+%l%s%HJ8@a$ND9$5$r#1J8;z?-$P$9!#0z?t(B convf $B$,(B 0 $B$G$J$1$l$P(B | |
378 * $B?-$P$7$?$"$H:FJQ49$9$k!#(B | |
379 * $B0z?t(B small $B$,(B 0 $B$G$J$1$l$P>.J8@a$,!"$=$&$G$J$1$l$PBgJ8@a$,(B | |
380 * $B%+%l%s%HJ8@a$H$7$F;H$o$l$k!#(B | |
381 * | |
382 * int jcShrink(jcConvBuf *buf, int small, int convf) | |
383 * $B%+%l%s%HJ8@a$ND9$5$r#1J8;z=L$a$k!#0z?t(B convf $B$,(B 0 $B$G$J$1$l$P(B | |
384 * $B=L$a$?$"$H:FJQ49$9$k!#(B | |
385 * $B0z?t(B small $B$,(B 0 $B$G$J$1$l$P>.J8@a$,!"$=$&$G$J$1$l$PBgJ8@a$,(B | |
386 * $B%+%l%s%HJ8@a$H$7$F;H$o$l$k!#(B | |
387 * | |
388 * int jcNext(jcConvBuf *buf, int small, int prev) | |
389 * $B%+%l%s%HJ8@a$r<!8uJdKt$OA08uJd$GCV$-49$($k!#(B | |
390 * $B0z?t(B small $B$,(B 0 $B$G$J$1$l$P>.J8@a$,!"$=$&$G$J$1$l$PBgJ8@a$,(B | |
391 * $B%+%l%s%HJ8@a$H$7$F;H$o$l$k!#(B | |
392 * | |
393 * int jcCandidateInfo(jcConvBuf *buf, int small, int *ncandp, int *curcandp) | |
394 * $B<!8uJd$N>pJs$rJV$9!#(B | |
395 * $B<!8uJd0lMw$r=P$9$?$a$K$O:G=i$K$3$N4X?t$r8F$V$H$h$$!#(B | |
396 * | |
397 * int jcGetCandidate(jcConvBuf *buf, int n, wchar *candstr) | |
398 * $B;XDj$5$l$?8uJdHV9f$NJ8;zNs$rJV$9!#%+%l%s%H8uJdHV9f$O$3$NHV9f$K(B | |
399 * $BJQ$o$k!#I=<(%P%C%U%!$OJQ2=$7$J$$!#(B | |
400 * $BBg@N$N(B wnnlib $B$O<!8uJd$,MQ0U$5$l$F$$$J$1$l$PMQ0U$7$?$,!"$3$N%P!<%8%g%s(B | |
401 * $B$G$O%(%i!<$K$J$k!#(BjcNext $B$d(B jcCandidateInfo $B$r@h$K8F$s$G$*$+$J$1$l$P(B | |
402 * $B$J$i$J$$!#(B | |
403 * | |
404 * int jcSelect(jcConvBuf *buf, int n) | |
405 * $B;XDj$5$l$?HV9f$N8uJd$GI=<(%P%C%U%!$rCV$-49$($k!#(B | |
406 * $B%+%l%s%H8uJdHV9f$O$3$NHV9f$KJQ$o$k!#(B | |
407 * | |
408 * int jcDotOffset(jcConvBuf *buf) | |
409 * $BBgJ8@a$N@hF,$+$i$N%I%C%H$N%*%U%;%C%H$rJV$9!#(B | |
410 * $BNc$($P(B 0 $B$J$i%I%C%H$,%+%l%s%HJ8@a$N@hF,$K$"$k$3$H$K$J$k!#(B | |
411 * | |
412 * int jcIsConverted(jcConvBuf *buf, int cl) | |
413 * $B;XDj$5$l$?J8@a$,JQ49$5$l$F$$$k$+$I$&$+$rJV$9(B | |
414 * 0 $B$J$iL5JQ49>uBV(B | |
415 * 1 $B$J$iJQ49>uBV(B | |
416 * -1 $B$J$i(B $B%(%i!<(B | |
417 * | |
418 * int jcMove(jcConvBuf *buf, int small, int dir) | |
419 * $B%I%C%H!&%+%l%s%HJ8@a$r0\F0$9$k!#(B | |
420 * $B%+%l%s%HJ8@a$,JQ49:Q$_$G$"$l$PJ8@a0\F0$7!"$=$&$G$J$1$l$P(B | |
421 * $B%I%C%H$N$_$,0\F0$9$k!#(B | |
422 * $BJ8@a0\F0;~$K!"0z?t(B small $B$,(B 0 $B$G$J$1$l$P>.J8@aC10L$G0\F0$7!"(B | |
423 * $B$=$&$G$J$1$l$PBgJ8@aC10L$K0\F0$9$k!#(B | |
424 * | |
425 * int jcTop(jcConvBuf *buf) | |
426 * $B%I%C%H!&%+%l%s%HJ8@a$rJ8$N@hF,$K0\F0$9$k!#%+%l%s%H>.J8@a!&(B | |
427 * $B%+%l%s%HBgJ8@a$H$b$K0\F0$9$k!#(B | |
428 * | |
429 * int jcBottom(jcConvBuf *buf) | |
430 * $B%I%C%H!&%+%l%s%HJ8@a$rJ8$N:G8e$K0\F0$9$k!#%+%l%s%H>.J8@a!&(B | |
431 * $B%+%l%s%HBgJ8@a$H$b$K0\F0$9$k!#(B | |
432 * $B$b$7!":G8e$NJ8@a$,L5JQ49>uBV$G$"$l$P%+%l%s%HJ8@a$O$=$NJ8@a$K$J$j!"(B | |
433 * $B%I%C%H$O$=$NJ8@a$N:G8e$KMh$k!#$=$&$G$J$1$l$P%+%l%s%HJ8@a$O(B | |
434 * $B:G8e$NJ8@a$N<!(B ($B$D$^$j6u$NJ8@a(B) $B$KMh$k!#(B | |
435 * | |
436 * int jcChangeClause(jcConvBuf *buf, wchar *str) | |
437 * $B%+%l%s%HBgJ8@a$r;XDj$5$l$?J8;zNs$GF~$l49$($k!#(B | |
438 * $BI=<(%P%C%U%!$@$1$G$O$J$/!"$+$J%P%C%U%!$NFbMF$b(B | |
439 * $BCV$-49$o$k!#J8@a$OL5JQ49>uBV$K$J$k!#(B | |
440 * | |
441 * int jcSaveDic(jcConvBuf *buf) | |
442 * $B;HMQCf$N4D6-$G;H$o$l$F$$$kA4$F$N<-=qJB$S$KIQEY%U%!%$%k$r(B | |
443 * $B%;!<%V$9$k!#(B | |
444 * $B$3$N%U%!%s%/%7%g%s$O>o$K(B 0 $B$rJV$9!#K\Ev$K%;!<%V$5$l$?$+$N(B | |
445 * $B%A%'%C%/$O$7$J$$!#(B | |
446 * | |
447 * int jcCancel(jcConvBuf *buf) | |
448 * $B8=:_F~NOCf$N$9$Y$F$NJ8;zNs$r!"JQ49:Q$_$N$b$N$r4^$a$F!"$9$Y$FL$(B | |
449 * $BJQ49>uBV$K$9$k!#%*%j%8%J%k$N(B CcWnn $B$H(B jclib $B%$%s%?%U%'!<%9$G$O!"(B | |
450 * $B@hF,J8@a$rA4F~NOJ8;zNs$ND9$5$^$G3HD%$9$k$3$H$G!"$3$N=hM}$r9T$J$C(B | |
451 * $B$F$$$?$,!"$3$N=hM}$H(B jllib $B$H$N%$%s%?%U%'!<%9$,$&$^$/9g$o$:!"(B | |
452 * wnnlib $B$G$OFHN)$7$?%U%!%s%/%7%g%s$H$7$?!#(B | |
453 * | |
454 * int jcKillLine(jcConvBuf *buf) | |
455 * $B8=:_$N%I%C%H$"$k$$$O%+%l%s%HJ8@a0J9_$r:o=|$9$k!#%I%C%H$,$"$kJ8(B | |
456 * $B@a$,4{$KJQ49$5$l$F$$$l$P!"$=$NJ8@a!"$D$^$j%+%l%s%HJ8@a$r4^$a$F(B | |
457 * $B:o=|$9$k!#%I%C%H$"$k$$$O%+%l%s%HJ8@a$,@hF,$G$"$l$P!"(BjcClear() | |
458 * $B$HF1$8F0:n$r$9$k!#$D$^$j!"(BjcClear() $B<+BN$OITMW$K$J$k$N$@$,!"5l(B | |
459 * $B%$%s%?%U%'!<%9$r9MN8$7$F!"(BjcClear() $B$O$=$N$^$^;D$9!#(B | |
460 * $B$J$*!":o=|8e$N%I%C%H$H%+%l%s%HJ8@a$O!"A4JQ49BP>]J8;zNs$NKvHx!"(B | |
461 * $B$"$k$$$O:G=*J8@a$NKvHx$K$"$k6uJ8@a$K$J$k!#(B | |
462 * | |
463 * $B$3$l$i$N%U%!%s%/%7%g%s$OFC$K=q$+$l$F$$$J$1$l$P@.8y$N>l9g$K$O(B 0, | |
464 * $B%(%i!<$N>l9g$K$O(B -1 $B$rJV$9!#(B | |
465 * | |
466 */ | |
467 | |
468 /* | |
469 * $B%0%m!<%P%kJQ?t(B | |
470 * | |
471 * wnnlib $B$G;H$o$l$k%0%m!<%P%kJQ?t$O(B jcErrno $B$?$@0l$D$G$"$k!#(B | |
472 * | |
473 * extern int jcErrno | |
474 * $B%(%i!<$N:]$K!"%(%i!<%3!<%I$,BeF~$5$l$k!#%(%i!<%3!<%I$O(B wnnlib.h $B$G(B | |
475 * $BDj5A$5$l$F$$$k!#(B | |
476 */ | |
477 | |
478 /* | |
479 * $B%G!<%?9=B$(B | |
480 * | |
481 * wnnlib $B$N;}$D%G!<%?$G!"%"%W%j%1!<%7%g%s$+$iD>@\%"%/%;%9$7$F$h$$$N$O(B | |
482 * $BJQ49%P%C%U%!(B jcConvBuf $B7?$N(B public member $B$H=q$+$l$?ItJ,$N$_$G$"$k!#(B | |
483 * $BD>@\%"%/%;%9$7$F$h$$$H$$$C$F$b!"CM$r;2>H$9$k$@$1$G!"CM$rJQ99$9$k$3$H$O(B | |
484 * $B5v$5$l$J$$!#%"%W%j%1!<%7%g%s$,>!<j$KCM$rJQ99$7$?>l9g$N(B wnnlib $B$NF0:n$O(B | |
485 * $BJ]>Z$5$l$J$$!#(B | |
486 * | |
487 * <$BJQ49%P%C%U%!(B> | |
488 * | |
489 * jcConvBuf $B7?$O(B wnnlib.h $B$G<!$N$h$&$KDj5A$5$l$F$$$k!#(B | |
490 * | |
491 * typedef struct { | |
492 * /-* public member *-/ | |
493 * int nClause; $BJ8@a?t(B | |
494 * int curClause; $B%+%l%s%HJ8@aHV9f(B | |
495 * int curLCStart; $B%+%l%s%HBgJ8@a3+;OJ8@aHV9f(B | |
496 * int curLCEnd; $B%+%l%s%HBgJ8@a=*N;J8@aHV9f(B | |
497 * wchar *kanaBuf; $B$+$J%P%C%U%!$N@hF,(B | |
498 * wchar *kanaEnd; $B$+$J%P%C%U%!$NKvHx(B | |
499 * wchar *displayBuf; $BI=<(%P%C%U%!$N@hF,(B | |
500 * wchar *displayEnd; $BI=<(%P%C%U%!$NKvHx(B | |
501 * jcClause *clauseInfo; $BJ8@a>pJs(B | |
502 * struct wnn_env *env; | |
503 * /-* private member *-/ | |
504 * [ $B>JN,(B ] | |
505 * } jcConvBuf; | |
506 * | |
507 * nClause $B$O8=:_$NJ8@a?t$rI=$9!#$3$l$O>.J8@a$N?t$G$"$k!#(B | |
508 * curClause $B$O%+%l%s%H>.J8@a$NHV9f$G$"$k!#(B | |
509 * curLCStart $B$H(B curLCEnd $B$O%+%l%s%HBgJ8@a$NHO0O$r<($9!#(BcurLCStart $B$+$i(B | |
510 * curLCEnd-1 $B$NHO0O$NJ8@a$,%+%l%s%HBgJ8@a$G$"$k!#$D$^$j!"(BcurLCEnd $B$O(B | |
511 * $B<!$NBgJ8@a$N@hF,$NHV9f$G$"$k!#(B | |
512 * | |
513 * kanaBuf $B$H(B displayBuf $B$,$+$J%P%C%U%!$HI=<(%P%C%U%!$G$"$k!#(B | |
514 * jcInsertChar() $BEy$r;H$C$FF~NO$5$l$?FI$_$O$+$J%P%C%U%!$HI=<(%P%C%U%!$KF~$k!#(B | |
515 * $B$3$l$rJQ49$9$k$H!"I=<(%P%C%U%!$NJ}$@$1$,4A;z$NJ8;zNs$K$J$k!#(B | |
516 * kanaEnd $B$*$h$S(B displayEnd $B$O$=$l$>$l$N%P%C%U%!$KF~$l$i$l$?J8;zNs$N:G8e(B | |
517 * $B$NJ8;z$N<!$r;X$7$F$$$k!#$+$J%P%C%U%!!&I=<(%P%C%U%!$O$I$A$i$b(B NULL $B%?!<%_(B | |
518 * $B%M!<%H$5$l$J$$!#(B | |
519 * | |
520 * clauseInfo $B$OJ8@a>pJs$NF~$C$?G[Ns$G$"$k!#$3$l$O$"$H$G@bL@$9$k!#(B | |
521 * | |
522 * env $B$O$3$NJQ49%P%C%U%!$N;HMQ$9$k4D6-$G$"$k!#(B | |
523 * | |
524 * <$BJ8@a>pJs(B> | |
525 * | |
526 * $B3FJ8@a$N>pJs$O(B clauseInfo $B$H$$$&L>A0$N(B jcClause $B7?$NG[Ns$KF~$C$F$$$k!#(B | |
527 * jcClause $B7?$O(B wnnlib.h $B$G<!$N$h$&$KDj5A$5$l$F$$$k!#(B | |
528 * | |
529 * typedef struct { | |
530 * wchar *kanap; $BFI$_J8;zNs(B ($B$+$J%P%C%U%!$NCf$r;X$9(B) | |
531 * wchar *dispp; $BI=<(J8;zNs(B ($BI=<(%P%C%U%!$NCf$r;X$9(B) | |
532 * char conv; $BJQ49:Q$_$+(B | |
533 * 0: $BL$JQ49(B 1: $BJQ49:Q(B -1: wnnlib $B$G5?;wJQ49(B | |
534 * char ltop; $BBgJ8@a$N@hF,$+(B? | |
535 * } jcClause; | |
536 * | |
537 * kanap $B$O!"$+$J%P%C%U%!>e$N!"$=$NJ8@a$NFI$_$N;O$^$j$N0LCV$r<($9%]%$%s%?(B | |
538 * $B$G$"$k!#$^$?!"(Bdispp $B$O!"I=<(%P%C%U%!(B $B>e$G!"$=$NJ8@a$N;O$^$j$N0LCV$r<($9!#(B | |
539 * $B=>$C$F!"(Bn $BHV$NJ8@a$O!"(B | |
540 * $B$h$_(B: clauseInfo[n].kanap $B$+$i(B clauseInfo[n+1].kanap $B$NA0$^$G(B | |
541 * $B4A;z(B: clauseInfo[n].dispp $B$+$i(B clauseInfo[n+1].dispp $B$NA0$^$G(B | |
542 * $B$H$J$k!#$3$N$h$&$K(B n $BHVL\$NJ8@a$NHO0O$r<($9$N$K(B n+1 $BHVL\$N(B clauseInfo $B$,(B | |
543 * $BI,MW$J$?$a!"(BclauseInfo $B$NG[Ns$NMWAG$O>o$K@hF,$+$iJ8@a?t(B+1$B8D$,M-8z$G$"$k!#(B | |
544 * $B$J$*!"@hF,J8@a$O(B 0 $BHVL\$+$i;O$^$k$b$N$H$9$k!#(B | |
545 * | |
546 * conv $B$O$=$NJ8@a$NJQ49>uBV$rI=$9!#(B0 $B$J$iL$JQ49>uBV!"(B1 $B$J$iJQ49>uBV!"(B | |
547 * -1 $B$J$i(B jcKana() $B$K$h$C$F5?;wJQ49$5$l$?$3$H$r<($9!#$3$l$O!"JQ49$N3X=,$H(B | |
548 * $BIQEY>pJs$N99?7$N$?$a$K;HMQ$9$k!#(B | |
549 * | |
550 * ltop $B$,(B 0 $B$G$J$1$l$P$=$NJ8@a$,BgJ8@a$N@hF,$G$"$k$3$H$r<($9!#(Bimabit $B$O(B | |
551 * $B$=$NJ8@a$N448l$N:#;H$C$?$h%S%C%H$,F~$C$F$$$k!#(B | |
552 * | |
553 * kanap, dispp $BEy$G!"(Bn $BHVL\$NJ8@a$NHO0O$r<($9$N$K(B n+1 $BHVL\$NJ8@a>pJs$,(B | |
554 * $BI,MW$J$?$a!"(BclauseInfo $B$NG[Ns$NMWAG$O>o$K@hF,$+$iJ8@a?t(B+1$B8D$,M-8z$G$"$k!#(B | |
555 * $BJ8@a?t(B+1 $B8DL\$NJ8@a>pJs(B (clauseInfo[nClause]) $B$O(B | |
556 * kanap, dispp: $B$=$l$>$l(B kanaEnd, displayEnd $B$KEy$7$$(B | |
557 * conv: 0 ($BL$JQ49>uBV(B) | |
558 * ltop: 1 | |
559 * $B$G$"$k!#(B | |
560 * | |
561 * $BJ8@a>pJs$N(B kanap, dispp $B$rNc$r;H$C$F<($7$F$*$/!#(B | |
562 * | |
563 * $BNcJ8(B: $B$3$l$O%G!<%?9=B$$r<($9$?$a$NNcJ8$G$9(B ($BJ8@a?t(B 6) | |
564 * | |
565 * kanap: $B#0(B $B#1(B $B#2(B $B#3(B $B#4(B $B#5(B $B#6(B(=kanaEnd) | |
566 * $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B | |
567 * kanaBuf: $B$3$l$O$G!<$?$3$&$>$&$r$7$a$9$?$a$N$l$$$V$s$G$9(B | |
568 * | |
569 * dispp: $B#0(B $B#1(B $B#2(B $B#3(B $B#4(B $B#5(B $B#6(B(=displayEnd) | |
570 * $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B $B"-(B | |
571 * displayBuf: $B$3$l$O%G!<%?9=B$$r<($9$?$a$NNcJ8$G$9(B | |
572 */ | |
573 | |
574 #ifndef lint | |
575 static char *rcsid = "$Id: wnnlib.c,v 10.18 2002/01/10 15:51:47 ishisone Exp $"; | |
576 #endif | |
577 | |
578 #ifdef DEBUG_WNNLIB | |
579 #include <stdio.h> | |
580 #endif | |
581 #include "wnnlib.h" | |
582 #include "WStr.h" | |
583 #include <string.h> | |
584 #include <pwd.h> | |
585 #include <X11/Xos.h> | |
586 | |
587 #ifndef LIBDIR | |
588 #define LIBDIR "/usr/local/lib/wnn" | |
589 #endif | |
590 | |
591 #ifndef NULL | |
592 #define NULL 0 | |
593 #endif | |
594 | |
595 /* | |
596 * Wnn7 $B$G$OBgC@$K$b$$$/$D$+$N(B API $B4X?t$K%P%C%U%!%5%$%:$r;XDj$9$k(B | |
597 * $B0z?t$rDI2C$7$F$$$k$?$a!"%P!<%8%g%s$rD4$Y!"$=$l$K$h$C$F0z?t$r(B | |
598 * $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 | |
599 */ | |
600 | |
601 /* Wnn7 $B$+$I$&$+$NH=Dj(B */ | |
602 #ifdef WNN_RENSOU | |
603 #define WNN7 | |
604 #endif | |
605 | |
606 #ifdef WNN7 | |
607 #define ki2_jl_get_yomi jl_get_yomi | |
608 #define ki2_jl_get_kanji jl_get_kanji | |
609 #define ki2_jl_get_zenkouho_kanji jl_get_zenkouho_kanji | |
610 #define ki2_jl_fuzokugo_get jl_fuzokugo_get | |
611 #else | |
612 #define ki2_jl_get_yomi(a, b, c, d, sz) jl_get_yomi(a, b, c, d) | |
613 #define ki2_jl_get_kanji(a, b, c, d, sz) jl_get_kanji(a, b, c, d) | |
614 #define ki2_jl_get_zenkouho_kanji(a, b, c, sz) jl_get_zenkouho_kanji(a, b, c) | |
615 #define ki2_jl_fuzokugo_get(a, b, sz) jl_fuzokugo_get(a, b) | |
616 #endif /* WNN7 */ | |
617 | |
618 #ifdef DEBUG_WNNLIB | |
619 #ifdef __STDC__ | |
620 static void showBuffers(jcConvBuf *, char *); | |
621 static void printBuffer(wchar *start, wchar *end); | |
622 #else | |
623 static void showBuffers(); | |
624 static void printBuffer(); | |
625 #endif | |
626 #define TRACE(f, m) fprintf(stderr, "%s: %s\n", (f), (m)); | |
627 #else | |
628 #define TRACE(f, m) | |
629 #endif | |
630 | |
631 #define CHECKFIXED(buf) \ | |
632 { if ((buf)->fixed) { jcErrno = JE_ALREADYFIXED; return -1; } } | |
633 #define Free(p) {if (p) free((char *)(p));} | |
634 #define DotSet(buf) (buf)->dot = (buf)->clauseInfo[(buf)->curLCStart].kanap | |
635 | |
636 #define KANABEG 0xa4a1 /* '$B$!(B' */ | |
637 #define KANAEND 0xa4f3 /* '$B$s(B' */ | |
638 #define KATAOFFSET 0x100 /* $B%+%?%+%J$H$R$i$,$J$N%3!<%I!&%*%U%;%C%H(B */ | |
639 | |
640 /* 1$BJ8@a$NFI$_!&4A;z$r<h$j=P$9%P%C%U%!$N%5%$%:(B */ | |
641 #define CL_BUFSZ 512 | |
642 | |
643 /* $B%G%U%)%k%H$N%P%C%U%!%5%$%:(B */ | |
644 #define DEF_BUFFERSIZE 100 /* 100 $BJ8;z(B */ | |
645 #define DEF_CLAUSESIZE 20 /* 20 $BJ8@a(B */ | |
646 #define DEF_CANDSIZE 1024 /* 1K $B%P%$%H(B */ | |
647 #define DEF_RESETSIZE 10 /* 10 $BC18l(B */ | |
648 | |
649 /* buf->candKind $B$NCM(B */ | |
650 #define CAND_SMALL 0 /* $B>.J8@a8uJd(B */ | |
651 #define CAND_LARGE 1 /* $BBgJ8@a8uJd(B */ | |
652 | |
653 #define MAXFZK LENGTHBUNSETSU | |
654 | |
655 #ifdef SVR4 | |
656 #define bcopy(p, q, l) memmove(q, p, l) | |
657 #define bzero(p, l) memset(p, 0, l) | |
658 #else | |
659 #if defined(SYSV) || defined(USG) | |
660 #define OVERLAP_BCOPY | |
661 extern char *memset(); | |
662 #define bzero(p, l) memset(p, 0, l) | |
663 #endif | |
664 #endif | |
665 | |
666 #ifdef __STDC__ | |
667 /* $B%U%!%s%/%7%g%s%W%m%H%?%$%W@k8@(B */ | |
668 static void moveKBuf(jcConvBuf *, int, int); | |
669 static void moveDBuf(jcConvBuf *, int, int); | |
670 static void moveCInfo(jcConvBuf *, int, int); | |
671 static int resizeBuffer(jcConvBuf *, int); | |
672 static int resizeCInfo(jcConvBuf *, int); | |
673 static void setCurClause(jcConvBuf *, int); | |
674 static int getHint(jcConvBuf *, int, int); | |
675 static int renConvert(jcConvBuf *, int); | |
676 static int tanConvert(jcConvBuf *, int); | |
677 static int doKanrenConvert(jcConvBuf *, int); | |
678 static int doKantanDConvert(jcConvBuf *, int, int); | |
679 static int doKantanSConvert(jcConvBuf *, int); | |
680 static int unconvert(jcConvBuf *, int, int); | |
681 static int expandOrShrink(jcConvBuf *, int, int, int); | |
682 static int makeConverted(jcConvBuf *, int); | |
683 static int getCandidates(jcConvBuf *, int); | |
684 static int setCandidate(jcConvBuf *, int); | |
685 static void checkCandidates(jcConvBuf *, int, int); | |
686 static int forceStudy(jcConvBuf *, int); | |
687 #else | |
688 static void moveKBuf(); | |
689 static void moveDBuf(); | |
690 static void moveCInfo(); | |
691 static int resizeBuffer(); | |
692 static int resizeCInfo(); | |
693 static void setCurClause(); | |
694 static int getHint(); | |
695 static int renConvert(); | |
696 static int tanConvert(); | |
697 static int doKanrenConvert(); | |
698 static int doKantanDConvert(); | |
699 static int doKantanSConvert(); | |
700 static int unconvert(); | |
701 static int expandOrShrink(); | |
702 static int makeConverted(); | |
703 static int getCandidates(); | |
704 static int setCandidate(); | |
705 static void checkCandidates(); | |
706 static int forceStudy(); | |
707 #endif | |
708 | |
709 /* $B%(%i!<HV9f(B */ | |
710 int jcErrno; | |
711 | |
712 /* | |
713 * portability $B$N$?$a$N%U%!%s%/%7%g%s(B | |
714 */ | |
715 | |
716 #ifdef OVERLAP_BCOPY | |
717 #undef bcopy | |
718 static | |
719 bcopy(from, to, n) | |
720 register char *from; | |
721 register char *to; | |
722 register int n; | |
723 { | |
724 if (n <= 0 || from == to) return; | |
725 | |
726 if (from < to) { | |
727 from += n; | |
728 to += n; | |
729 while (n-- > 0) | |
730 *--to = *--from; | |
731 } else { | |
732 while (n-- > 0) | |
733 *to++ = *from++; | |
734 } | |
735 } | |
736 #endif | |
737 | |
738 /* | |
739 * wnnlib $BFbIt$G;H$o$l$k%U%!%s%/%7%g%s(B | |
740 */ | |
741 | |
742 /* moveKBuf -- $B$+$J%P%C%U%!$N;XDj$5$l$?J8@a$N@hF,$+$i$"$H$rF0$+$9(B */ | |
743 static void | |
744 moveKBuf(buf, cl, move) | |
745 jcConvBuf *buf; | |
746 int cl; | |
747 int move; | |
748 { | |
749 jcClause *clp = buf->clauseInfo + cl; | |
750 jcClause *clpend; | |
751 int movelen; | |
752 | |
753 TRACE("moveKBuf", "Enter") | |
754 | |
755 if (move == 0) return; | |
756 | |
757 if ((movelen = buf->kanaEnd - clp->kanap) > 0) { | |
758 /* $B$+$J%P%C%U%!$NFbMF$rF0$+$9(B */ | |
759 (void)bcopy((char *)clp->kanap, (char *)(clp->kanap + move), | |
760 movelen * sizeof(wchar)); | |
761 } | |
762 | |
763 /* $B$+$J%P%C%U%!$NJQ99$K9g$o$;$F(B clauseInfo $B$r%"%C%W%G!<%H$9$k(B */ | |
764 clpend = buf->clauseInfo + buf->nClause; | |
765 while (clp <= clpend) { | |
766 clp->kanap += move; | |
767 clp++; | |
768 } | |
769 | |
770 /* kanaEnd $B$N%"%C%W%G!<%H(B */ | |
771 buf->kanaEnd += move; | |
772 } | |
773 | |
774 /* moveDBuf -- $BI=<(%P%C%U%!$N;XDj$5$l$?J8@a$N@hF,$+$i$"$H$rF0$+$9(B */ | |
775 static void | |
776 moveDBuf(buf, cl, move) | |
777 jcConvBuf *buf; | |
778 int cl; | |
779 int move; | |
780 { | |
781 jcClause *clp = buf->clauseInfo + cl; | |
782 jcClause *clpend; | |
783 int movelen; | |
784 | |
785 TRACE("moveDBuf", "Enter") | |
786 | |
787 if (move == 0) return; | |
788 | |
789 if ((movelen = buf->displayEnd - clp->dispp) > 0) { | |
790 /* $BI=<(%P%C%U%!$NFbMF$rF0$+$9(B */ | |
791 (void)bcopy((char *)clp->dispp, (char *)(clp->dispp + move), | |
792 movelen * sizeof(wchar)); | |
793 } | |
794 | |
795 /* $BI=<(%P%C%U%!$NJQ99$K9g$o$;$F(B clauseInfo $B$r(B | |
796 * $B%"%C%W%G!<%H$9$k(B | |
797 */ | |
798 clpend = buf->clauseInfo + buf->nClause; | |
799 while (clp <= clpend) { | |
800 clp->dispp += move; | |
801 clp++; | |
802 } | |
803 | |
804 /* displayEnd $B$N%"%C%W%G!<%H(B */ | |
805 buf->displayEnd += move; | |
806 } | |
807 | |
808 /* moveCInfo -- ClauseInfo $B$N;XDj$5$l$?J8@a$N@hF,$+$i$"$H$rF0$+$9(B */ | |
809 static void | |
810 moveCInfo(buf, cl, move) | |
811 jcConvBuf *buf; | |
812 int cl; | |
813 int move; | |
814 { | |
815 jcClause *clp = buf->clauseInfo + cl; | |
816 int len; | |
817 | |
818 TRACE("moveCInfo", "Enter") | |
819 | |
820 /* move $B$K@5$N?t$r;XDj$9$l$PJ8@a$NA^F~!"Ii$J$iJ8@a$N:o=|$K$J$k(B */ | |
821 | |
822 if (move == 0) return; | |
823 | |
824 if ((len = buf->nClause + 1 - cl) > 0) { | |
825 (void)bcopy((char *)clp, (char *)(clp + move), | |
826 len * sizeof(jcClause)); | |
827 } | |
828 buf->nClause += move; | |
829 | |
830 /* | |
831 * $B8uJd$r<h$j=P$7$F$$$kJ8@a$,$"$l$P!"L58z$K$7$F$*$/!#(B | |
832 * | |
833 * $B$?$@$7!"8uJd$r<h$j=P$7$?7k2L!"J8@a?t$,JQ2=$7$?>l9g$K$O!"(B | |
834 * setCandidate() $B$NCf$G@_Dj$7$J$*$5$l$k!"$^$?!"(Bjllib $BFb$G$b(B | |
835 * $BF1$8J8@a$KBP$9$kA48uJd<h$j=P$7$,$"$C$?>l9g$N9MN8$,$"$k!#(B | |
836 * $B$H$$$&$3$H$G!"$3$3$O0BA4%5%$%I$G$$$/!#(B | |
837 */ | |
838 if (buf->candClause >= 0) { | |
839 buf->candClause = -1; | |
840 buf->candClauseEnd = -1; | |
841 } | |
842 } | |
843 | |
844 /* resizeBuffer -- $B$+$J(B/$BI=<(%P%C%U%!$NBg$-$5$rJQ$($k(B */ | |
845 static int | |
846 resizeBuffer(buf, len) | |
847 jcConvBuf *buf; | |
848 int len; | |
849 { | |
850 wchar *kbufold, *dbufold; | |
851 wchar *kbufnew, *dbufnew; | |
852 int allocsize; | |
853 jcClause *clp, *clpend; | |
854 | |
855 TRACE("resizeBuffer", "Enter") | |
856 | |
857 kbufold = buf->kanaBuf; | |
858 dbufold = buf->displayBuf; | |
859 | |
860 /* realloc $B$9$k(B */ | |
861 allocsize = (len + 1) * sizeof(wchar); | |
862 kbufnew = (wchar *)realloc((char *)kbufold, allocsize); | |
863 dbufnew = (wchar *)realloc((char *)dbufold, allocsize); | |
864 | |
865 if (kbufnew == NULL || dbufnew == NULL) { | |
866 Free(kbufnew); | |
867 Free(dbufnew); | |
868 jcErrno = JE_NOCORE; | |
869 return -1; | |
870 } | |
871 | |
872 buf->bufferSize = len; | |
873 | |
874 if (kbufnew == kbufold && dbufnew == dbufold) { | |
875 /* $B%]%$%s%?$OA0$HJQ$o$C$F$$$J$$(B */ | |
876 return 0; | |
877 } | |
878 | |
879 /* $B3F<o%]%$%s%?$r$D$1JQ$($k(B */ | |
880 | |
881 buf->kanaBuf = kbufnew; | |
882 buf->kanaEnd = kbufnew + (buf->kanaEnd - kbufold); | |
883 buf->displayBuf = dbufnew; | |
884 buf->displayEnd = dbufnew + (buf->displayEnd - dbufold); | |
885 | |
886 buf->dot = kbufnew + (buf->dot - kbufold); | |
887 | |
888 clp = buf->clauseInfo; | |
889 clpend = clp + buf->nClause; | |
890 while (clp <= clpend) { | |
891 clp->kanap = kbufnew + (clp->kanap - kbufold); | |
892 clp->dispp = dbufnew + (clp->dispp - dbufold); | |
893 clp++; | |
894 } | |
895 | |
896 return 0; | |
897 } | |
898 | |
899 /* resizeCInfo -- clauseInfo $B%P%C%U%!$NBg$-$5$rJQ$($k(B */ | |
900 static int | |
901 resizeCInfo(buf, size) | |
902 jcConvBuf *buf; | |
903 int size; | |
904 { | |
905 jcClause *cinfonew; | |
906 | |
907 TRACE("resizeCInfo", "Enter") | |
908 | |
909 /* realloc $B$9$k(B */ | |
910 cinfonew = (jcClause *)realloc((char *)buf->clauseInfo, | |
911 (size + 1) * sizeof(jcClause)); | |
912 if (cinfonew == NULL) { | |
913 jcErrno = JE_NOCORE; | |
914 return -1; | |
915 } | |
916 | |
917 buf->clauseSize = size; | |
918 buf->clauseInfo = cinfonew; | |
919 return 0; | |
920 } | |
921 | |
922 /* setCurClause -- $B%+%l%s%HJ8@a$r@_Dj$9$k(B */ | |
923 static void | |
924 setCurClause(buf, cl) | |
925 jcConvBuf *buf; | |
926 int cl; /* $B%+%l%s%H>.J8@aHV9f(B */ | |
927 { | |
928 jcClause *clp = buf->clauseInfo; | |
929 int i; | |
930 | |
931 TRACE("setCurClause", "Enter") | |
932 | |
933 /* $B%+%l%s%H>.J8@a(B */ | |
934 buf->curClause = cl; | |
935 | |
936 /* $B%+%l%s%HBgJ8@a3+;OJ8@a(B */ | |
937 for (i = cl; i > 0 && !clp[i].ltop; i--) | |
938 ; | |
939 buf->curLCStart = i; | |
940 | |
941 /* $B%+%l%s%HBgJ8@a=*N;J8@a(B ($B$N<!(B) */ | |
942 for (i = cl + 1; i <= buf->nClause && !clp[i].ltop; i++) | |
943 ; | |
944 buf->curLCEnd = i; | |
945 } | |
946 | |
947 /* getHint -- $BJ8@a$NA08e$N@\B3>pJs$rF@$k(B */ | |
948 static int | |
949 getHint(buf, start, end) | |
950 jcConvBuf *buf; | |
951 int start; | |
952 int end; | |
953 { | |
954 jcClause *cinfo = buf->clauseInfo; | |
955 int hint = 0; | |
956 | |
957 TRACE("getHint", "Enter") | |
958 | |
959 /* | |
960 * $B:G=i$NJ8@a$ND>A0$NJ8@a$,JQ49$5$l$F$$$l$P!"A0$NJ8@a$H@\B3$r$9$k(B | |
961 */ | |
962 if (start > 0 && cinfo[start - 1].conv == 1) | |
963 hint |= WNN_USE_MAE; | |
964 | |
965 /* | |
966 * $B:G8e$NJ8@a$ND>8e$,JQ49$5$l$F$$$F$$$l$P!"8e$NJ8@a$H@\B3$r$9$k(B | |
967 */ | |
968 if (end > 0 && end < jl_bun_suu(buf->wnn) && cinfo[end].conv == 1) | |
969 hint |= WNN_USE_ATO; | |
970 | |
971 return hint; | |
972 } | |
973 | |
974 | |
975 /* renConvert -- $B%+%l%s%HJ8@a$+$i8e$m$rO"J8@aJQ49$9$k(B */ | |
976 static int | |
977 renConvert(buf, small) | |
978 jcConvBuf *buf; | |
979 int small; | |
980 { | |
981 TRACE("renConvert", "Enter") | |
982 | |
983 /* $BO"J8@aJQ49$9$k(B */ | |
984 if (doKanrenConvert(buf, | |
985 small ? buf->curClause : buf->curLCStart) < 0) { | |
986 return -1; | |
987 } | |
988 | |
989 /* | |
990 * $B%+%l%s%HJ8@a$N@_Dj(B | |
991 * small $B$,(B 0 $B$J$i!"(B | |
992 * $B%+%l%s%HBgJ8@a$N@hF,$O(B buf->curLCStart $B$GJQ$o$i$:(B | |
993 * $B%+%l%s%HBgJ8@a=*$j$O(B ltop $B%U%i%0$r%5!<%A$7$FC5$9(B | |
994 * $B%+%l%s%H>.J8@a$O%+%l%s%HBgJ8@a@hF,$K0\F0(B | |
995 * small $B$,(B 0 $B$G$J$$$J$i!"(B | |
996 * $B%+%l%s%H>.J8@a$O(B buf->curClause $B$GJQ$o$i$:(B | |
997 * $B%+%l%s%HBgJ8@a$N@hF,$*$h$S=*$j$O!"%+%l%s%H>.J8@a$N(B | |
998 * $BA08e$r(B ltop $B%U%i%0$r%5!<%A$7$FC5$9(B | |
999 */ | |
1000 setCurClause(buf, small ? buf->curClause : buf->curLCStart); | |
1001 | |
1002 /* $B%I%C%H$N@_Dj(B */ | |
1003 DotSet(buf); | |
1004 | |
1005 return 0; | |
1006 } | |
1007 | |
1008 /* tanConvert -- $B%+%l%s%HJ8@a$rC1J8@aJQ49$9$k(B */ | |
1009 static int | |
1010 tanConvert(buf, small) | |
1011 jcConvBuf *buf; | |
1012 int small; | |
1013 { | |
1014 TRACE("tanConvert", "Enter") | |
1015 | |
1016 /* | |
1017 * $BC1J8@aJQ49$N>l9g!"4pK\E*$K(B 2 $BCJ3,$N=hM}$r9T$J$&$3$H$K$J$k(B | |
1018 * $B$^$:!"%+%l%s%HJ8@a$rC1J8@aJQ49(B | |
1019 * $B<!$K!"$=$N$"$H$rO"J8@aJQ49(B | |
1020 */ | |
1021 | |
1022 if (small) { | |
1023 /* $B$^$:C1J8@aJQ49$9$k(B */ | |
1024 if (doKantanSConvert(buf, buf->curClause) < 0) | |
1025 return -1; | |
1026 | |
1027 /* $B%+%l%s%HJ8@a$N@_Dj(B | |
1028 * $B%+%l%s%H>.J8@a$O(B buf->curClause $B$GJQ$o$i$:(B | |
1029 * $B%+%l%s%HBgJ8@a$N@hF,$H:G8e$O%+%l%s%H>.J8@a$N(B | |
1030 * $BA08e$K(B ltop $B%U%i%0$r%5!<%A$7$FC5$9(B | |
1031 */ | |
1032 setCurClause(buf, buf->curClause); | |
1033 /* $B%I%C%H$N@_Dj(B */ | |
1034 DotSet(buf); | |
1035 | |
1036 /* $BO"J8@aJQ49(B */ | |
1037 if (buf->curClause + 1 < buf->nClause && | |
1038 buf->clauseInfo[buf->curClause + 1].conv == 0) { | |
1039 /* $B>.J8@a$NC1J8@aJQ49%b!<%I$G!"<!$NJ8@a$,(B | |
1040 * $BL5JQ49$@$C$?>l9g!"(Bltop $B%U%i%0$r(B 0 $B$K$7$F(B | |
1041 * $BA0$H@\B3$G$-$k$h$&$K$9$k(B | |
1042 */ | |
1043 buf->clauseInfo[buf->curClause + 1].ltop = 0; | |
1044 } | |
1045 if (doKanrenConvert(buf, buf->curClause + 1) < 0) | |
1046 return -1; | |
1047 | |
1048 /* $B$b$&0lEY%+%l%s%HJ8@a$N@_Dj(B | |
1049 * $BO"J8@aJQ49$N7k2L$K$h$C$F$O%+%l%s%HBgJ8@a$N:G8e$,(B | |
1050 * $B0\F0$9$k$3$H$,$"$k(B | |
1051 */ | |
1052 setCurClause(buf, buf->curClause); | |
1053 | |
1054 /* $B%I%C%H$O0\F0$7$J$$$N$G:F@_Dj$7$J$/$F$h$$(B */ | |
1055 } else { | |
1056 /* $B$^$:C1J8@aJQ49$9$k(B */ | |
1057 if (doKantanDConvert(buf, buf->curLCStart, buf->curLCEnd) < 0) | |
1058 return -1; | |
1059 | |
1060 /* $B%+%l%s%HJ8@a$N@_Dj(B | |
1061 * $B%+%l%s%HBgJ8@a$N@hF,$O(B buf->curLCStart $B$GJQ$o$i$:(B | |
1062 * $B%+%l%s%HBgJ8@a=*$j$O(B ltop $B%U%i%0$r%5!<%A$7$FC5$9(B | |
1063 * $B%+%l%s%H>.J8@a$O%+%l%s%HBgJ8@a@hF,$K0\F0(B | |
1064 */ | |
1065 setCurClause(buf, buf->curLCStart); | |
1066 DotSet(buf); | |
1067 | |
1068 /* $BO"J8@aJQ49(B */ | |
1069 if (doKanrenConvert(buf, buf->curLCEnd) < 0) | |
1070 return -1; | |
1071 /* $B$3$A$i$O(B small $B$N;~$H0c$C$FO"J8@aJQ49$N7k2L%+%l%s%HJ8@a$,(B | |
1072 * $B0\F0$9$k$3$H$O$J$$(B | |
1073 */ | |
1074 } | |
1075 | |
1076 return 0; | |
1077 } | |
1078 | |
1079 /* doKanrenConvert -- $B;XDj$5$l$?J8@a$+$i8e$m$rO"J8@aJQ49$9$k(B */ | |
1080 static int | |
1081 doKanrenConvert(buf, cl) | |
1082 jcConvBuf *buf; | |
1083 int cl; | |
1084 { | |
1085 jcClause *clp; | |
1086 wchar *kanap, *dispp; | |
1087 wchar savechar; | |
1088 int nsbun; | |
1089 int len, n; | |
1090 | |
1091 TRACE("doKanrenConvert", "Enter") | |
1092 | |
1093 /* | |
1094 * $B;XDj$5$l$?J8@a$+$i8e$m$rO"J8@aJQ49$9$k(B | |
1095 * $B%+%l%s%HJ8@a$N:F@_Dj$J$I$O$7$J$$(B | |
1096 */ | |
1097 | |
1098 if (cl >= buf->nClause) { | |
1099 /* $B;XDj$5$l$?J8@a$O$J$$(B | |
1100 * $B%(%i!<$K$O$7$J$$(B | |
1101 * $B6u$NJ8@a$rJQ49$7$h$&$H$7$?;~$K!"$=$l$r;vA0$K%A%'%C%/$7$F(B | |
1102 * $B%(%i!<$K$9$k$N$O>e0L$N4X?t$N@UG$$G$"$k(B | |
1103 */ | |
1104 return 0; | |
1105 } | |
1106 | |
1107 /* | |
1108 * $BJQ49$9$kA0$K!">/$J$/$H$b;XDj$5$l$?J8@a$ND>A0$^$G$,JQ49$5$l$F(B | |
1109 * $B$$$k$3$H$rJ]>Z$9$k(B | |
1110 */ | |
1111 if (makeConverted(buf, cl) < 0) | |
1112 return -1; | |
1113 | |
1114 clp = buf->clauseInfo + cl; | |
1115 | |
1116 /* $B$+$J%P%C%U%!$r(B NULL $B%?!<%_%M!<%H$5$;$F$*$/(B */ | |
1117 *(buf->kanaEnd) = 0; | |
1118 | |
1119 /* $BO"J8@aJQ49$9$k(B */ | |
1120 #ifdef WNN6 | |
1121 nsbun = jl_fi_ren_conv(buf->wnn, clp->kanap, | |
1122 cl, -1, getHint(buf, cl, -1)); | |
1123 #else | |
1124 nsbun = jl_ren_conv(buf->wnn, clp->kanap, | |
1125 cl, -1, getHint(buf, cl, -1)); | |
1126 #endif | |
1127 | |
1128 if (nsbun < 0) { | |
1129 jcErrno = JE_WNNERROR; | |
1130 return -1; | |
1131 } | |
1132 | |
1133 /* clauseInfo $B$N%5%$%:$N%A%'%C%/(B */ | |
1134 if (nsbun > buf->clauseSize) { | |
1135 if (resizeCInfo(buf, cl + nsbun) < 0) | |
1136 return -1; | |
1137 } | |
1138 | |
1139 /* $B<!$KJQ49J8;zNs$ND9$5$N%A%'%C%/(B */ | |
1140 clp = buf->clauseInfo + cl; | |
1141 len = (clp->dispp - buf->displayBuf) + jl_kanji_len(buf->wnn, cl, -1); | |
1142 | |
1143 if (len > buf->bufferSize) { | |
1144 if (resizeBuffer(buf, len) < 0) | |
1145 return -1; | |
1146 } | |
1147 | |
1148 buf->nClause = nsbun; | |
1149 | |
1150 /* $B$G$O(B clauseInfo $B$KJQ497k2L$rF~$l$F$$$/(B */ | |
1151 clp = buf->clauseInfo + cl; | |
1152 kanap = clp->kanap; | |
1153 dispp = clp->dispp; | |
1154 while (cl < buf->nClause) { | |
1155 n = cl + 1; | |
1156 | |
1157 /* $BJ8@a>pJs$N@_Dj(B */ | |
1158 clp->conv = 1; | |
1159 clp->kanap = kanap; | |
1160 clp->dispp = dispp; | |
1161 clp->ltop = jl_dai_top(buf->wnn, cl); | |
1162 | |
1163 /* $BI=<(%P%C%U%!$XJQ49J8;zNs$r%3%T!<$9$k(B */ | |
1164 /* jl_get_kanji $B$O!"(BNULL $B$^$G%3%T!<$9$k$N$GCm0U(B */ | |
1165 len = jl_kanji_len(buf->wnn, cl, n); | |
1166 savechar = dispp[len]; | |
1167 (void)ki2_jl_get_kanji(buf->wnn, cl, n, dispp, len); | |
1168 dispp[len] = savechar; | |
1169 dispp += len; | |
1170 | |
1171 /* $B$+$J%P%C%U%!$N0LCV$rJ8@a$N:G8e$K$9$k(B */ | |
1172 kanap += jl_yomi_len(buf->wnn, cl, n); | |
1173 | |
1174 /* $B%+%l%s%HJ8@a$N99?7(B */ | |
1175 cl = n; | |
1176 clp++; | |
1177 } | |
1178 | |
1179 /* $B:G8e$N(B clauseInfo $B$N@_Dj(B */ | |
1180 clp->kanap = buf->kanaEnd; | |
1181 clp->dispp = buf->displayEnd = dispp; | |
1182 clp->conv = 0; | |
1183 clp->ltop = 1; | |
1184 | |
1185 #ifdef DEBUG_WNNLIB | |
1186 showBuffers(buf, "after doKanrenConvert"); | |
1187 #endif | |
1188 | |
1189 return 0; | |
1190 } | |
1191 | |
1192 /* doKantanDConvert -- $B;XDj$5$l$?HO0O$NJ8@a$rBgJ8@a$H$7$FC1J8@aJQ49$9$k(B */ | |
1193 static int | |
1194 doKantanDConvert(buf, cls, cle) | |
1195 jcConvBuf *buf; | |
1196 int cls; | |
1197 int cle; | |
1198 { | |
1199 jcClause *clps, *clpe; | |
1200 int len, diff, newlen; | |
1201 int cldiff, nclausenew; | |
1202 wchar *kanap, *dispp; | |
1203 wchar savechar; | |
1204 wchar *savep; | |
1205 int nsbunnew, nsbunold; | |
1206 int i, n; | |
1207 | |
1208 TRACE("doKantanDConvert", "Enter") | |
1209 | |
1210 /* | |
1211 * $BJQ49$9$kA0$K!">/$J$/$H$b;XDj$5$l$?J8@a$ND>A0$^$G$,JQ49$5$l$F(B | |
1212 * $B$$$k$3$H$rJ]>Z$9$k(B | |
1213 */ | |
1214 if (makeConverted(buf, cls) < 0) | |
1215 return -1; | |
1216 | |
1217 /* | |
1218 * $B;XDj$5$l$?HO0O$NJ8@a$rBgJ8@a$H$7$FC1J8@aJQ49$9$k(B | |
1219 * $B%+%l%s%HJ8@a$N:F@_Dj$J$I$O$7$J$$(B | |
1220 */ | |
1221 | |
1222 clps = buf->clauseInfo + cls; | |
1223 clpe = buf->clauseInfo + cle; | |
1224 nsbunold = jl_bun_suu(buf->wnn); | |
1225 if (nsbunold < 0) { | |
1226 jcErrno = JE_WNNERROR; | |
1227 return -1; | |
1228 } | |
1229 | |
1230 /* | |
1231 * $BFI$_$r(B NULL $B%?!<%_%M!<%H$9$k(B | |
1232 * $BC1$K(B 0 $B$rF~$l$k$H<!$NJ8@a$,2u$l$k$N$G!"$=$NA0$K%;!<%V$7$F$*$/(B | |
1233 */ | |
1234 savep = clpe->kanap; | |
1235 savechar = *savep; | |
1236 *savep = 0; | |
1237 | |
1238 /* $BC1J8@aJQ49$9$k(B */ | |
1239 nsbunnew = jl_tan_conv(buf->wnn, clps->kanap, cls, cle, | |
1240 getHint(buf, cls, cle), WNN_DAI); | |
1241 | |
1242 /* $B$9$+$5$:%;!<%V$7$F$"$C$?J8;z$r$b$H$KLa$9(B */ | |
1243 *savep = savechar; | |
1244 | |
1245 if (nsbunnew < 0) { | |
1246 jcErrno = JE_WNNERROR; | |
1247 return -1; | |
1248 } | |
1249 | |
1250 cldiff = (cle - cls) - (nsbunold - nsbunnew); | |
1251 nclausenew = buf->nClause + cldiff; | |
1252 /* clauseInfo $B$N%5%$%:$N%A%'%C%/(B */ | |
1253 if (nclausenew > buf->clauseSize) { | |
1254 if (resizeCInfo(buf, nclausenew) < 0) | |
1255 return -1; | |
1256 } | |
1257 | |
1258 /* $BJQ49J8;zNs$ND9$5$N%A%'%C%/(B */ | |
1259 len = jl_kanji_len(buf->wnn, cls, cle + cldiff); | |
1260 diff = len - (clpe->dispp - clps->dispp); | |
1261 newlen = (buf->displayEnd - buf->displayBuf) + diff; | |
1262 if (newlen > buf->bufferSize) { | |
1263 if (resizeBuffer(buf, newlen) < 0) | |
1264 return -1; | |
1265 } | |
1266 | |
1267 /* | |
1268 * $BJ8@a$rA^F~$9$k$N$G!"I=<(%P%C%U%!$NFbMF$r0\F0$5$;$k!#(B | |
1269 * | |
1270 * $B$I$&$;$"$H$+$iO"J8@aJQ49$9$k$+$i$$$$$G$O$J$$$+$H$$$&9M$(J}$b$"$k$,!"(B | |
1271 * $B$I$3$G%(%i!<$,5/$3$C$F$b0l1~$N(B consistency $B$,J]$?$l$k$h$&$K(B | |
1272 * $B$9$k$H$$$&$N$,L\I8$G$"$k(B | |
1273 */ | |
1274 moveDBuf(buf, cle, diff); | |
1275 | |
1276 /* clauseInfo $B$rF0$+$9(B ($BF1;~$K(B nClause $B$b%"%C%W%G!<%H$5$l$k(B) */ | |
1277 moveCInfo(buf, cle, cldiff); | |
1278 | |
1279 /* $B$G$O(B clauseInfo $B$KJQ497k2L$rF~$l$k(B */ | |
1280 clps = buf->clauseInfo + cls; | |
1281 kanap = clps->kanap; | |
1282 dispp = clps->dispp; | |
1283 cldiff += (cle - cls); | |
1284 for (i = 0; i < cldiff; i++) { | |
1285 n = cls + 1; | |
1286 | |
1287 /* $BJ8@a>pJs$r@_Dj$9$k(B */ | |
1288 clps->conv = 1; | |
1289 clps->ltop = jl_dai_top(buf->wnn, cls); | |
1290 clps->kanap = kanap; | |
1291 clps->dispp = dispp; | |
1292 | |
1293 /* $BI=<(%P%C%U%!$X$NJQ49J8;zNs$N%3%T!<(B */ | |
1294 /* jl_get_kanji $B$O!"(BNULL $B$^$G%3%T!<$9$k$N$GCm0U(B */ | |
1295 len = jl_kanji_len(buf->wnn, cls, n); | |
1296 savechar = dispp[len]; | |
1297 (void)ki2_jl_get_kanji(buf->wnn, cls, n, dispp, len); | |
1298 dispp[len] = savechar; | |
1299 dispp += len; | |
1300 | |
1301 /* $B$+$J%P%C%U%!$N0LCV$r99?7(B */ | |
1302 kanap += jl_yomi_len(buf->wnn, cls, n); | |
1303 | |
1304 /* $B<!$NJ8@a>pJs$N99?7(B */ | |
1305 cls = n; | |
1306 clps++; | |
1307 } | |
1308 | |
1309 /* $B<!$N(B clauseInfo $B$N@_Dj(B */ | |
1310 if (cls < jl_bun_suu(buf->wnn)) | |
1311 clps->ltop = jl_dai_top(buf->wnn, cls); | |
1312 else | |
1313 clps->ltop = 1; | |
1314 | |
1315 return 0; | |
1316 } | |
1317 | |
1318 /* doKantanSConvert -- $B;XDj$5$l$?J8@a$r>.J8@a$H$7$FC1J8@aJQ49$9$k(B */ | |
1319 static int | |
1320 doKantanSConvert(buf, cl) | |
1321 jcConvBuf *buf; | |
1322 int cl; | |
1323 { | |
1324 int next = cl + 1; | |
1325 jcClause *clp; | |
1326 int len, newlen, diff; | |
1327 wchar savechar; | |
1328 wchar *savep; | |
1329 int nsbun; | |
1330 | |
1331 TRACE("doKantanSConvert", "Enter") | |
1332 | |
1333 /* | |
1334 * $BJQ49$9$kA0$K!">/$J$/$H$b;XDj$5$l$?J8@a$ND>A0$^$G$,JQ49$5$l$F(B | |
1335 * $B$$$k$3$H$rJ]>Z$9$k(B | |
1336 */ | |
1337 if (makeConverted(buf, cl) < 0) | |
1338 return -1; | |
1339 | |
1340 /* | |
1341 * $B;XDj$5$l$?J8@a$r>.J8@a$H$7$FC1J8@aJQ49$9$k(B | |
1342 * $B%+%l%s%HJ8@a$N:F@_Dj$J$I$O$7$J$$(B | |
1343 */ | |
1344 | |
1345 clp = buf->clauseInfo + cl; | |
1346 | |
1347 /* | |
1348 * $BFI$_$r(B NULL $B%?!<%_%M!<%H$9$k(B | |
1349 * $BC1$K(B 0 $B$rF~$l$k$H<!$NJ8@a$,2u$l$k$N$G!"$=$NA0$K%;!<%V$7$F$*$/(B | |
1350 */ | |
1351 savep = (clp + 1)->kanap; | |
1352 savechar = *savep; | |
1353 *savep = 0; | |
1354 | |
1355 /* $BC1J8@aJQ49$9$k(B */ | |
1356 nsbun = jl_tan_conv(buf->wnn, clp->kanap, cl, next, | |
1357 getHint(buf, cl, next), WNN_SHO); | |
1358 | |
1359 | |
1360 /* $B$9$+$5$:%;!<%V$7$F$"$C$?J8;z$r$b$H$KLa$9(B */ | |
1361 *savep = savechar; | |
1362 | |
1363 if (nsbun < 0) { | |
1364 jcErrno = JE_WNNERROR; | |
1365 return -1; | |
1366 } | |
1367 | |
1368 /* $BJQ49J8;zNs$ND9$5$N%A%'%C%/(B */ | |
1369 clp = buf->clauseInfo + cl; | |
1370 len = jl_kanji_len(buf->wnn, cl); | |
1371 diff = len - ((clp + 1)->dispp - clp->dispp); | |
1372 newlen = (buf->displayEnd - buf->displayBuf) + diff; | |
1373 if (newlen > buf->bufferSize) { | |
1374 if (resizeBuffer(buf, newlen) < 0) | |
1375 return -1; | |
1376 } | |
1377 | |
1378 /* $BJ8@a$rA^F~$9$k$N$G!"I=<(%P%C%U%!$NFbMF$r0\F0$5$;$k(B */ | |
1379 /* $B$I$&$;$"$H$+$iO"J8@aJQ49$9$k$+$i$$$$$G$O$J$$$+$H$$$&9M$(J}$b$"$k$,!"(B | |
1380 * $B$I$3$G%(%i!<$,5/$3$C$F$b0l1~$N(B consistency $B$,J]$?$l$k$h$&$K(B | |
1381 * $B$9$k$H$$$&$N$,L\I8$G$"$k(B | |
1382 */ | |
1383 moveDBuf(buf, next, diff); | |
1384 | |
1385 /* $B$G$O(B clauseInfo $B$KJQ497k2L$rF~$l$k(B */ | |
1386 clp = buf->clauseInfo + cl; | |
1387 clp->conv = 1; | |
1388 clp->ltop = jl_dai_top(buf->wnn, cl); | |
1389 | |
1390 /* $BI=<(%P%C%U%!$XJQ49J8;zNs$r%3%T!<(B */ | |
1391 /* jl_get_kanji $B$G$O!":G8e$N(B NULL $B$b%3%T!<$5$l$k$N$GCm0U(B */ | |
1392 savechar = clp->dispp[len]; | |
1393 (void)ki2_jl_get_kanji(buf->wnn, cl, next, clp->dispp, len); | |
1394 clp->dispp[len] = savechar; | |
1395 | |
1396 /* $B<!$N(B clauseInfo $B$N@_Dj(B */ | |
1397 if (next < jl_bun_suu(buf->wnn)) | |
1398 (clp + 1)->ltop = jl_dai_top(buf->wnn, next); | |
1399 | |
1400 return 0; | |
1401 } | |
1402 | |
1403 | |
1404 /* makeConverted -- $B;XDj$5$l$?J8@a$ND>A0$^$G$,(B jllib $B$GJQ49$5$l$F$$$k(B | |
1405 $B$3$H$rJ]>Z$9$k(B */ | |
1406 static int | |
1407 makeConverted(buf, cl) | |
1408 jcConvBuf *buf; | |
1409 int cl; | |
1410 { | |
1411 int nsbun; | |
1412 int next; | |
1413 int status; | |
1414 wchar savechar; | |
1415 jcClause *clpc, *clpn; | |
1416 | |
1417 TRACE("makeConverted", "Enter") | |
1418 | |
1419 #ifdef DEBUG_WNNLIB | |
1420 showBuffers(buf, "before makeConverted"); | |
1421 #endif | |
1422 | |
1423 /* $B4{$KJQ49$5$l$F$$$k$+%A%'%C%/$9$k(B */ | |
1424 nsbun = jl_bun_suu(buf->wnn); | |
1425 if (cl <= nsbun) | |
1426 return 0; | |
1427 | |
1428 /* $BJQ49$5$l$F$$$J$$J8@a$rEPO?$9$k(B */ | |
1429 clpc = buf->clauseInfo + nsbun; | |
1430 for (; nsbun < cl; nsbun = next, clpc = clpn) { | |
1431 clpn = clpc + 1; | |
1432 next = nsbun + 1; | |
1433 | |
1434 /* $B4{$KEPO?$5$l$F$$$l$P!"2?$b$7$J$$(B */ | |
1435 if (clpc->conv == 1) | |
1436 continue; | |
1437 | |
1438 /* $BI=<(J8;zNs$r(B NULL $B%?!<%_%M!<%H$9$k(B */ | |
1439 savechar = *clpn->dispp; | |
1440 *clpn->dispp = 0; | |
1441 | |
1442 /* | |
1443 * jllib $B$K$OL5JQ49$NJ8@a$rEPO?$9$k5!G=$,$J$$$N$G!"(B | |
1444 * $B$H$j$"$($:A08e$N@\B3$J$7$GC1J8@aJQ49$9$k$3$H$K$9$k(B | |
1445 */ | |
1446 status = jl_tan_conv(buf->wnn, clpc->dispp, | |
1447 nsbun, next, WNN_NO_USE, WNN_SHO); | |
1448 | |
1449 /* $B%;!<%V$7$?J8;z$rLa$9(B */ | |
1450 *clpn->dispp = savechar; | |
1451 | |
1452 if (status < 0) { | |
1453 jcErrno = JE_WNNERROR; | |
1454 return -1; | |
1455 } | |
1456 } | |
1457 | |
1458 #ifdef DEBUG_WNNLIB | |
1459 showBuffers(buf, "after makeConverted"); | |
1460 #endif | |
1461 | |
1462 return 0; | |
1463 } | |
1464 | |
1465 /* unconvert -- $B;XDj$5$l$?HO0O$NJ8@a$r0l$D$NL5JQ49$NJ8@a$K$9$k(B */ | |
1466 static int | |
1467 unconvert(buf, start, end) | |
1468 jcConvBuf *buf; | |
1469 int start; | |
1470 int end; | |
1471 { | |
1472 jcClause *clps, *clpe; | |
1473 int diff, len; | |
1474 wchar savechar; | |
1475 | |
1476 TRACE("unconvert", "Enter") | |
1477 | |
1478 if (end <= start) | |
1479 return 0; | |
1480 | |
1481 if (start >= buf->nClause) | |
1482 return 0; | |
1483 | |
1484 #ifdef DEBUG_WNNLIB | |
1485 showBuffers(buf, "before unconvert"); | |
1486 #endif | |
1487 | |
1488 clps = buf->clauseInfo + start; | |
1489 clpe = buf->clauseInfo + end; | |
1490 | |
1491 /* | |
1492 * $BI=<(%P%C%U%!$NFbMF$r$+$J%P%C%U%!$NFbMF$GCV$-49$($k(B | |
1493 * $B!D$H$$$C$F$b<B:]$NF0:n$O$=$l$[$I4JC1$G$O$J$$(B | |
1494 * | |
1495 * $B!&$^$:!"CV$-49$($?7k2L!"I=<(%P%C%U%!$,$"$U$l$J$$$+D4$Y!"(B | |
1496 * $B$"$U$l$k$h$&$J$i%P%C%U%!$N%5%$%:$rBg$-$/$9$k(B | |
1497 * $B!&I=<(%P%C%U%!$K!"$+$J%P%C%U%!$+$i%G!<%?$r0\$9(B | |
1498 * $B!&(BclauseInfo $B$r=q$-49$($F!"(Bstart $B$+$i(B end-1 $B$^$G$NJ8@a$r(B | |
1499 * $B0l$D$NL5JQ49$NJ8@a$K$^$H$a$k(B | |
1500 * $B!&$b$A$m$s(B nClause $B$bJQ$($k(B | |
1501 * $B!&(Bstart+1 $B$+$i:G8e$^$G$NJ8@a$N(B clauseInfo $B$N(B dispp $B$r(B | |
1502 * $BI=<(%P%C%U%!$N$:$l$K1~$8$FD4@0$9$k(B | |
1503 * | |
1504 * $B$=$NB>$K<!$N$3$H$b9T$J$&I,MW$,$"$k$,!"$3$N4X?t$G$O$d$i$J$$(B | |
1505 * $B>e0L$N4X?t$G@_Dj$9$k$3$H(B | |
1506 * $B!&BgJ8@a%U%i%0(B (ltop) $B$N@_Dj(B | |
1507 * $B!&%+%l%s%HJ8@a!"$*$h$S<!8uJdJ8@a$N0\F0(B | |
1508 * $B<!8uJdJ8@a$,L5JQ49$NJ8@a$K$J$C$F$7$^$C$?;~$N=hM}(B | |
1509 * $B!&%I%C%H$N0\F0(B | |
1510 */ | |
1511 | |
1512 /* $BFI$_$ND9$5$H4A;z$ND9$5$N:9$rD4$Y$k(B */ | |
1513 diff = (clpe->kanap - clps->kanap) - (clpe->dispp - clps->dispp); | |
1514 /* $BCV$-49$($?>l9g$NI=<(%P%C%U%!$ND9$5(B */ | |
1515 len = (buf->displayEnd - buf->displayBuf) + diff; | |
1516 /* $B%P%C%U%!$N%5%$%:$,B-$j$J$1$l$P%5%$%:$rBg$-$/$9$k(B */ | |
1517 if (len > buf->bufferSize) { | |
1518 if (resizeBuffer(buf, len) < 0) { | |
1519 /* $B%5%$%:$,JQ$($i$l$J$+$C$?(B */ | |
1520 return -1; | |
1521 } | |
1522 } | |
1523 | |
1524 /* $BCV$-49$((B */ | |
1525 /* $B$^$:8e$m$NItJ,$rF0$+$7$F$+$i(B */ | |
1526 moveDBuf(buf, end, diff); | |
1527 /* $BFI$_$rF~$l$k(B */ | |
1528 (void)bcopy((char *)clps->kanap, (char *)clps->dispp, | |
1529 (clpe->kanap - clps->kanap) * sizeof(wchar)); | |
1530 | |
1531 /* | |
1532 * start $B$+$i(B end $B$^$G$NJ8@a$r0l$D$K$^$H$a$k(B | |
1533 */ | |
1534 | |
1535 /* $BL5JQ49>uBV$K$J$C$?J8@a$N(B clauseInfo $B$N@_Dj(B */ | |
1536 clps->conv = 0; | |
1537 | |
1538 /* end $B$+$i$"$H$N(B clauseInfo $B$r(B'$B$D$a$k(B' */ | |
1539 moveCInfo(buf, end, start + 1 - end); | |
1540 | |
1541 /* $BJ8@a$rEPO?$9$k(B */ | |
1542 /* $BEPO?$5$l$F$$$kJ8@a$ND9$5$r%A%'%C%/(B */ | |
1543 if (jl_bun_suu(buf->wnn) < end) | |
1544 end = -1; | |
1545 | |
1546 /* $BEPO?$9$kA0$K!"FI$_$r(B NULL $B%?!<%_%M!<%H$7$F$*$/(B */ | |
1547 clpe = clps + 1; | |
1548 savechar = *clpe->kanap; | |
1549 *clpe->kanap = 0; | |
1550 | |
1551 /* $BL5JQ49$GEPO?$7$?$$$,$G$-$J$$$N$G!"A08e$N@\B3$J$7$G!"C1J8@a(B | |
1552 * $BJQ49$9$k(B | |
1553 */ | |
1554 | |
1555 len = jl_tan_conv(buf->wnn, clps->kanap, | |
1556 start, end, WNN_NO_USE, WNN_SHO); | |
1557 | |
1558 /* $BFI$_$r85$K!"La$7$F$*$/(B */ | |
1559 *clpe->kanap = savechar; | |
1560 | |
1561 #ifdef DEBUG_WNNLIB | |
1562 showBuffers(buf, "after unconvert"); | |
1563 #endif | |
1564 | |
1565 /* $BEPO?$G$-$?$+$r!"%A%'%C%/(B */ | |
1566 if (len < 0) { | |
1567 jcErrno = JE_WNNERROR; | |
1568 return -1; | |
1569 } | |
1570 | |
1571 return 0; | |
1572 } | |
1573 | |
1574 static int | |
1575 expandOrShrink(buf, small, expand, convf) | |
1576 jcConvBuf *buf; | |
1577 int small; | |
1578 int expand; | |
1579 int convf; | |
1580 { | |
1581 jcClause *clp, *clpe; | |
1582 wchar *kanap, *dispp; | |
1583 int start, end; | |
1584 int len; | |
1585 int nsbun; | |
1586 | |
1587 TRACE("expandOrShrink", "Enter") | |
1588 | |
1589 start = small ? buf->curClause : buf->curLCStart; | |
1590 end = small ? start + 1 : buf->curLCEnd; | |
1591 | |
1592 clp = buf->clauseInfo + start; | |
1593 clpe = buf->clauseInfo + end; | |
1594 | |
1595 /* | |
1596 * $B?-$S=L$_$G$-$k$+$N%A%'%C%/(B | |
1597 */ | |
1598 if (expand) { | |
1599 /* | |
1600 * $B%+%l%s%HJ8@a$,:G8e$NJ8@a$N;~$K$O(B | |
1601 * $B$b$&9-$2$i$l$J$$(B | |
1602 */ | |
1603 if (end >= buf->nClause) { | |
1604 jcErrno = JE_CANTEXPAND; | |
1605 return -1; | |
1606 } | |
1607 len = 1; | |
1608 } else { | |
1609 if (buf->curClause == buf->nClause || | |
1610 clpe->kanap - clp->kanap <= 1) { | |
1611 /* $B%+%l%s%HJ8@a$,6u$+!"$"$k$$$OD9$5$,#10J2<(B */ | |
1612 jcErrno = JE_CANTSHRINK; | |
1613 return -1; | |
1614 } | |
1615 len = -1; | |
1616 } | |
1617 | |
1618 /* $BA48uJdJ8@a$,%+%l%s%HBgJ8@a$+$=$l0J9_$K$"$l$PL58z$K$9$k(B */ | |
1619 checkCandidates(buf, start, buf->nClause); | |
1620 | |
1621 /* jclib $B$H8_49$rJ]$D$?$a!":FJQ49;XDj$G$J$$>l9g$O!"FCJL$K=hM}$9$k(B */ | |
1622 if (!convf) { | |
1623 /* jclib $B$HF1MM$K(B unconvert() $B$r;H$C$F!"=hM}$r$7$F$bNI$$$N(B | |
1624 * $B$@$,!"L5BL$,$"$k$N$GFH<+$N=hM}$H$9$k(B | |
1625 */ | |
1626 int ksize; | |
1627 int dsize; | |
1628 | |
1629 /* jllib $B$N>pJs$,$"$l$P!"%+%l%s%HJ8@a0J9_$rL58z$K$9$k(B */ | |
1630 if (start < jl_bun_suu(buf->wnn)) | |
1631 jl_kill(buf->wnn, start, -1); | |
1632 | |
1633 /* $B%+%l%s%HJ8@a0J9_$NI=<(%P%C%U%!$NFbMF$r!"$+$J%P%C%U%!(B | |
1634 * $B$NFbMF$GCV49$($k(B (unconvert() $B;2>H(B) | |
1635 */ | |
1636 | |
1637 clp = buf->clauseInfo + start; | |
1638 | |
1639 /* $B$^$:!"I=<(%P%C%U%!$NBg$-$5$rD4$Y!"I,MW$J$i$P%P%C%U%!(B | |
1640 * $B$r3HD%$9$k(B | |
1641 */ | |
1642 ksize = buf->kanaEnd - clp->kanap; | |
1643 dsize = ksize + (clp->dispp - buf->displayBuf); | |
1644 if (dsize > buf->bufferSize) { | |
1645 if (resizeBuffer(buf, dsize)) | |
1646 return -1; | |
1647 } | |
1648 | |
1649 /* $BI=<(%P%C%U%!$NFbMF$r!"$+$J%P%C%U%!$NFbMF$GCV49$($k(B */ | |
1650 bcopy(clp->kanap, clp->dispp, ksize * sizeof (wchar)); | |
1651 | |
1652 /* $BI=<(%P%C%U%!$N=*$j$r@_Dj$9$k(B */ | |
1653 buf->displayEnd = clp->dispp + ksize; | |
1654 | |
1655 /* $B%+%l%s%HJ8@a$r@_Dj$9$k(B | |
1656 */ | |
1657 buf->curClause = buf->curLCStart = start; | |
1658 buf->dot = clp->kanap; | |
1659 clp->conv = 0; | |
1660 clp->ltop = 1; | |
1661 | |
1662 /* $B?-=L$7$?7k2L!"J8@a?t$O(B start + 1 ($B%+%l%s%HJ8@a$ND9(B | |
1663 * $B$5$,(B 1 $B$G$"$C$?;~!"=L$a$?7k2L%+%l%s%HJ8@a$,$J$/$J$k!#(B | |
1664 * $B$^$?$O!"%+%l%s%HJ8@a$N8e$K$R$H$D$NJ8@a$7$+$J$/!"$=(B | |
1665 * $B$NJ8@a$ND9$5$,(B 1 $B$G$"$C$?>l9g!"?-$P$7$?7k2L%+%l%s%H(B | |
1666 * $BJ8@a$h$j8e$NJ8@a$,$J$/$J$k(B) $B$+(B start + 2 $B$K$J$k(B | |
1667 */ | |
1668 | |
1669 /* $B$^$:!"?-=L8e$N%+%l%s%HJ8@a$ND9$5$r7W;;$9$k(B */ | |
1670 ksize = buf->clauseInfo[end].kanap - clp->kanap + len; | |
1671 | |
1672 /* $B$=$7$F!"%+%l%s%HJ8@a$N8e$K$"$kJ8@a$r@_Dj$9$k(B */ | |
1673 if (ksize == 0 || buf->displayEnd == clp->dispp + ksize) { | |
1674 /* $B=L$a$?7k2L%+%l%s%HJ8@a$,$J$/$J$C$?$+!"(B | |
1675 * $B?-$P$7$?7k2L%+%l%s%HJ8@a$N8e$NJ8@a$,$J$/$J$C$?(B | |
1676 * | |
1677 * $B$3$l$i$N>l9g$O!"A0$N%+%l%s%HJ8@a0J9_$r$R$H(B | |
1678 * $B$^$H$a(B ($B$R$H$D$NBgJ8@a(B) $B$K$7$F!"$=$l$r%+%l(B | |
1679 * $B%s%HJ8@a(B ($BBgJ8@a(B) $B$H$7$F$7$^$&(B | |
1680 * | |
1681 * $B$3$N;~!"(BclauseInfo $B$NBg$-$5$O!"I,$:(B start + 1 | |
1682 * $B$h$jBg$-$$$3$H$,J]>Z$5$l$F$$$k(B | |
1683 */ | |
1684 buf->nClause = buf->curLCEnd = start + 1; | |
1685 | |
1686 /* $BKvHxJ8@a$r%]%$%s%H$5$;$k(B */ | |
1687 clp++; | |
1688 } else if (start + 2 > buf->clauseSize | |
1689 && resizeCInfo(buf, start + 1) < 0) { | |
1690 /* $B=L$a$h$&$H$9$kJ8@a$,:G8e$NJ8@a$@$C$?>l9g!"(B | |
1691 * $BD9$5$,(B 1 $B$NJ8@a$,A}$($k$3$H$K$J$k!#(B | |
1692 * $B$,!"(BclauseInfo $B$NBg$-$5$r%A%'%C%/$7!"$=$l$r(B | |
1693 * $BA}$d$;$J$+$C$?$N$G!"%+%l%s%HJ8@a0J9_$rA4It$R(B | |
1694 * $B$H$^$H$a$K$9$k(B ($B%P%C%U%!$N@09g@-$rJ]$D$?$a(B) | |
1695 */ | |
1696 buf->nClause = buf->curLCEnd = start + 1; | |
1697 clp++; | |
1698 clp->kanap = buf->kanaEnd; | |
1699 clp->dispp = buf->displayEnd; | |
1700 clp->conv = 0; | |
1701 clp->ltop = 1; | |
1702 | |
1703 /* $B$G$b!"%(%i!<$O%(%i!<$J$N$G!"%(%i!<$H$7$FJV$9(B */ | |
1704 #ifdef DEBUG_WNNLIB | |
1705 showBuffers(buf, | |
1706 "after expandOrShrink [noconv, error]"); | |
1707 #endif | |
1708 return -1; | |
1709 } else { | |
1710 /* $B?-=L$G$-$?$N$G!"%+%l%s%HJ8@a$N8e$NJ8@a$r@_Dj$9$k(B | |
1711 * ($B$"$^$j!"0UL#$O$J$$$H$O;W$&$,!">.J8@a$N?-=L8e$N(B | |
1712 * $BBgJ8@a$N@_Dj$O!"(Bjclib $B$N@_Dj$HF1$8$K$7$F$*$/(B) | |
1713 */ | |
1714 buf->curLCEnd = start + (small ? 2 : 1); | |
1715 buf->nClause = start + 2; | |
1716 clpe = clp + 1; | |
1717 clpe->kanap = clp->kanap + ksize; | |
1718 clpe->dispp = clp->dispp + ksize; | |
1719 clpe->conv = 0; | |
1720 clpe->ltop = small ? 0 : 1; | |
1721 | |
1722 /* $BKvHxJ8@a$r%]%$%s%H$5$;$k(B */ | |
1723 clp += 2; | |
1724 } | |
1725 | |
1726 /* $BKvHxJ8@a$N>pJs$r@_Dj$9$k(B */ | |
1727 clp->kanap = buf->kanaEnd; | |
1728 clp->dispp = buf->displayEnd; | |
1729 clp->conv = 0; | |
1730 clp->ltop = 1; | |
1731 | |
1732 #ifdef DEBUG_WNNLIB | |
1733 showBuffers(buf, "after expandOrShrink [noconv]"); | |
1734 #endif | |
1735 return 0; | |
1736 } | |
1737 | |
1738 /* $B$9$Y$F$NJ8@a$,JQ49$5$l$F$$$k$3$H$rJ]>Z$9$k(B */ | |
1739 makeConverted(buf, buf->nClause); | |
1740 | |
1741 /* | |
1742 * $BJ8@a$ND9$5$rJQ99$9$k!#$3$N;~!"A0J8@a$K@\B32DG=$K$7$F$*$/$H(B | |
1743 * $B:$$k$3$H$,$"$k!#Nc$($P!VL5NLBg?t!W$HF~NO$7$h$&$H$7$F!"(B | |
1744 * a) "$B$`$j$g$&$?$$$9$&(B" $B$rJQ49$9$k$H(B"$BL5NA(B $BBP?t(B" $B$H$J$k!#(B | |
1745 * b) "$BL5NA(B" $B$r(B "$BL5NL(B" $B$KD>$9!#(B | |
1746 * c) "$BBP?t(B" $B$r(B "$BBg?t(B" $B$KD>$=$&$H;W$C$?$,8uJd$K$J$$$N$G(B2$BJ8;zJ,(B | |
1747 * $BJ8@a$r=L$a$F(B "$BBg(B $B?t(B" $B$KJ,$1$h$&$H$9$k!#(B | |
1748 * d) $B$H$3$m$,(B "$B$?$$(B" $B$,A08uJd$K@\B3$7$F$7$^$$!"(B"$BL5NLBN(B $B?t(B" $B$K$J$k!#(B | |
1749 * e) "$BL5NLBg(B" $B$H$$$&8uJd$O$J$$$N$G!";EJ}$J$/(B2$BJ8;zJ8@a$r=L$a$k$H(B | |
1750 * "$BL5NA(B $BBP?t(B" $B$K$J$C$F$7$^$C$?!#(B | |
1751 * f) b) $B$KLa$k!#(B | |
1752 * ($B$^!"$3$N>l9g$K$O$O$8$a$+$i!VL5NLBg?t!W$rEPO?$7$F$*$1$P$$$$$N$@$,(B) | |
1753 */ | |
1754 len += jl_yomi_len(buf->wnn, start, end); | |
1755 #ifdef WNN6 | |
1756 nsbun = jl_fi_nobi_conv(buf->wnn, start, len, -1, 0, | |
1757 small ? WNN_SHO : WNN_DAI); | |
1758 #else | |
1759 nsbun = jl_nobi_conv(buf->wnn, start, len, -1, 0, | |
1760 small ? WNN_SHO : WNN_DAI); | |
1761 #endif | |
1762 | |
1763 if (nsbun < 0) { | |
1764 jcErrno = JE_WNNERROR; | |
1765 return -1; | |
1766 } | |
1767 | |
1768 /* clauseInfo $B$N%5%$%:$N%A%'%C%/$7$F!"I,MW$J$i$PA}$d$9(B */ | |
1769 if (nsbun > buf->clauseSize) { | |
1770 if (resizeCInfo(buf, nsbun) < 0) | |
1771 return -1; | |
1772 } | |
1773 buf->nClause = nsbun; | |
1774 | |
1775 /* $BI=<(%P%C%U%!$NBg$-$5$r%A%'%C%/$7$F!"I,MW$J$i$PA}$d$9(B */ | |
1776 clp = buf->clauseInfo + start; | |
1777 len = clp->dispp - buf->displayBuf + jl_kanji_len(buf->wnn, start, -1); | |
1778 if (len > buf->bufferSize) { | |
1779 if (resizeBuffer(buf, len) < 0) | |
1780 return -1; | |
1781 } | |
1782 | |
1783 /* $B%+%l%s%HJ8@a$r3P$($F$*$/(B */ | |
1784 buf->curClause = start; | |
1785 | |
1786 /* $BJQ497k2L$r!"I=<(%P%C%U%!$KF~$l$F$$$/(B */ | |
1787 clp = buf->clauseInfo + start; | |
1788 kanap = clp->kanap; | |
1789 dispp = clp->dispp; | |
1790 while (start < nsbun) { | |
1791 end = start + 1; | |
1792 | |
1793 /* $BJ8@a>pJs$N@_Dj(B */ | |
1794 clp->kanap = kanap; | |
1795 clp->dispp = dispp; | |
1796 | |
1797 /* $BI=<(%P%C%U%!$KJQ49J8;zNs$r%3%T!<(B | |
1798 * jl_get_kanji $B$O:G8e$N(B NULL $B$^$G%3%T!<$5$l$k$N$GCm0U(B | |
1799 */ | |
1800 { | |
1801 int i = jl_kanji_len(buf->wnn, start, end); | |
1802 wchar c = dispp[i]; | |
1803 | |
1804 (void)ki2_jl_get_kanji(buf->wnn, start, end, dispp, i); | |
1805 dispp[i] = c; /* $B85$KLa$9(B */ | |
1806 dispp += i; /* $B0LCV$N99?7(B */ | |
1807 clp->conv = 1; | |
1808 clp->ltop = jl_dai_top(buf->wnn, start); | |
1809 } | |
1810 | |
1811 /* $B$+$J%P%C%U%!$N0LCV$r99?7(B */ | |
1812 kanap += jl_yomi_len(buf->wnn, start, end); | |
1813 | |
1814 /* $B<!$NJ8@a$X(B */ | |
1815 start = end; | |
1816 clp++; | |
1817 } | |
1818 | |
1819 /* $B:G8e$N(B clauseInfo $B$N@_Dj(B */ | |
1820 clp->kanap = buf->kanaEnd; | |
1821 clp->dispp = buf->displayEnd = dispp; | |
1822 clp->conv = 0; | |
1823 clp->ltop = 1; | |
1824 | |
1825 /* $B%+%l%s%HJ8@a$r:F@_Dj$9$k(B */ | |
1826 setCurClause(buf, buf->curClause); | |
1827 | |
1828 /* $B%I%C%H$N:F@_Dj(B */ | |
1829 DotSet(buf); | |
1830 | |
1831 #ifdef DEBUG_WNNLIB | |
1832 showBuffers(buf, "after expand_or_shrink"); | |
1833 #endif | |
1834 return 0; | |
1835 } | |
1836 | |
1837 /* getCandidates -- $BA48uJd$r<h$j=P$9!#$?$@$7!"4{$K<h$j=P$7:Q$_$J$i2?$b$7$J$$(B */ | |
1838 static int | |
1839 getCandidates(buf, small) | |
1840 jcConvBuf *buf; | |
1841 int small; | |
1842 { | |
1843 int start, end; | |
1844 | |
1845 TRACE("getCandidates", "Enter") | |
1846 | |
1847 /* | |
1848 * $B4{$K8uJd$,<h$j=P$5$l$F$$$k>l9g!"%+%l%s%HJ8@a$H8uJdJ8@a$,0lCW(B | |
1849 * $B$7$J$$$3$H$b$"$k$,!"8uJdJ8@a$N@_Dj$rM%@h$9$k$3$H$K$9$k!#$3$N(B | |
1850 * $B>l9g!"8uJdJ8@a$O!"I,$:%+%l%s%HJ8@a$KEy$7$$$+$=$l$K4^$^$l$F$$(B | |
1851 * $B$k$O$:!#(B | |
1852 */ | |
1853 if (small) { | |
1854 /* $B8uJd$,<h$j=P$7:Q$_$J$i!"2?$b$7$J$$(B */ | |
1855 if (buf->candKind == CAND_SMALL && | |
1856 buf->candClause == buf->curClause) | |
1857 return 0; | |
1858 | |
1859 /* $B%+%l%s%H>.J8@a$N8uJd$r<h$j=P$9(B */ | |
1860 start = buf->curClause; | |
1861 end = start + 1; | |
1862 if (jl_zenkouho(buf->wnn, | |
1863 start, | |
1864 getHint(buf, start, end) & WNN_USE_MAE, | |
1865 WNN_UNIQ) < 0) { | |
1866 buf->candClause = -1; | |
1867 jcErrno = JE_WNNERROR; | |
1868 return -1; | |
1869 } | |
1870 } else { | |
1871 /* $B8uJd$,<h$j=P$7:Q$_$J$i!"2?$b$7$J$$(B */ | |
1872 #if 0 | |
1873 if (buf->candKind == CAND_LARGE && | |
1874 buf->candClause >= buf->curLCStart && | |
1875 buf->candClauseEnd <= buf->curLCEnd) | |
1876 return 0; | |
1877 #else | |
1878 if (buf->candKind == CAND_LARGE && | |
1879 buf->candClause >= buf->curLCStart && | |
1880 buf->candClauseEnd <= buf->curLCEnd && | |
1881 buf->candClause <= buf->curClause && | |
1882 buf->candClauseEnd > buf->curClause) | |
1883 return 0; | |
1884 #endif | |
1885 | |
1886 /* $B%+%l%s%HBgJ8@a$N8uJd$r<h$j=P$9(B */ | |
1887 start = buf->curLCStart; | |
1888 end = buf->curLCEnd; | |
1889 #ifndef WNN6 | |
1890 /* | |
1891 * jl $B%i%$%V%i%j$N8uJd%P%C%U%!FbMF$rGK4~$9$k!#(B | |
1892 * curLCStart $B$,0JA0$HF1$8$G$+$D(B curLCEnd $B$,(B | |
1893 * $B0[$J$k>l9g(B ($B$D$^$j%+%l%s%HBgJ8@a$,8e$m$K?-$S$?>l9g(B)$B!"(B | |
1894 * $B$3$&$7$J$$$H(B Wnn4 $B$N(B jl $B%i%$%V%i%j$O8uJd$r:F<hF@(B | |
1895 * $B$7$F$/$l$J$$!#(B | |
1896 */ | |
1897 jl_kill(buf->wnn, 0, 0); | |
1898 #endif | |
1899 if (jl_zenkouho_dai(buf->wnn, | |
1900 start, | |
1901 end, | |
1902 getHint(buf, start, end), | |
1903 WNN_UNIQ) < 0) { | |
1904 buf->candClause = -1; | |
1905 jcErrno = JE_WNNERROR; | |
1906 return -1; | |
1907 } | |
1908 } | |
1909 | |
1910 /* $B<!8uJd$N<h$j=P$7$N$?$a$N>pJs$r3P$($F$*$/(B */ | |
1911 buf->candKind = small ? CAND_SMALL : CAND_LARGE; | |
1912 buf->candClause = start; | |
1913 buf->candClauseEnd = end; | |
1914 return 0; | |
1915 } | |
1916 | |
1917 /* setCandidate -- $B;XDj$5$l$?8uJd$G%P%C%U%!$rCV$-49$($k(B */ | |
1918 static int | |
1919 setCandidate(buf, n) | |
1920 jcConvBuf *buf; | |
1921 int n; | |
1922 { | |
1923 int start = buf->candClause; | |
1924 int end = buf->candClauseEnd; | |
1925 int oldlen, newlen, bdiff; | |
1926 int oldclen, newclen, cdiff; | |
1927 int newend; | |
1928 jcClause *clp; | |
1929 | |
1930 TRACE("setCandidate", "Enter") | |
1931 #ifdef DEBUG_WNNLIB | |
1932 fprintf(stderr, "setCandidate for %d as %s\n", | |
1933 n, buf->candKind == CAND_SMALL ? "small" : "large"); | |
1934 showBuffers(buf, "setCandiate (before)"); | |
1935 #endif | |
1936 | |
1937 clp = buf->clauseInfo + start; | |
1938 oldlen = (buf->clauseInfo + end)->dispp - clp->dispp; | |
1939 oldclen = jl_bun_suu(buf->wnn); | |
1940 | |
1941 if (buf->candKind == CAND_SMALL) { | |
1942 /* $B%+%l%s%H>.J8@a$r!";XDj8uJd$GCV$-49$($k(B */ | |
1943 if (jl_set_jikouho(buf->wnn, n) < 0) { | |
1944 jcErrno = JE_WNNERROR; | |
1945 return -1; | |
1946 } | |
1947 } else { | |
1948 /* $B%+%l%s%HBgJ8@a$r!";XDj8uJd$GCV$-49$($k(B */ | |
1949 if (jl_set_jikouho_dai(buf->wnn, n) < 0) { | |
1950 jcErrno = JE_WNNERROR; | |
1951 return -1; | |
1952 } | |
1953 } | |
1954 | |
1955 /* $BJQ498e$NJ8@a?t$N%A%'%C%/$9$k(B */ | |
1956 newclen = jl_bun_suu(buf->wnn); | |
1957 if (newclen < 0) { | |
1958 jcErrno = JE_WNNERROR; | |
1959 return -1; | |
1960 } | |
1961 cdiff = newclen - oldclen; | |
1962 newend = end + cdiff; | |
1963 | |
1964 /* $BJQ498e$N%G%#%9%W%l%$%P%C%U%!$N%5%$%:$r%A%'%C%/$9$k(B */ | |
1965 newlen = jl_kanji_len(buf->wnn, start, newend); | |
1966 if (newlen <= 0) { | |
1967 jcErrno = JE_WNNERROR; | |
1968 return -1; | |
1969 } | |
1970 bdiff = newlen - oldlen; | |
1971 | |
1972 #ifdef DEBUG_WNNLIB | |
1973 { | |
1974 wchar candstr[1024]; | |
1975 | |
1976 fprintf(stderr, "Candidate[%s]: '", | |
1977 buf->candKind == CAND_SMALL ? "small" : "large"); | |
1978 if (newlen >= 1024) { | |
1979 fprintf(stderr, | |
1980 "* candidate string is too large [%d] *", | |
1981 newlen); | |
1982 } else { | |
1983 candstr[0] = 0; | |
1984 ki2_jl_get_zenkouho_kanji(buf->wnn, n, candstr, 1024); | |
1985 printBuffer (candstr, candstr + newlen); | |
1986 } | |
1987 fprintf(stderr, "'\n"); | |
1988 } | |
1989 #endif | |
1990 | |
1991 /* | |
1992 * $B%G%#%9%W%l%$%P%C%U%!$r:F@_Dj$9$k(B | |
1993 * | |
1994 * $B:G=i$K!"=<J,$J%G%#%9%W%l%$%P%C%U%!$NBg$-$5$r3NJ]$7$F$*$/!#(B | |
1995 * $B<!$K!"CV$-49$(8e$N8uJdJ8;zNs$N$?$a$N>l=j$r3NJ]$9$k!#:G8e$K!"(B | |
1996 * $BCV$-49$($k8uJdJ8;zNs$r%G%#%9%W%l%$%P%C%U%!$KA^F~$9$k!#(B | |
1997 */ | |
1998 { | |
1999 int buflen = (buf->displayEnd - buf->displayBuf) + bdiff; | |
2000 wchar *dispp = clp->dispp; | |
2001 wchar tmp; | |
2002 | |
2003 if (buflen > buf->bufferSize | |
2004 && resizeBuffer(buf, buflen) < 0) { | |
2005 return -1; | |
2006 } | |
2007 | |
2008 moveDBuf(buf, end, bdiff); | |
2009 | |
2010 /* | |
2011 * $B8uJdJ8;zNs$NA^F~$O!"(Bjl_get_kanji() $B$rMQ$$$k$N$G!"(B | |
2012 * $B$=$l$,@_Dj$9$k:G8e$N(B NUL $BJ8;z$KCm0U!#(B | |
2013 */ | |
2014 tmp = dispp[newlen]; | |
2015 if (ki2_jl_get_kanji(buf->wnn, start, newend, | |
2016 dispp, newlen) <= 0) { | |
2017 jcErrno = JE_WNNERROR; | |
2018 return -1; | |
2019 } | |
2020 dispp[newlen] = tmp; | |
2021 } | |
2022 | |
2023 | |
2024 /* | |
2025 * clauseInfo$B$r:F@_Dj$9$k(B | |
2026 * | |
2027 * $B:G=i$K!"=<J,$J(B clauseInfo $B$NBg$-$5$r3NJ]$7$F$*$/!#<!$K!"(B | |
2028 * $B8uJdCV$-49$(8e$NJ8@a>pJs$N$?$a$N>l=j$r3NJ]$9$k!#:G8e$K!"(B | |
2029 * $BCV$-49$($?8uJd$N%P%C%U%!>pJs$r@_Dj$9$k!#(B | |
2030 */ | |
2031 { | |
2032 wchar *kanap, *dispp; | |
2033 int i, j; | |
2034 | |
2035 if (buf->nClause + cdiff > buf->clauseSize | |
2036 && resizeCInfo(buf, buf->nClause + cdiff) < 0) { | |
2037 return -1; | |
2038 } | |
2039 | |
2040 moveCInfo(buf, end, cdiff); | |
2041 | |
2042 kanap = clp->kanap; | |
2043 dispp = clp->dispp; | |
2044 for (i = start; i < newend; i = j) { | |
2045 clp->kanap = kanap; | |
2046 clp->dispp = dispp; | |
2047 clp->conv = 1; | |
2048 clp->ltop = jl_dai_top(buf->wnn, i); | |
2049 j = i + 1; | |
2050 kanap += jl_yomi_len(buf->wnn, i, j); | |
2051 dispp += jl_kanji_len(buf->wnn, i, j); | |
2052 clp++; | |
2053 } | |
2054 | |
2055 /* | |
2056 * $B8uJd$N<h$j=P$7$K$h$C$F!"A08e$NBgJ8@a$,JQ99$K$J$C$F(B | |
2057 * $B$$$k$+$b$7$l$J$$$N$G!"$=$l$i$r:F@_Dj$9$k!#D>8e$NJ8(B | |
2058 * $B@a$@$1$GNI$$$O$:$@$,!"G0$N$?$a!"$9$Y$F$r%A%'%C%/$9(B | |
2059 * $B$k$3$H$K$9$k!#(B | |
2060 */ | |
2061 for (i = 0; i < start; i++) | |
2062 buf->clauseInfo[i].ltop = jl_dai_top(buf->wnn, i); | |
2063 for (i = newend; i < newclen; i++) | |
2064 buf->clauseInfo[i].ltop = jl_dai_top(buf->wnn, i); | |
2065 } | |
2066 | |
2067 /* | |
2068 * $B<!8uJd$GCV$-49$($?7k2L!"CV$-49$(BP>]J8@a$H$=$NA08e$NBgJ8@a(B | |
2069 * $B$,0\F0$7$F$$$k$+$b$7$l$J$$$N$G!"%+%l%s%HJ8@a$r:F@_Dj$9$k!#(B | |
2070 */ | |
2071 setCurClause(buf, start); | |
2072 | |
2073 /* | |
2074 * $BJ8@a$N0\F0$KH<$$!"8uJdJ8@a$b0\F0$7$F$$$k$O$:$J$N$G!":F@_Dj(B | |
2075 * $B$7$F$*$/(B (moveCInfo() $B;2>H(B) | |
2076 */ | |
2077 buf->candClause = start; | |
2078 buf->candClauseEnd = end + cdiff; | |
2079 | |
2080 #ifdef DEBUG_WNNLIB | |
2081 showBuffers(buf, "setCandiate (after)"); | |
2082 #endif | |
2083 return 0; | |
2084 } | |
2085 | |
2086 /* checkCandidates -- $BA48uJd$,M-8z$+%A%'%C%/$7$F!"I,MW$J=hM}$r9T$J$&(B */ | |
2087 static void | |
2088 checkCandidates(buf, cls, cle) | |
2089 jcConvBuf *buf; | |
2090 int cls; | |
2091 int cle; | |
2092 { | |
2093 /* $BJ8@aHV9f(B cls $B$+$i(B cle - 1 $B$^$G$NJ8@a$,JQ99$5$l$k(B | |
2094 * $B<!8uJd%P%C%U%!$K$O$$$C$F$$$k8uJdJ8@a$,$3$NCf$K4^$^$l$F$$$l$P(B | |
2095 * $B<!8uJd%P%C%U%!$NFbMF$rL58z$K$7$J$/$F$O$J$i$J$$(B | |
2096 * | |
2097 * $B$I$N$h$&$J>l9g$+$H$$$&$H!"(B | |
2098 * 1. buf->candKind $B$,(B CAND_SMALL $B$G!"(B | |
2099 * cls <= buf->candClause < cle | |
2100 * 2. buf->candKind $B$,(B CAND_LARGE $B$G!"(B | |
2101 * buf->candClause < cle $B$+$D(B cls < buf->candClauseEnd | |
2102 */ | |
2103 if (buf->candKind == CAND_SMALL) | |
2104 buf->candClauseEnd = buf->candClause + 1; /* $BG0$N$?$a(B */ | |
2105 if (buf->candClause < cle && cls < buf->candClauseEnd) { | |
2106 /* $BL58z$K$9$k(B */ | |
2107 buf->candClause = buf->candClauseEnd = -1; | |
2108 } | |
2109 } | |
2110 | |
2111 | |
2112 /* forceStudy -- $BL$JQ49$*$h$S5?;wJQ49J8@a$N3X=,(B */ | |
2113 static int | |
2114 forceStudy(buf, n) | |
2115 jcConvBuf *buf; | |
2116 int n; | |
2117 { | |
2118 int i, j, k; | |
2119 int status; | |
2120 wchar yomi[CL_BUFSZ], kanji[CL_BUFSZ]; | |
2121 | |
2122 TRACE("forceStudy", "Enter") | |
2123 | |
2124 #ifdef DEBUG_WNNLIB | |
2125 showBuffers(buf, "forceStudy"); | |
2126 #endif | |
2127 | |
2128 if (n < 0 || n > buf->nClause) | |
2129 n = buf->nClause; | |
2130 | |
2131 /* $B$3$3$G$$$&3X=,$H$O!"IQEY>pJs$N99?7$H9M$($F$h$$(B */ | |
2132 | |
2133 /* | |
2134 * Wnn6 $B$G$O!"L5JQ493X=,5!G=$,$"$j!"(Bwnnlib $B$K$h$k5?;wJQ49$dL$(B | |
2135 * $BJQ49$NJ8@a$r3X=,$5$;$k$3$H$,$G$-$k!#$?$@$7!"L$JQ49$NJ8@a$K(B | |
2136 * $BBP$7$FC1=c$KIQEY$N99?7$O$G$-$J$$$N$GCm0U(B | |
2137 */ | |
2138 | |
2139 /* | |
2140 * $B:G=i$K!"JQ49:Q$_$NJ8@a?t$rD4$Y$k!#F~NO$5$l$?J8@a$,$9$Y$FJQ(B | |
2141 * $B49:Q$_(B (conv == 1) $B$G$"$l$P!"A4J8@a$r$NJ8@a$NIQEY>pJs$r$^$H(B | |
2142 * $B$a$F99?7$9$k!#JQ49:Q$_$G$J$$J8@a$,$"$C$?>l9g!"$H$j$"$($:JQ(B | |
2143 * $B49$7$F!"JQ497k2L$,I=<(%P%C%U%!$NFbMF$H0lCW$7$F$$$l$P!"IQEY(B | |
2144 * $B>pJs$r99?7$9$k$3$H$K$9$k(B | |
2145 */ | |
2146 status = 0; | |
2147 for (i = 0; i < n; i++) { | |
2148 if (buf->clauseInfo[i].conv == 1) | |
2149 status++; | |
2150 } | |
2151 | |
2152 /* $B$9$Y$F$NJ8@a$,JQ49$5$l$F$$$?$i!"A4$F$NJ8@a$NIQEY$r99?7$9$k(B */ | |
2153 if (status == n) { | |
2154 #ifdef WNN6 | |
2155 status = jl_optimize_fi(buf->wnn, 0, -1); | |
2156 #else | |
2157 status = jl_update_hindo(buf->wnn, 0, -1); | |
2158 #endif | |
2159 if (status < 0) { | |
2160 jcErrno = JE_WNNERROR; | |
2161 return -1; | |
2162 } | |
2163 return 0; | |
2164 } | |
2165 | |
2166 /* | |
2167 * $BJ8@aC10L$GIQEY>pJs$r99?7$9$k(B | |
2168 * $BL$JQ49$NJ8@a$,$"$l$P!"L$JQ49$H$7$FIQEY>pJs$r99?7$9$k(B (Wnn6 | |
2169 * $B$NL5JQ493X=,5!G=(B) | |
2170 */ | |
2171 | |
2172 /* $BIQEY>pJs$r99?7$9$kA0$K!"A4J8@a$rJQ49$7$F$*$/(B */ | |
2173 if (makeConverted(buf, n) < 0) | |
2174 return -1; | |
2175 | |
2176 for (i = 0; i < n; i = j) { | |
2177 j = i + 1; | |
2178 /* | |
2179 * $BJQ49:Q$_$NJ8@a$G$"$l$P!"$=$N$^$^IQEY>pJs$r99?7$9$k(B | |
2180 */ | |
2181 if (buf->clauseInfo[i].conv == 1) { | |
2182 #ifdef WNN6 | |
2183 status = jl_optimize_fi(buf->wnn, i, j); | |
2184 #else | |
2185 status = jl_update_hindo(buf->wnn, i, j); | |
2186 #endif | |
2187 if (status < 0) { | |
2188 jcErrno = JE_WNNERROR; | |
2189 return -1; | |
2190 } | |
2191 continue; | |
2192 } | |
2193 | |
2194 /* | |
2195 * $BL$JQ49$H5?;wJQ49$NJ8@a$KBP$7$F$O!"FI$_$r3X=,$9$k(B | |
2196 * $BL$JQ49$H5?;wJQ49$N>l9g$G$b!"(Bwnnlib $B$G$OI=<(%P%C%U%!$H$+(B | |
2197 * $B$J%P%C%U%!$NN>J}$,0lCW$7$F$$$k$N$G(B (jcKana() $B;2>H(B)$B!"(B | |
2198 * $B$3$3$G$O(B jllib $B$NFI$_%G!<%?$r;HMQ$9$k(B | |
2199 */ | |
2200 | |
2201 /* $BFI$_J8;zNs$HJQ49:QJ8;zNs$ND9$5%A%'%C%/(B */ | |
2202 if (jl_yomi_len(buf->wnn, i, j) >= CL_BUFSZ || | |
2203 jl_kanji_len(buf->wnn, i, j) >= CL_BUFSZ) { | |
2204 /* $B%P%C%U%!%*!<%P%U%m!<$rHr$1$k(B */ | |
2205 continue; | |
2206 } | |
2207 | |
2208 /* $BFI$_J8;zNs$N<h$j=P$7(B */ | |
2209 if (ki2_jl_get_yomi(buf->wnn, i, j, yomi, CL_BUFSZ) < 0) { | |
2210 jcErrno = JE_WNNERROR; | |
2211 return -1; | |
2212 } | |
2213 /* $BJQ49:Q$_J8;zNs$r<h$j=P$9(B */ | |
2214 if (ki2_jl_get_kanji(buf->wnn, i, j, kanji, CL_BUFSZ) < 0) { | |
2215 jcErrno = JE_WNNERROR; | |
2216 return -1; | |
2217 } | |
2218 | |
2219 /* | |
2220 * $BFI$_$HJQ498e$,0lCW$7$F$$$l$P!"3X=,:Q$_$H$_$J$7$F!"(B | |
2221 * $B$=$N$^$^IQEY>pJs$r99?7$9$k(B | |
2222 */ | |
2223 if (wstrcmp (yomi, kanji) == 0) { | |
2224 #ifdef WNN6 | |
2225 status = jl_optimize_fi(buf->wnn, i, j); | |
2226 #else | |
2227 status = jl_update_hindo(buf->wnn, i, j); | |
2228 #endif | |
2229 if (status < 0) { | |
2230 jcErrno = JE_WNNERROR; | |
2231 return -1; | |
2232 } | |
2233 continue; | |
2234 } | |
2235 | |
2236 /* | |
2237 * $BFI$_$HJQ498e$,0lCW$7$J$$$N$G!"A48uJd$NCf$+$iC5$9(B | |
2238 * $B$b$7!"0lCW$9$k$b$N$,$"$l$P!"IQEY>pJs$r99?7$7!"$=$&(B | |
2239 * $B$G$J$1$l$PIQEY>pJs$O99?7$7$J$$(B | |
2240 */ | |
2241 if (jl_zenkouho(buf->wnn, i, | |
2242 getHint(buf, -1, -1), WNN_UNIQ) < 0) { | |
2243 jcErrno = JE_WNNERROR; | |
2244 return -1; | |
2245 } | |
2246 status = jl_zenkouho_suu(buf->wnn); | |
2247 if (status < 0) { | |
2248 jcErrno = JE_WNNERROR; | |
2249 return -1; | |
2250 } | |
2251 for (k = 0; k < status; k++) { | |
2252 ki2_jl_get_zenkouho_kanji(buf->wnn, k, kanji, | |
2253 CL_BUFSZ); | |
2254 /* $BI,$:(B NUL $B%?!<%_%M!<%H$5$l$k$h$&$K$7$F$*$/(B */ | |
2255 kanji[CL_BUFSZ - 1] = 0; | |
2256 if (wstrcmp(yomi, kanji) != 0) | |
2257 continue; | |
2258 if (jl_set_jikouho(buf->wnn, k) < 0) { | |
2259 jcErrno = JE_WNNERROR; | |
2260 return -1; | |
2261 } | |
2262 #ifdef WNN6 | |
2263 status = jl_optimize_fi(buf->wnn, i, j); | |
2264 #else | |
2265 status = jl_update_hindo(buf->wnn, i, j); | |
2266 #endif | |
2267 if (status < 0) { | |
2268 jcErrno = JE_WNNERROR; | |
2269 return -1; | |
2270 } | |
2271 break; | |
2272 } | |
2273 } | |
2274 | |
2275 return 0; | |
2276 } | |
2277 | |
2278 | |
2279 /* | |
2280 * $B$3$3$+$i(B Public $B$J%U%!%s%/%7%g%s(B | |
2281 */ | |
2282 | |
2283 /* jcCreateBuf -- $BJQ49%P%C%U%!$N:n@.(B */ | |
2284 jcConvBuf * | |
2285 jcCreateBuffer(wnn, nclause, buffersize) | |
2286 struct wnn_buf *wnn; | |
2287 int nclause; | |
2288 int buffersize; | |
2289 { | |
2290 jcConvBuf *buf; | |
2291 | |
2292 TRACE("jcCreateBuffer", "Enter") | |
2293 | |
2294 /* $B$^$:(B jcConvBuf $B$N3NJ](B */ | |
2295 if ((buf = (jcConvBuf *)malloc(sizeof(jcConvBuf))) == NULL) { | |
2296 jcErrno = JE_NOCORE; | |
2297 return NULL; | |
2298 } | |
2299 (void)bzero((char *)buf, sizeof(jcConvBuf)); | |
2300 buf->wnn = wnn; | |
2301 | |
2302 /* $B<!$K3F<o%P%C%U%!$N3NJ](B */ | |
2303 | |
2304 /* $B$^$:!"$+$J%P%C%U%!$HI=<(%P%C%U%!(B */ | |
2305 buf->bufferSize = (buffersize <= 0) ? DEF_BUFFERSIZE : buffersize; | |
2306 /* $B%P%C%U%!$N:G8e$r(B NULL $B%?!<%_%M!<%H$9$k$3$H$,$"$k$N$G!"(B | |
2307 * 1$BJ8;zJ8Bg$-$/$7$F$*$/(B | |
2308 */ | |
2309 buf->kanaBuf = (wchar *)malloc((buf->bufferSize + 1) * | |
2310 sizeof(wchar)); | |
2311 buf->displayBuf = (wchar *)malloc((buf->bufferSize + 1) * | |
2312 sizeof(wchar)); | |
2313 | |
2314 /* $B<!$K(B clauseInfo $B%P%C%U%!(B */ | |
2315 buf->clauseSize = (nclause <= 0) ? DEF_CLAUSESIZE : nclause; | |
2316 /* clauseInfo $B%P%C%U%!$O(B nclause + 1 $B8D%"%m%1!<%H$9$k(B | |
2317 * $B$J$<$+$H$$$&$H(B clauseinfo $B$O%G%j%_%?$H$7$FMWAG$r(B | |
2318 * 1$B8D;H$&$N$G(B nclause $B8D$NJ8@a$r07$&$?$a$K$O(B nclause + 1 $B8D$N(B | |
2319 * $BBg$-$5$r;}$?$J$1$l$P$J$i$J$$$+$i$G$"$k(B | |
2320 */ | |
2321 buf->clauseInfo = (jcClause *)malloc((buf->clauseSize + 1) | |
2322 * sizeof(jcClause)); | |
2323 | |
2324 if (buf->kanaBuf == NULL || buf->displayBuf == NULL || | |
2325 buf->clauseInfo == NULL) { | |
2326 /* malloc() $B$G$-$J$+$C$?(B */ | |
2327 Free(buf->kanaBuf); | |
2328 Free(buf->displayBuf); | |
2329 Free(buf->clauseInfo); | |
2330 Free(buf); | |
2331 jcErrno = JE_NOCORE; | |
2332 return NULL; | |
2333 } | |
2334 | |
2335 (void)jcClear(buf); | |
2336 return buf; | |
2337 } | |
2338 | |
2339 /* jcDestroyBuffer -- $BJQ49%P%C%U%!$N>C5n(B */ | |
2340 int | |
2341 jcDestroyBuffer(buf, savedic) | |
2342 jcConvBuf *buf; | |
2343 int savedic; | |
2344 { | |
2345 TRACE("jcDestroyBuffer", "Enter") | |
2346 | |
2347 if (buf == NULL) | |
2348 return 0; | |
2349 | |
2350 /* $B%"%m%1!<%H$7$?%a%b%j$N2rJ|(B */ | |
2351 Free(buf->kanaBuf); | |
2352 Free(buf->displayBuf); | |
2353 Free(buf->clauseInfo); | |
2354 | |
2355 /* savedic $B$,(B 0 $B$G$J$1$l$P!"4D6-$K%m!<%I$5$l$F$$$kA4$F$N%U%!%$%k$r(B | |
2356 * save $B$9$k(B | |
2357 */ | |
2358 if (savedic && jl_dic_save_all(buf->wnn) < 0) { | |
2359 jcErrno = JE_WNNERROR; | |
2360 return -1; | |
2361 } | |
2362 | |
2363 Free(buf); | |
2364 | |
2365 return 0; | |
2366 } | |
2367 | |
2368 /* jcClear -- wnnlib $B$N=i4|2=(B ($B?7$?$JJQ49$r;O$a$kKh$K8F$P$J$1$l$P$J$i$J$$(B) */ | |
2369 int | |
2370 jcClear(buf) | |
2371 jcConvBuf *buf; | |
2372 { | |
2373 TRACE("jcClear", "Enter") | |
2374 | |
2375 /* $B=i4|CM$N@_Dj(B */ | |
2376 buf->nClause = buf->curClause = buf->curLCStart = 0; | |
2377 buf->curLCEnd = 1; | |
2378 buf->candClause = buf->candClauseEnd = -1; | |
2379 buf->kanaEnd = buf->kanaBuf; | |
2380 buf->displayEnd = buf->displayBuf; | |
2381 buf->clauseInfo[0].kanap = buf->kanaBuf; | |
2382 buf->clauseInfo[0].dispp = buf->displayBuf; | |
2383 buf->clauseInfo[0].conv = 0; | |
2384 buf->clauseInfo[0].ltop = 1; | |
2385 buf->dot = buf->kanaBuf; | |
2386 buf->fixed = 0; | |
2387 jcErrno = JE_NOERROR; | |
2388 | |
2389 if (jl_bun_suu(buf->wnn) > 0) | |
2390 jl_kill(buf->wnn, 0, -1); | |
2391 | |
2392 return 0; | |
2393 } | |
2394 | |
2395 /* jcConvert -- $B%+%l%s%HJ8@a0J9_$r$+$J4A;zJQ49$9$k(B */ | |
2396 int | |
2397 jcConvert(buf, small, tan, jump) | |
2398 jcConvBuf *buf; | |
2399 int small; | |
2400 int tan; | |
2401 int jump; | |
2402 { | |
2403 int ret; | |
2404 | |
2405 TRACE("jcConvert", "Enter") | |
2406 | |
2407 CHECKFIXED(buf); | |
2408 | |
2409 if (buf->curClause == buf->nClause) { | |
2410 /* $B%+%l%s%HJ8@a$,:G8e$NJ8@a$G$7$+$b6u(B */ | |
2411 jcErrno = JE_CLAUSEEMPTY; | |
2412 return -1; | |
2413 } | |
2414 | |
2415 /* $BA48uJdJ8@a$,%+%l%s%HBgJ8@a$+$=$l0J9_$K$"$l$PL58z$K$9$k(B */ | |
2416 checkCandidates(buf, | |
2417 small ? buf->curClause : buf->curLCStart, | |
2418 buf->nClause); | |
2419 | |
2420 if (tan) { | |
2421 ret = tanConvert(buf, small); | |
2422 } else { | |
2423 ret = renConvert(buf, small); | |
2424 } | |
2425 | |
2426 if (ret < 0) | |
2427 return ret; | |
2428 | |
2429 if (jump) { | |
2430 /* $B%I%C%H$H%+%l%s%HJ8@a$rJ8$N:G8e$K0\F0$5$;$k(B */ | |
2431 buf->curClause = buf->curLCStart = buf->nClause; | |
2432 buf->curLCEnd = buf->nClause + 1; | |
2433 buf->dot = buf->kanaEnd; | |
2434 } | |
2435 return 0; | |
2436 } | |
2437 | |
2438 /* jcUnconvert -- $B%+%l%s%HBgJ8@a$rL5JQ49$N>uBV$KLa$9(B */ | |
2439 int | |
2440 jcUnconvert(buf) | |
2441 jcConvBuf *buf; | |
2442 { | |
2443 jcClause *clp = buf->clauseInfo + buf->curClause; | |
2444 | |
2445 TRACE("jcUnconvert", "Enter") | |
2446 | |
2447 CHECKFIXED(buf); | |
2448 | |
2449 if (buf->curClause == buf->nClause) { | |
2450 /* $B%+%l%s%HJ8@a$,:G8e$NJ8@a$G$7$+$b6u(B */ | |
2451 jcErrno = JE_CLAUSEEMPTY; | |
2452 return -1; | |
2453 } | |
2454 | |
2455 if (!clp->conv) { | |
2456 /* $B%+%l%s%HJ8@a$OJQ49$5$l$F$$$J$$(B */ | |
2457 /* $BL5JQ49$NJ8@a$O(B wnnlib $BFbIt$G$O>o$KBgJ8@a$H$7$F(B | |
2458 * $B07$o$l$k$N$G!"%+%l%s%H>.J8@a$NJQ49>uBV$r8+$F!"(B | |
2459 * $B$=$l$,JQ49>uBV$J$i%+%l%s%HBgJ8@aFb$N(B | |
2460 * $BA4$F$N>.J8@a$OJQ49>uBV!"$=$&$G$J$1$l$PL5JQ49>uBV!"(B | |
2461 * $B$K$J$k(B | |
2462 */ | |
2463 jcErrno = JE_NOTCONVERTED; | |
2464 return -1; | |
2465 } | |
2466 | |
2467 /* $BA48uJdJ8@a$,%+%l%s%HBgJ8@a$+$=$l0J9_$K$"$l$PL58z$K$9$k(B */ | |
2468 checkCandidates(buf, buf->curLCStart, buf->nClause); | |
2469 | |
2470 /* $BL5JQ49>uBV$K$9$k(B */ | |
2471 if (unconvert(buf, buf->curLCStart, buf->curLCEnd) < 0) | |
2472 return -1; | |
2473 | |
2474 /* $BBgJ8@a$N@_Dj(B */ | |
2475 clp = buf->clauseInfo + buf->curLCStart; | |
2476 clp->ltop = 1; | |
2477 (++clp)->ltop = 1; | |
2478 | |
2479 /* $B%+%l%s%HJ8@a$N:F@_Dj(B */ | |
2480 buf->curClause = buf->curLCStart; | |
2481 buf->curLCEnd = buf->curLCStart + 1; | |
2482 | |
2483 /* $B%I%C%H$N@_Dj(B */ | |
2484 DotSet(buf); | |
2485 | |
2486 return 0; | |
2487 } | |
2488 | |
2489 /* jcCancel -- $BF~NOCf$NA4J8@a$rL5JQ49>uBV$K$9$k(B */ | |
2490 int | |
2491 jcCancel(buf) | |
2492 jcConvBuf *buf; | |
2493 { | |
2494 TRACE("jcCancel", "Enter") | |
2495 | |
2496 CHECKFIXED(buf); | |
2497 | |
2498 if (buf->nClause <= 0) | |
2499 return 0; | |
2500 | |
2501 /* | |
2502 * $BI=<(%P%C%U%!$NFbMF$r$+$J%P%C%U%!$NFbMF$GCV49$($k(B | |
2503 * $B$3$N:]!"%P%C%U%!$NBg$-$5$O5$$K$9$kI,MW$,L5$$!#$J$<$J$i!"I=(B | |
2504 * $B<(%P%C%U%!$H$+$J%P%C%U%!$NBg$-$5$O>o$KF1$8$@$+$i(B | |
2505 */ | |
2506 bcopy(buf->kanaBuf, buf->displayBuf, buf->bufferSize * sizeof (wchar)); | |
2507 | |
2508 /* | |
2509 * $B:#$"$kA4J8@a$r0l$D$NL5JQ49>uBV$NBgJ8@a$K$9$k(B | |
2510 * $B$3$N:]$b!"J8@a?t$r5$$K$9$kI,MW$O$J$$!#$J$<$J$i!">/$/$H$b0l$D(B | |
2511 * $B$NJ8@a$O$"$C$?$O$:$@$+$i(B | |
2512 */ | |
2513 buf->curClause = buf->curLCStart = 0; | |
2514 buf->nClause = buf->curLCEnd = 1; | |
2515 buf->displayEnd = buf->displayBuf + (buf->kanaEnd - buf->kanaBuf); | |
2516 buf->clauseInfo[0].conv = 0; | |
2517 buf->clauseInfo[0].ltop = 1; | |
2518 buf->clauseInfo[1].kanap = buf->kanaEnd; | |
2519 buf->clauseInfo[1].dispp = buf->displayEnd; | |
2520 buf->clauseInfo[1].conv = 0; | |
2521 buf->clauseInfo[1].ltop = 1; | |
2522 | |
2523 /* $BA48uJdJ8@a$bL58z$K$9$k(B */ | |
2524 buf->candClause = buf->candClauseEnd = -1; | |
2525 | |
2526 /* jllib $B$NJQ49>uBV$bL58z$K$9$k(B */ | |
2527 if (jl_bun_suu(buf->wnn) > 0) | |
2528 jl_kill(buf->wnn, 0, -1); | |
2529 | |
2530 return 0; | |
2531 } | |
2532 | |
2533 /* jcExpand -- $B%+%l%s%HJ8@a$r#1J8;z9-$2$k(B */ | |
2534 int | |
2535 jcExpand(buf, small, convf) | |
2536 jcConvBuf *buf; | |
2537 int small; | |
2538 int convf; | |
2539 { | |
2540 TRACE("jcExpand", "Enter") | |
2541 | |
2542 CHECKFIXED(buf); | |
2543 | |
2544 return expandOrShrink(buf, small, 1, convf); | |
2545 } | |
2546 | |
2547 /* jcShrink -- $B%+%l%s%HJ8@a$r#1J8;z=L$a$k(B */ | |
2548 int | |
2549 jcShrink(buf, small, convf) | |
2550 jcConvBuf *buf; | |
2551 int small; | |
2552 int convf; | |
2553 { | |
2554 TRACE("jcShrink", "Enter") | |
2555 | |
2556 CHECKFIXED(buf); | |
2557 | |
2558 return expandOrShrink(buf, small, 0, convf); | |
2559 } | |
2560 | |
2561 /* jcKana -- $B%+%l%s%HJ8@a$r$+$J$K$9$k(B */ | |
2562 int | |
2563 jcKana(buf, small, kind) | |
2564 jcConvBuf *buf; | |
2565 int small; | |
2566 int kind; | |
2567 { | |
2568 jcClause *clp; | |
2569 wchar *kanap, *kanaendp, *dispp; | |
2570 int start, end; | |
2571 int conv; | |
2572 int c; | |
2573 | |
2574 TRACE("jcKana", "Enter") | |
2575 | |
2576 CHECKFIXED(buf); | |
2577 | |
2578 /* $BJ8@aHV9f$N%A%'%C%/(B */ | |
2579 if (buf->curClause >= buf->nClause) { | |
2580 /* $B%+%l%s%HJ8@a$,:G8e$NJ8@a$G$7$+$b6u$@$C$?>l9g(B | |
2581 * $B$3$N>l9g%(%i!<$K$7$F$b$h$$$,(B... | |
2582 */ | |
2583 return 0; | |
2584 } | |
2585 | |
2586 /* | |
2587 * $B%+%l%s%HJ8@a$,JQ49$5$l$F$$$l$P$$$C$?$sL5JQ49$K$9$k(B | |
2588 */ | |
2589 | |
2590 /* $B$"$H$GJQ49>uBV$r$b$H$KLa$9$?$a!"JQ49>uBV$r%;!<%V$7$F$*$/(B */ | |
2591 conv = buf->clauseInfo[buf->curClause].conv; | |
2592 | |
2593 if (small) { | |
2594 start = buf->curClause; | |
2595 end = start + 1; | |
2596 } else { | |
2597 start = buf->curLCStart; | |
2598 end = buf->curLCEnd; | |
2599 } | |
2600 | |
2601 /* $BA48uJdJ8@a$N%A%'%C%/(B */ | |
2602 checkCandidates(buf, start, end); | |
2603 | |
2604 /* $BL5JQ49>uBV$K$9$k(B */ | |
2605 if (unconvert(buf, start, end) < 0) { | |
2606 return -1; | |
2607 } | |
2608 | |
2609 /* | |
2610 * small $B$,(B 0$B!"$D$^$j%+%l%s%HJ8@a$H$7$FBgJ8@a$rA*Br$7$?>l9g!"(B | |
2611 * $B$=$NCf$N>.J8@a$O0l$D$K$^$H$a$i$l$k$N$G!"(BcurClause $B$H(B | |
2612 * curLCEnd $B$rJQ$($kI,MW$,$"$k(B | |
2613 */ | |
2614 if (!small) { | |
2615 buf->curClause = buf->curLCStart; | |
2616 buf->curLCEnd = buf->curLCStart + 1; | |
2617 } | |
2618 | |
2619 /* | |
2620 * $B$+$JJQ49$9$k(B | |
2621 * | |
2622 * $BI=<(%P%C%U%!$@$1$G$O$J$/!"$+$J%P%C%U%!$bJQ49$9$k(B | |
2623 * | |
2624 * $B$3$l$K$O$5$7$?$kM}M3$O$J$$$,!"$^$"!"(BVer3 $BHG$N(B jclib $B$,(B | |
2625 * $B$=$&$@$C$?$N$G!D(B | |
2626 */ | |
2627 clp = buf->clauseInfo + buf->curClause; | |
2628 kanap = clp->kanap; | |
2629 kanaendp = (clp + 1)->kanap; | |
2630 dispp = clp->dispp; | |
2631 | |
2632 if (kind == JC_HIRAGANA) { /* $B%+%?%+%J"*$R$i$,$J(B */ | |
2633 /* $B%+%?%+%J$r$R$i$,$J$KJQ49$9$k:]$K$O$R$i$,$J$K$J$$;z(B | |
2634 * "$B%t%u%v(B" $B$,$"$k$N$G$$$-$*$$$GJQ49$7$F$7$^$o$J$$$h$&$K(B | |
2635 * $B5$$rIU$1$J$1$l$P$J$i$J$$(B | |
2636 * ($B$^$"<B:]$O5$$r$D$1$k$H$$$&$[$I$N$b$N$G$O$J$$$,(B) | |
2637 */ | |
2638 while (kanap < kanaendp) { | |
2639 c = *kanap; | |
2640 if ((KANABEG + KATAOFFSET) <= c && | |
2641 c <= (KANAEND + KATAOFFSET)) { | |
2642 *kanap = *dispp = c - KATAOFFSET; | |
2643 } | |
2644 kanap++, dispp++; | |
2645 } | |
2646 } else { /* $B$R$i$,$J"*%+%?%+%J(B */ | |
2647 while (kanap < kanaendp) { | |
2648 c = *kanap; | |
2649 if (KANABEG <= c && c <= KANAEND) { | |
2650 *kanap = *dispp = c + KATAOFFSET; | |
2651 } | |
2652 kanap++, dispp++; | |
2653 } | |
2654 } | |
2655 | |
2656 /* | |
2657 * $BJQ49>uBV$r$b$H$KLa$7$F$*$/(B | |
2658 */ | |
2659 | |
2660 /* $B$H$O$$$C$F$b4{$KJQ49$5$l$?J8@a$N>l9g!"$3$l$NIQEY>pJs$r(B | |
2661 * $B%5!<%P$KAw$k$H$^$:$$$N$G!"$"$H$G$+$JJQ49$7$?$3$H$,$o$+$k$h$&$K(B | |
2662 * jcClause.conv $B$O(B -1 $B$K%;%C%H$9$k(B | |
2663 */ | |
2664 clp->conv = conv ? -1 : 0; | |
2665 | |
2666 return 0; | |
2667 } | |
2668 | |
2669 /* jcFix -- $B3NDj$9$k(B */ | |
2670 int | |
2671 jcFix(buf) | |
2672 jcConvBuf *buf; | |
2673 { | |
2674 TRACE("jcFix", "Enter") | |
2675 | |
2676 if (buf->fixed) { | |
2677 /* $B4{$K3NDj$5$l$F$$$k(B | |
2678 * $B%(%i!<$K$7$F$b$h$$$,!D(B | |
2679 */ | |
2680 return 0; | |
2681 } | |
2682 | |
2683 if (forceStudy(buf, buf->nClause) < 0) | |
2684 return -1; | |
2685 | |
2686 /* $B3NDj%U%i%0$rN)$F$k(B */ | |
2687 buf->fixed = 1; | |
2688 | |
2689 return 0; | |
2690 } | |
2691 | |
2692 | |
2693 /* jcFix1 -- $B:G=i$N0lJ8;z$@$1$r3NDj$9$k(B */ | |
2694 int | |
2695 jcFix1(buf) | |
2696 jcConvBuf *buf; | |
2697 { | |
2698 TRACE("jcFix1", "Enter") | |
2699 | |
2700 if (buf->fixed) { | |
2701 /* $B4{$K3NDj$5$l$F$$$k(B | |
2702 * $B%(%i!<$K$7$F$b$h$$$,!D(B | |
2703 */ | |
2704 return 0; | |
2705 } | |
2706 | |
2707 if (buf->nClause >= 1) { | |
2708 /* $B:G=i$NJ8@a$@$1$r3X=,$9$k(B */ | |
2709 if (forceStudy(buf, 1) < 0) | |
2710 return -1; | |
2711 | |
2712 /* $B:G=i$NJ8@a$N0lJ8;z$@$1$K$9$k(B */ | |
2713 buf->nClause = 1; | |
2714 buf->curClause = buf->curLCStart = 0; | |
2715 buf->curLCEnd = 1; | |
2716 buf->kanaEnd = buf->kanaBuf + 1; /* $B%@%_!<(B */ | |
2717 buf->displayEnd = buf->displayBuf + 1; | |
2718 buf->clauseInfo[0].kanap = buf->kanaBuf; | |
2719 buf->clauseInfo[0].dispp = buf->displayBuf; | |
2720 buf->clauseInfo[0].ltop = 1; | |
2721 buf->clauseInfo[1].kanap = buf->kanaBuf + 1; /* $B%@%_!<(B */ | |
2722 buf->clauseInfo[1].dispp = buf->displayBuf + 1; | |
2723 buf->clauseInfo[1].ltop = 1; | |
2724 buf->dot = buf->kanaBuf + 1; | |
2725 buf->candClause = buf->candClauseEnd = -1; | |
2726 } | |
2727 | |
2728 | |
2729 /* $B3NDj%U%i%0$rN)$F$k(B */ | |
2730 buf->fixed = 1; | |
2731 | |
2732 return 0; | |
2733 } | |
2734 | |
2735 /* jcNext -- $B%+%l%s%HJ8@a$r<!8uJd(B/$BA08uJd$GCV$-49$($k(B */ | |
2736 int | |
2737 jcNext(buf, small, prev) | |
2738 jcConvBuf *buf; | |
2739 int small; | |
2740 int prev; | |
2741 { | |
2742 int n; | |
2743 | |
2744 TRACE("jcNext", "Enter") | |
2745 | |
2746 CHECKFIXED(buf); | |
2747 | |
2748 if (!buf->clauseInfo[buf->curClause].conv) { | |
2749 /* $B$^$@JQ49$5$l$F$$$J$$(B */ | |
2750 jcErrno = JE_NOTCONVERTED; | |
2751 return -1; | |
2752 } | |
2753 | |
2754 /* $BA48uJd$,F@$i$l$F$$$J$1$l$P!"A48uJd$rF@$k(B */ | |
2755 if (getCandidates(buf, small) < 0) | |
2756 return -1; | |
2757 | |
2758 n = jl_zenkouho_suu(buf->wnn); | |
2759 if (n <= 1) { | |
2760 /* $B<!8uJd$,$J$$(B */ | |
2761 jcErrno = n < 0 ? JE_WNNERROR : JE_NOCANDIDATE; | |
2762 return -1; | |
2763 } | |
2764 | |
2765 /* $B<!8uJdHV9f$rF@$k(B */ | |
2766 n = jl_c_zenkouho(buf->wnn) + (prev ? -1 : 1); | |
2767 if (n < 0) { | |
2768 n = jl_zenkouho_suu(buf->wnn) - 1; | |
2769 } else if (n >= jl_zenkouho_suu(buf->wnn)) { | |
2770 n = 0; | |
2771 } | |
2772 | |
2773 if (setCandidate(buf, n) < 0) { | |
2774 /* $B<!8uJd$,F@$i$l$J$+$C$?(B */ | |
2775 jcErrno = JE_WNNERROR; | |
2776 return -1; | |
2777 } | |
2778 | |
2779 return 0; | |
2780 } | |
2781 | |
2782 /* jcCandidateInfo -- $B<!8uJd$N?t$H8=:_$N8uJdHV9f$rD4$Y$k(B | |
2783 * $B$b$7<!8uJd$,$^$@%P%C%U%!$KF~$C$F$$$J$1$l$PMQ0U$9$k(B | |
2784 */ | |
2785 int | |
2786 jcCandidateInfo(buf, small, ncandp, curcandp) | |
2787 jcConvBuf *buf; | |
2788 int small; | |
2789 int *ncandp; | |
2790 int *curcandp; | |
2791 { | |
2792 int cand, ncand; | |
2793 | |
2794 TRACE("jcCandidateInfo", "Enter") | |
2795 | |
2796 CHECKFIXED(buf); | |
2797 | |
2798 if (!buf->clauseInfo[buf->curClause].conv) { | |
2799 /* $B$^$@JQ49$5$l$F$$$J$$(B */ | |
2800 jcErrno = JE_NOTCONVERTED; | |
2801 return -1; | |
2802 } | |
2803 | |
2804 /* $BA48uJd$,F@$i$l$F$$$J$1$l$P!"A48uJd$rF@$k(B */ | |
2805 if (getCandidates(buf, small) < 0) | |
2806 return -1; | |
2807 | |
2808 ncand = jl_zenkouho_suu(buf->wnn); | |
2809 if (ncand <= 1) { | |
2810 /* $B8uJd$,$J$$(B */ | |
2811 jcErrno = (ncand < 0) ? JE_WNNERROR : JE_NOCANDIDATE; | |
2812 return -1; | |
2813 } | |
2814 | |
2815 /* $B8=:_$N8uJdHV9f$rF@$k(B */ | |
2816 cand = jl_c_zenkouho(buf->wnn); | |
2817 if (cand < 0) { | |
2818 /* $B8uJd$,F@$i$l$J$$(B */ | |
2819 jcErrno = JE_WNNERROR; | |
2820 return -1; | |
2821 } | |
2822 | |
2823 if (ncandp != NULL) *ncandp = ncand; | |
2824 if (curcandp != NULL) *curcandp = cand; | |
2825 | |
2826 return 0; | |
2827 } | |
2828 | |
2829 /* jcGetCandidate -- $B;XDj$5$l$?HV9f$N8uJd$r<h$j=P$9(B */ | |
2830 int | |
2831 jcGetCandidate(buf, n, candstr) | |
2832 jcConvBuf *buf; | |
2833 int n; | |
2834 wchar *candstr; | |
2835 { | |
2836 wchar tmp[CL_BUFSZ]; | |
2837 | |
2838 TRACE("jcGetCandidate", "Enter") | |
2839 | |
2840 CHECKFIXED(buf); | |
2841 | |
2842 /* $BJ8@a$N%A%'%C%/(B */ | |
2843 if (buf->candClause < 0) { | |
2844 jcErrno = JE_NOCANDIDATE; | |
2845 return -1; | |
2846 } | |
2847 | |
2848 /* $B8uJdHV9f$N%A%'%C%/(B */ | |
2849 if (n < 0 || n >= jl_zenkouho_suu(buf->wnn)) { | |
2850 jcErrno = JE_NOSUCHCANDIDATE; | |
2851 return -1; | |
2852 } | |
2853 | |
2854 /* $BJ8;zNs$r%3%T!<(B */ | |
2855 ki2_jl_get_zenkouho_kanji(buf->wnn, n, tmp, CL_BUFSZ); | |
2856 tmp[CL_BUFSZ - 1] = 0; | |
2857 wstrcpy(candstr, tmp); | |
2858 | |
2859 return 0; | |
2860 } | |
2861 | |
2862 /* jcSelect -- $BI=<(%P%C%U%!$r;XDj$5$l$?8uJd$HCV$-49$($k(B */ | |
2863 int | |
2864 jcSelect(buf, n) | |
2865 jcConvBuf *buf; | |
2866 int n; | |
2867 { | |
2868 TRACE("jcSelect", "Enter") | |
2869 | |
2870 CHECKFIXED(buf); | |
2871 | |
2872 #ifdef DEBUG_WNNLIB | |
2873 fprintf(stderr, | |
2874 "Select: %d [%s for %d - %d]\n", | |
2875 n, | |
2876 buf->candKind == CAND_SMALL ? "small" : "large", | |
2877 buf->candClause, | |
2878 buf->candClauseEnd); | |
2879 #endif | |
2880 | |
2881 /* $BJ8@a$N%A%'%C%/(B */ | |
2882 if (buf->candClause < 0) { | |
2883 jcErrno = JE_NOCANDIDATE; | |
2884 return -1; | |
2885 } | |
2886 | |
2887 /* $B8uJdHV9f$N%A%'%C%/(B */ | |
2888 if (n < 0 || n >= jl_zenkouho_suu(buf->wnn)) { | |
2889 jcErrno = JE_NOSUCHCANDIDATE; | |
2890 return -1; | |
2891 } | |
2892 | |
2893 /* $B8uJd$,%;%C%H$5$l$F$$$J$1$l$P!"%;%C%H$9$k(B */ | |
2894 if (jl_c_zenkouho(buf->wnn) != n && setCandidate(buf, n) < 0) | |
2895 return -1; | |
2896 | |
2897 return 0; | |
2898 } | |
2899 | |
2900 /* jcDotOffset -- $BBgJ8@a$N@hF,$+$i$N%I%C%H$N%*%U%;%C%H$rJV$9(B */ | |
2901 int | |
2902 jcDotOffset(buf) | |
2903 jcConvBuf *buf; | |
2904 { | |
2905 TRACE("jcDotOffset", "Enter") | |
2906 | |
2907 return buf->dot - buf->clauseInfo[buf->curLCStart].kanap; | |
2908 } | |
2909 | |
2910 /* jcIsConverted -- $B;XDj$5$l$?J8@a$,JQ49$5$l$F$$$k$+$I$&$+$rJV$9(B */ | |
2911 int | |
2912 jcIsConverted(buf, cl) | |
2913 jcConvBuf *buf; | |
2914 int cl; | |
2915 { | |
2916 TRACE("jcIsConverted", "Enter") | |
2917 | |
2918 if (cl < 0 || cl > buf->nClause) { | |
2919 /* cl == jcNClause $B$N$H$-$r%(%i!<$K$7$F$b$$$$$N$@$1$l$I(B | |
2920 * $B%+%l%s%HJ8@a$,(B jcNClause $B$N$H$-$,$"$k$N$G(B | |
2921 * $B%(%i!<$H$O$7$J$$$3$H$K$7$?(B | |
2922 */ | |
2923 return -1; | |
2924 } | |
2925 return (buf->clauseInfo[cl].conv != 0); | |
2926 } | |
2927 | |
2928 /* jcMove -- $B%I%C%H!&%+%l%s%HJ8@a$r0\F0$9$k(B */ | |
2929 int | |
2930 jcMove(buf, small, dir) | |
2931 jcConvBuf *buf; | |
2932 int small; | |
2933 int dir; | |
2934 { | |
2935 jcClause *clp = buf->clauseInfo + buf->curClause; | |
2936 int i; | |
2937 | |
2938 TRACE("jcMove", "Enter") | |
2939 | |
2940 if (!clp->conv) { | |
2941 /* $B%+%l%s%HJ8@a$,JQ49$5$l$F$$$J$$$N$G!"%I%C%H$N0\F0$K$J$k(B */ | |
2942 if (dir == JC_FORWARD) { | |
2943 if (buf->curClause == buf->nClause) { | |
2944 /* $B$9$G$K0lHV:G8e$K$$$k(B */ | |
2945 jcErrno = JE_CANTMOVE; | |
2946 return -1; | |
2947 } else if (buf->dot == (clp + 1)->kanap) { | |
2948 /* $B%I%C%H$,%+%l%s%HJ8@a$N:G8e$K$"$k$N$G(B | |
2949 * $BJ8@a0\F0$9$k(B | |
2950 */ | |
2951 goto clausemove; | |
2952 } else { | |
2953 buf->dot++; | |
2954 } | |
2955 } else { | |
2956 if (buf->dot == clp->kanap) { | |
2957 /* $B%I%C%H$,%+%l%s%HJ8@a$N@hF,$K$"$k$N$G(B | |
2958 * $BJ8@a0\F0$9$k(B | |
2959 */ | |
2960 goto clausemove; | |
2961 } else | |
2962 buf->dot--; | |
2963 } | |
2964 return 0; | |
2965 } | |
2966 | |
2967 clausemove: /* $BJ8@a0\F0(B */ | |
2968 clp = buf->clauseInfo; | |
2969 | |
2970 if (small) { | |
2971 /* $B>.J8@aC10L$N0\F0(B */ | |
2972 if (dir == JC_FORWARD) { | |
2973 if (buf->curClause == buf->nClause) { | |
2974 jcErrno = JE_CANTMOVE; | |
2975 return -1; | |
2976 } | |
2977 buf->curClause++; | |
2978 if (buf->curClause >= buf->curLCEnd) { | |
2979 /* $BBgJ8@a$b0\F0$9$k(B */ | |
2980 buf->curLCStart = buf->curLCEnd; | |
2981 for (i = buf->curLCStart + 1; | |
2982 i <= buf->nClause && !clp[i].ltop; i++) | |
2983 ; | |
2984 buf->curLCEnd = i; | |
2985 } | |
2986 } else { /* JC_BACKWARD */ | |
2987 if (buf->curClause == 0) { | |
2988 jcErrno = JE_CANTMOVE; | |
2989 return -1; | |
2990 } | |
2991 buf->curClause--; | |
2992 if (buf->curClause < buf->curLCStart) { | |
2993 /* $BBgJ8@a$b0\F0$9$k(B */ | |
2994 buf->curLCEnd = buf->curLCStart; | |
2995 for (i = buf->curClause; !clp[i].ltop; i--) | |
2996 ; | |
2997 buf->curLCStart = i; | |
2998 } | |
2999 } | |
3000 } else { | |
3001 /* $BBgJ8@aC10L$N0\F0(B */ | |
3002 if (dir == JC_FORWARD) { | |
3003 if (buf->curLCStart == buf->nClause) { | |
3004 jcErrno = JE_CANTMOVE; | |
3005 return -1; | |
3006 } | |
3007 buf->curLCStart = buf->curClause = buf->curLCEnd; | |
3008 for (i = buf->curLCStart + 1; | |
3009 i <= buf->nClause && !clp[i].ltop; i++) | |
3010 ; | |
3011 buf->curLCEnd = i; | |
3012 } else { | |
3013 if (buf->curLCStart == 0) { | |
3014 jcErrno = JE_CANTMOVE; | |
3015 return -1; | |
3016 } | |
3017 buf->curLCEnd = buf->curLCStart; | |
3018 for (i = buf->curLCEnd - 1; !clp[i].ltop; i--) | |
3019 ; | |
3020 buf->curLCStart = buf->curClause = i; | |
3021 } | |
3022 } | |
3023 | |
3024 /* $BJ8@a0\F0$7$?$i%I%C%H$O$=$NJ8@a$N@hF,$K0\F0$9$k(B */ | |
3025 buf->dot = clp[buf->curClause].kanap; | |
3026 | |
3027 return 0; | |
3028 } | |
3029 | |
3030 /* jcTop -- $B%I%C%H!&%+%l%s%HJ8@a$rJ8$N@hF,$K0\F0$9$k(B */ | |
3031 int | |
3032 jcTop(buf) | |
3033 jcConvBuf *buf; | |
3034 { | |
3035 TRACE("jcTop", "Enter") | |
3036 | |
3037 /* $B%+%l%s%HJ8@a$r(B 0 $B$K$7$F%I%C%H$r@hF,$K;}$C$F$/$k(B */ | |
3038 setCurClause(buf, 0); | |
3039 buf->dot = buf->kanaBuf; | |
3040 | |
3041 return 0; | |
3042 } | |
3043 | |
3044 /* jcBottom -- $B%I%C%H!&%+%l%s%HJ8@a$rJ8$N:G8e$K0\F0$9$k(B */ | |
3045 int | |
3046 jcBottom(buf) | |
3047 jcConvBuf *buf; | |
3048 { | |
3049 TRACE("jcBottom", "Enter") | |
3050 | |
3051 /* | |
3052 * Ver3 $BBP1~$N(B jclib $B$G$O!"%+%l%s%HJ8@a$r(B jcNClause $B$K$7$F(B | |
3053 * $B%I%C%H$r:G8e$K;}$C$F$/$k$@$1$@$C$?(B | |
3054 * $B$3$l$@$H!":G8e$NJ8@a$K$+$J$rF~$l$F$$$F!"%+!<%=%k$rF0$+$7$F(B | |
3055 * jcBottom() $B$G85$KLa$C$F:F$S$+$J$rF~$l$k$H!"JL$NJ8@a$K(B | |
3056 * $B$J$C$F$7$^$&(B | |
3057 * $B$=$3$G!":G8e$NJ8@a$,L5JQ49>uBV$N;~$K$O!"%+%l%s%HJ8@a$O(B | |
3058 * buf->nClause $B$G$O$J$/!"(Bbuf->nClause - 1 $B$K$9$k$3$H$K$9$k(B | |
3059 */ | |
3060 if (buf->nClause > 0 && !buf->clauseInfo[buf->nClause - 1].conv) { | |
3061 buf->curClause = buf->curLCStart = buf->nClause - 1; | |
3062 buf->curLCEnd = buf->nClause; | |
3063 } else { | |
3064 buf->curClause = buf->curLCStart = buf->nClause; | |
3065 buf->curLCEnd = buf->nClause + 1; | |
3066 } | |
3067 buf->dot = buf->kanaEnd; | |
3068 return 0; | |
3069 } | |
3070 | |
3071 /* jcInsertChar -- $B%I%C%H$N0LCV$K0lJ8;zA^F~$9$k(B */ | |
3072 int | |
3073 jcInsertChar(buf, c) | |
3074 jcConvBuf *buf; | |
3075 int c; | |
3076 { | |
3077 jcClause *clp; | |
3078 wchar *dot, *dispdot; | |
3079 int ksizenew, dsizenew; | |
3080 | |
3081 TRACE("jcInsertChar", "Enter") | |
3082 | |
3083 CHECKFIXED(buf); | |
3084 | |
3085 /* $BA48uJdJ8@a$,%+%l%s%HBgJ8@a$K$"$l$PL58z$K$9$k(B */ | |
3086 checkCandidates(buf, buf->curLCStart, buf->curLCEnd); | |
3087 | |
3088 /* | |
3089 * $B!&%+%l%s%HJ8@aHV9f$,(B buf->nClause $B$G$"$k>l9g(B | |
3090 * - $B$3$l$O%I%C%H$,:G8e$NJ8@a$N<!$K$"$k$H$$$&$3$H$J$N$G(B | |
3091 * $B?7$7$$J8@a$r:n$k(B | |
3092 * $B!&JQ49:Q$_$NJ8@a$N>l9g(B | |
3093 * - $BL5JQ49$N>uBV$KLa$7$F$+$iA^F~(B | |
3094 * $B!&$=$NB>(B | |
3095 * - $BC1$KA^F~$9$l$P$h$$(B | |
3096 */ | |
3097 clp = buf->clauseInfo + buf->curLCStart; | |
3098 if (buf->curLCStart == buf->nClause) { | |
3099 /* $B?7$?$KJ8@a$r:n$k(B */ | |
3100 /* clauseInfo $B$N%5%$%:$N%A%'%C%/(B */ | |
3101 if (buf->nClause >= buf->clauseSize && | |
3102 resizeCInfo(buf, buf->nClause + 1) < 0) { | |
3103 return -1; | |
3104 } | |
3105 /* buf->nClause $B$N%"%C%W%G!<%H$H(B clauseInfo $B$N@_Dj(B */ | |
3106 buf->nClause += 1; | |
3107 clp = buf->clauseInfo + buf->nClause; | |
3108 clp->conv = 0; | |
3109 clp->ltop = 1; | |
3110 clp->kanap = buf->kanaEnd; | |
3111 clp->dispp = buf->displayEnd; | |
3112 } else if (clp->conv) { | |
3113 /* $BL5JQ49>uBV$K$9$k(B */ | |
3114 if (unconvert(buf, buf->curLCStart, buf->curLCEnd) < 0) | |
3115 return -1; | |
3116 buf->curClause = buf->curLCStart; | |
3117 buf->curLCEnd = buf->curLCStart + 1; | |
3118 DotSet(buf); | |
3119 } | |
3120 | |
3121 clp = buf->clauseInfo + buf->curLCStart; | |
3122 | |
3123 /* $B%P%C%U%!$NBg$-$5$N%A%'%C%/(B */ | |
3124 ksizenew = (buf->kanaEnd - buf->kanaBuf) + 1; | |
3125 dsizenew = (buf->displayEnd - buf->displayBuf) + 1; | |
3126 if ((ksizenew > buf->bufferSize || dsizenew > buf->bufferSize) && | |
3127 resizeBuffer(buf, ksizenew > dsizenew ? ksizenew : dsizenew) < 0) { | |
3128 return -1; | |
3129 } | |
3130 | |
3131 /* $B$+$J%P%C%U%!$r%"%C%W%G!<%H(B */ | |
3132 dot = buf->dot; | |
3133 /* $B%+%l%s%HJ8@a$N8e$m$r0lJ8;z$:$i$9(B */ | |
3134 moveKBuf(buf, buf->curLCStart + 1, 1); | |
3135 /* $B%+%l%s%HJ8@aFb$N%I%C%H0J9_$r0lJ8;z$:$i$9(B */ | |
3136 (void)bcopy((char *)dot, (char *)(dot + 1), | |
3137 ((clp + 1)->kanap - dot) * sizeof(wchar)); | |
3138 /* $BA^F~(B */ | |
3139 *dot = c; | |
3140 | |
3141 /* $BI=<(%P%C%U%!$r%"%C%W%G!<%H(B */ | |
3142 dispdot = clp->dispp + (dot - clp->kanap); | |
3143 /* $B%+%l%s%HJ8@a$N8e$m$r0lJ8;z$:$i$9(B */ | |
3144 moveDBuf(buf, buf->curLCStart + 1, 1); | |
3145 /* $B%+%l%s%HJ8@aFb$N%I%C%H0J9_$r0lJ8;z$:$i$9(B */ | |
3146 (void)bcopy((char *)dispdot, (char *)(dispdot + 1), | |
3147 ((clp + 1)->dispp - dispdot) * sizeof(wchar)); | |
3148 /* $BA^F~(B */ | |
3149 *dispdot = c; | |
3150 | |
3151 /* $B%I%C%H$r99?7(B */ | |
3152 buf->dot++; | |
3153 | |
3154 return 0; | |
3155 } | |
3156 | |
3157 /* jcDeleteChar -- $B%I%C%H$NA0$^$?$O8e$m$N0lJ8;z$r:o=|$9$k(B */ | |
3158 int | |
3159 jcDeleteChar(buf, prev) | |
3160 jcConvBuf *buf; | |
3161 int prev; | |
3162 { | |
3163 jcClause *clp; | |
3164 wchar *dot, *dispdot; | |
3165 | |
3166 TRACE("jcDeleteChar", "Enter") | |
3167 | |
3168 CHECKFIXED(buf); | |
3169 | |
3170 clp = buf->clauseInfo; | |
3171 if (buf->nClause == 0) { | |
3172 /* $BJ8@a?t$,(B 0$B!"$D$^$j2?$bF~$C$F$$$J$$;~(B: | |
3173 * - $B%(%i!<(B | |
3174 */ | |
3175 jcErrno = JE_CANTDELETE; | |
3176 return -1; | |
3177 } else if (buf->curClause >= buf->nClause) { | |
3178 /* $B%+%l%s%HJ8@a$,:G8e$NJ8@a$N<!$K$"$k;~(B: | |
3179 * - prev $B$G$"$l$P!"A0$NJ8@a$N:G8e$NJ8;z$r:o=|(B | |
3180 * $B%+%l%s%HJ8@a$OA0$NJ8@a$K0\F0$9$k(B | |
3181 * $BI,MW$J$i$PA0$NJ8@a$rL5JQ49$KLa$7$F$+$i:o=|$9$k(B | |
3182 * $BA0$NJ8@a$,$J$$$3$H$O$"$jF@$J$$(B | |
3183 * - !prev $B$J$i$P%(%i!<(B | |
3184 */ | |
3185 if (!prev) { | |
3186 jcErrno = JE_CANTDELETE; | |
3187 return -1; | |
3188 } | |
3189 (void)jcMove(buf, 0, JC_BACKWARD); | |
3190 } else if (clp[buf->curLCStart].conv) { | |
3191 /* $B%+%l%s%HJ8@a$,JQ49$5$l$F$$$k;~(B: | |
3192 * - prev $B$G$"$l$PA0$NJ8@a$N:G8e$NJ8;z$r:o=|(B | |
3193 * $B%+%l%s%HJ8@a$OA0$NJ8@a$K0\F0$9$k(B | |
3194 * $BI,MW$J$i$PA0$NJ8@a$rL5JQ49$KLa$7$F$+$i:o=|$9$k(B | |
3195 * $B%+%l%s%HJ8@a$,@hF,$J$i$P%(%i!<(B | |
3196 * - !prev $B$J$i%+%l%s%HJ8@a$rL5JQ49$KLa$7$F!"J8@a$N(B | |
3197 * $B:G=i$NJ8;z$r:o=|(B | |
3198 */ | |
3199 if (prev) { | |
3200 if (buf->curLCStart == 0) { | |
3201 jcErrno = JE_CANTDELETE; | |
3202 return -1; | |
3203 } | |
3204 (void)jcMove(buf, 0, JC_BACKWARD); | |
3205 } | |
3206 } else { | |
3207 /* $B%+%l%s%HJ8@a$,JQ49$5$l$F$$$J$$;~(B: | |
3208 * - prev $B$G$"$l$P%I%C%H$NA0$NJ8;z$r:o=|(B | |
3209 * $B$?$@$7%I%C%H$,J8@a$N@hF,$K$"$l$PA0$NJ8@a$N(B | |
3210 * $B:G8e$NJ8;z$r:o=|(B | |
3211 * $B$=$N;~$K$O%+%l%s%HJ8@a$OA0$NJ8@a$K0\F0$9$k(B | |
3212 * $BI,MW$J$i$PA0$NJ8@a$rL5JQ49$KLa$7$F$+$i:o=|$9$k(B | |
3213 * $B%+%l%s%HJ8@a$,@hF,$J$i$P%(%i!<(B | |
3214 * - !prev $B$J$i%I%C%H$N<!$NJ8;z$r:o=|(B | |
3215 * $B%I%C%H$,J8@a$N:G8e$NJ8;z$N<!$K$"$l$P%(%i!<(B | |
3216 */ | |
3217 if (prev) { | |
3218 if (buf->dot == clp[buf->curLCStart].kanap) { | |
3219 if (buf->curLCStart == 0) { | |
3220 jcErrno = JE_CANTDELETE; | |
3221 return -1; | |
3222 } | |
3223 (void)jcMove(buf, 0, JC_BACKWARD); | |
3224 } | |
3225 } else { | |
3226 if (buf->dot == clp[buf->curLCEnd].kanap) { | |
3227 jcErrno = JE_CANTDELETE; | |
3228 return -1; | |
3229 } | |
3230 } | |
3231 } | |
3232 | |
3233 if (buf->clauseInfo[buf->curLCStart].conv) { | |
3234 /* $B%+%l%s%HJ8@a$,JQ49:Q$_$G$"$l$PL5JQ49$KLa$9(B */ | |
3235 if (jcUnconvert(buf) < 0) | |
3236 return -1; | |
3237 /* prev $B$G$"$l$PJ8@a$N:G8e$NJ8;z!"$=$&$G$J$1$l$PJ8@a$N(B | |
3238 * $B@hF,$NJ8;z$r:o=|$9$k(B | |
3239 */ | |
3240 if (prev) { | |
3241 buf->dot = buf->clauseInfo[buf->curLCEnd].kanap - 1; | |
3242 } else { | |
3243 buf->dot = buf->clauseInfo[buf->curLCStart].kanap; | |
3244 } | |
3245 } else { | |
3246 /* prev $B$J$i%I%C%H$r#1J8;zLa$7$F$*$/(B | |
3247 * $B$3$&$9$l$P%I%C%H$N8e$m$NJ8;z$r:o=|$9$k$3$H$K$J$k(B | |
3248 * $B:o=|$7=*$o$C$?$H$-$K%I%C%H$rF0$+$9I,MW$b$J$$(B | |
3249 */ | |
3250 if (prev) | |
3251 buf->dot--; | |
3252 } | |
3253 | |
3254 clp = buf->clauseInfo + buf->curLCStart; | |
3255 | |
3256 /* $B$+$J%P%C%U%!$r%"%C%W%G!<%H(B */ | |
3257 dot = buf->dot; | |
3258 /* $B%+%l%s%HJ8@aFb$N%I%C%H0J9_$r0lJ8;z$:$i$9(B */ | |
3259 (void)bcopy((char *)(dot + 1), (char *)dot, | |
3260 ((clp + 1)->kanap - (dot + 1)) * sizeof(wchar)); | |
3261 /* $B%+%l%s%HJ8@a$N8e$m$r0lJ8;z$:$i$9(B */ | |
3262 moveKBuf(buf, buf->curLCEnd, -1); | |
3263 | |
3264 /* $BI=<(%P%C%U%!$r%"%C%W%G!<%H(B */ | |
3265 dispdot = clp->dispp + (dot - clp->kanap); | |
3266 /* $B%+%l%s%HJ8@aFb$N%I%C%H0J9_$r0lJ8;z$:$i$9(B */ | |
3267 (void)bcopy((char *)(dispdot + 1), (char *)dispdot, | |
3268 ((clp + 1)->dispp - (dispdot + 1)) * sizeof(wchar)); | |
3269 /* $B%+%l%s%HJ8@a$N8e$m$r0lJ8;z$:$i$9(B */ | |
3270 moveDBuf(buf, buf->curLCEnd, -1); | |
3271 | |
3272 /* $B%+%l%s%HJ8@a$ND9$5$,#1$@$C$?>l9g$K$OJ8@a$,#18:$k$3$H$K$J$k(B */ | |
3273 if (clp->kanap == (clp + 1)->kanap) { | |
3274 /* $BJ8@a$,$J$/$J$C$F$7$^$C$?(B */ | |
3275 moveCInfo(buf, buf->curLCEnd, -1); | |
3276 setCurClause(buf, buf->curLCStart); | |
3277 DotSet(buf); | |
3278 } | |
3279 | |
3280 return 0; | |
3281 } | |
3282 | |
3283 /* jcKillLine -- $B%I%C%H0J9_$r:o=|$9$k(B */ | |
3284 int | |
3285 jcKillLine(buf) | |
3286 jcConvBuf *buf; | |
3287 { | |
3288 int cc = buf->curClause; | |
3289 | |
3290 TRACE("jcKillLine", "Enter") | |
3291 | |
3292 CHECKFIXED(buf); | |
3293 | |
3294 /* $BF~NOCf$NJ8@a$,$J$$$+!"%I%C%H$,:G8e$NJ8@a$N<!$K$"$l$P!"%(%i!<(B */ | |
3295 if (buf->nClause <= 0 || cc >= buf->nClause) { | |
3296 jcErrno = JE_CANTDELETE; | |
3297 return -1; | |
3298 } | |
3299 | |
3300 #ifdef DEBUG_WNNLIB | |
3301 showBuffers(buf, "before jcKillLine"); | |
3302 #endif | |
3303 | |
3304 /* $B%I%C%H$,F~NO$N@hF,$G$"$l$P!"(BjcClear $B$r8F=P$7$F=*$j(B */ | |
3305 if (buf->dot == buf->kanaBuf) | |
3306 return jcClear(buf); | |
3307 | |
3308 /* | |
3309 * $B%I%C%H0J9_$r:o=|$9$k(B | |
3310 * $B$H$$$C$F$b!"C1$KJ8@a>pJs$H%]%$%s%?$rJQ99$9$l$PNI$$(B | |
3311 */ | |
3312 checkCandidates(buf, cc, buf->nClause); | |
3313 if (buf->clauseInfo[cc].conv) { | |
3314 /* $BJQ49$5$l$F$$$l$P!"%+%l%s%HJ8@a$r4^$a$F:o=|(B */ | |
3315 buf->kanaEnd = buf->dot = buf->clauseInfo[cc].kanap; | |
3316 buf->displayEnd = buf->clauseInfo[cc].dispp; | |
3317 | |
3318 /* $B%+%l%s%HJ8@a$rKvHxJ8@a$K0\$9(B */ | |
3319 buf->nClause = buf->curClause = buf->curLCStart = cc; | |
3320 buf->curLCEnd = cc + 1; | |
3321 } else { | |
3322 /* $BL$JQ49$J$i$P!"%I%C%H0J9_$r:o=|(B */ | |
3323 buf->kanaEnd = buf->dot; | |
3324 buf->displayEnd = buf->clauseInfo[cc].dispp | |
3325 + (buf->dot - buf->clauseInfo[cc].kanap); | |
3326 | |
3327 /* $B%+%l%s%HJ8@a$O$=$N$^$^$G!"KvHx$@$1$r5$$K$9$l$P$h$$(B */ | |
3328 cc++; | |
3329 buf->nClause = buf->curLCEnd = cc; | |
3330 } | |
3331 | |
3332 /* $B6u$NKvHxJ8@a$N@_Dj$r$9$k(B */ | |
3333 buf->clauseInfo[cc].kanap = buf->kanaEnd; | |
3334 buf->clauseInfo[cc].dispp = buf->displayEnd; | |
3335 buf->clauseInfo[cc].conv = 0; | |
3336 buf->clauseInfo[cc].ltop = 1; | |
3337 | |
3338 /* $B%+%l%s%HJ8@a$H$=$l0J9_$N(B jllib $B$NJ8@a>pJs$bL58z$K$9$k(B */ | |
3339 if (jl_bun_suu(buf->wnn) > cc) | |
3340 jl_kill(buf->wnn, cc, -1); | |
3341 | |
3342 #ifdef DEBUG_WNNLIB | |
3343 showBuffers(buf, "after jcKillLine"); | |
3344 #endif | |
3345 return 0; | |
3346 } | |
3347 | |
3348 /* jcChangeClause -- $B%+%l%s%HBgJ8@a$r;XDj$5$l$?J8;zNs$GCV$-49$($k(B */ | |
3349 int | |
3350 jcChangeClause(buf, str) | |
3351 jcConvBuf *buf; | |
3352 wchar *str; | |
3353 { | |
3354 jcClause *clps, *clpe; | |
3355 wchar *p; | |
3356 int newlen; | |
3357 int oklen, odlen; | |
3358 int ksize, dsize; | |
3359 | |
3360 TRACE("jcChangeClause", "Enter") | |
3361 | |
3362 CHECKFIXED(buf); | |
3363 | |
3364 clps = buf->clauseInfo + buf->curLCStart; | |
3365 clpe = buf->clauseInfo + buf->curLCEnd; | |
3366 | |
3367 newlen = 0; | |
3368 p = str; | |
3369 while (*p++) | |
3370 newlen++; | |
3371 | |
3372 /* $B$+$J%P%C%U%!$HI=<(%P%C%U%!$N%5%$%:$rD4$Y$F!"(B | |
3373 * $BF~$i$J$+$C$?$iBg$-$/$9$k(B | |
3374 */ | |
3375 if (buf->curLCStart < buf->nClause) { | |
3376 oklen = clpe->kanap - clps->kanap; | |
3377 odlen = clpe->dispp - clps->dispp; | |
3378 } else { | |
3379 oklen = odlen = 0; | |
3380 } | |
3381 ksize = (buf->kanaEnd - buf->kanaBuf) + newlen - oklen; | |
3382 dsize = (buf->displayEnd - buf->displayBuf) + newlen - odlen; | |
3383 if (ksize > buf->bufferSize || dsize > buf->bufferSize) { | |
3384 if (resizeBuffer(buf, ksize > dsize ? ksize : dsize) < 0) | |
3385 return -1; | |
3386 } | |
3387 | |
3388 /* curLCStart $B$,(B nClause $B$KEy$7$$;~$@$1!"?7$?$KJ8@a$,:n$i$l$k(B */ | |
3389 if (buf->curLCStart == buf->nClause) { | |
3390 /* clauseInfo $B$NBg$-$5$rD4$Y$k(B*/ | |
3391 if (buf->nClause + 1 > buf->clauseSize) { | |
3392 if (resizeCInfo(buf, buf->nClause + 1) < 0) | |
3393 return -1; | |
3394 } | |
3395 /* $B?7$?$K$G$-$?(B clauseInfo $B$K$O!"(BnClause $BHVL\(B | |
3396 * ($B$D$^$j:G8e$N(B clauseInfo) $B$NFbMF$r%3%T!<$7$F$*$/(B | |
3397 */ | |
3398 clpe = buf->clauseInfo + buf->nClause + 1; | |
3399 *clpe = *(clpe - 1); | |
3400 | |
3401 buf->nClause++; | |
3402 } | |
3403 | |
3404 clps = buf->clauseInfo + buf->curLCStart; | |
3405 clpe = buf->clauseInfo + buf->curLCEnd; | |
3406 | |
3407 /* $B$+$J%P%C%U%!$NJQ99(B */ | |
3408 /* $B$^$:$O8e$m$r0\F0$5$;$k(B */ | |
3409 moveKBuf(buf, buf->curLCEnd, newlen - oklen); | |
3410 /* str $B$r%3%T!<(B */ | |
3411 (void)bcopy((char *)str, (char *)clps->kanap, | |
3412 newlen * sizeof(wchar)); | |
3413 /* $BI=<(%P%C%U%!$NJQ99(B */ | |
3414 /* $B$^$:$O8e$m$r0\F0$5$;$k(B */ | |
3415 moveDBuf(buf, buf->curLCEnd, newlen - odlen); | |
3416 /* str $B$r%3%T!<(B */ | |
3417 (void)bcopy((char *)str, (char *)clps->dispp, | |
3418 newlen * sizeof(wchar)); | |
3419 | |
3420 /* clauseInfo $B$NJQ99(B */ | |
3421 /* $B$^$:$O8e$m$r0\F0$5$;$k(B */ | |
3422 if (clpe > clps + 1) { | |
3423 (void)bcopy((char *)clpe, (char *)(clps + 1), | |
3424 (buf->nClause + 1 - buf->curLCEnd) * | |
3425 sizeof(jcClause)); | |
3426 } | |
3427 clps->conv = 0; | |
3428 clps->ltop = 1; | |
3429 (clps + 1)->ltop = 1; | |
3430 | |
3431 return 0; | |
3432 } | |
3433 | |
3434 /* jcSaveDic -- $B<-=q!&IQEY%U%!%$%k$r%;!<%V$9$k(B */ | |
3435 int | |
3436 jcSaveDic(buf) | |
3437 jcConvBuf *buf; | |
3438 { | |
3439 TRACE("jcSaveDic", "Enter") | |
3440 | |
3441 return jl_dic_save_all(buf->wnn); | |
3442 } | |
3443 | |
3444 /* $B%5!<%P$H$N@\B3$N$?$a$N4X?t72(B */ | |
3445 | |
3446 struct wnn_buf * | |
3447 jcOpen(server, envname, override, rcfile, errmsg, confirm, timeout) | |
3448 char *server; | |
3449 char *envname; | |
3450 int override; | |
3451 char *rcfile; | |
3452 void (*errmsg)(); | |
3453 int (*confirm)(); | |
3454 int timeout; | |
3455 { | |
3456 return jcOpen2(server, envname, override, rcfile, rcfile, errmsg, confirm, timeout); | |
3457 } | |
3458 | |
3459 struct wnn_buf * | |
3460 jcOpen2(server, envname, override, rcfile4, rcfile6, errmsg, confirm, timeout) | |
3461 char *server; | |
3462 char *envname; | |
3463 int override; | |
3464 char *rcfile4; /* wnnenvrc for Wnn4 */ | |
3465 char *rcfile6; /* wnnenvrc for Wnn6 */ | |
3466 void (*errmsg)(); | |
3467 int (*confirm)(); | |
3468 int timeout; | |
3469 { | |
3470 struct wnn_buf *wnnbuf; | |
3471 struct wnn_env *wnnenv; | |
3472 char *rcfile; | |
3473 int env_exists; | |
3474 int wnn_version; | |
3475 extern char *getenv(); | |
3476 | |
3477 TRACE("jcOpen2", "Enter") | |
3478 | |
3479 /* $B%5!<%PL>$,(B NULL $B$^$?$O6uJ8;zNs$@$C$?>l9g$O4D6-JQ?t(B JSERVER $B$r;HMQ$9$k(B */ | |
3480 if (server == NULL || server[0] == '\0') { | |
3481 server = getenv("JSERVER"); | |
3482 } | |
3483 | |
3484 /* $B4D6-L>$,6uJ8;zNs$@$C$?>l9g$O!"%f!<%6L>$r;HMQ$9$k(B */ | |
3485 if (envname != NULL && *envname == 0) { | |
3486 struct passwd *p = getpwuid(getuid()); | |
3487 | |
3488 if (p != NULL) envname = p->pw_name; | |
3489 } | |
3490 | |
3491 /* | |
3492 * jserver $B$N%P!<%8%g%s$K$h$C$F(B wnnrc $B$rJQ$($?$$$N$@$,!"(B | |
3493 * $B%P!<%8%g%s$rD4$Y$k$?$a$K$O$^$:@\B3$7$J$/$F$O$J$i$J$$!#(B | |
3494 * $B$=$3$G(B wnnrc $B0z?t$r(B NULL $B$K$7$F@\B3$9$k!#(B | |
3495 */ | |
3496 #if JSERVER_VERSION > 0x4030 | |
3497 wnnbuf = jl_open_lang(envname, server, "ja_JP", | |
3498 NULL, confirm, errmsg, timeout); | |
3499 #else | |
3500 wnnbuf = jl_open(envname, server, NULL, confirm, errmsg, timeout); | |
3501 #endif | |
3502 | |
3503 /* | |
3504 * $B!&%P%C%U%!$,:n$l$J$+$C$?(B | |
3505 * $B!&(Bjserver $B$K@\B3$G$-$J$+$C$?(B | |
3506 * $B!&(Bwnnrc $B%U%!%$%k$N;XDj$,$J$$(B ($B$D$^$j=i4|2=$7$J$$(B) | |
3507 * $B>l9g$K$O$3$l$G=*$j!#(B | |
3508 */ | |
3509 if (wnnbuf == NULL || | |
3510 !jl_isconnect(wnnbuf) || | |
3511 (rcfile4 == NULL && rcfile6 == NULL)) { | |
3512 return wnnbuf; | |
3513 } | |
3514 | |
3515 wnnenv = jl_env_get(wnnbuf); | |
3516 | |
3517 /* | |
3518 * $B0JA0$+$i4D6-$,B8:_$7$F$$$?$+$I$&$+$H!"%5!<%P$N%P!<%8%g%s$rD4$Y$k!#(B | |
3519 * $B4D6-$,B8:_$7$F$$$?$+$I$&$+$O(B jl_fuzokugo_get $B$G(B ($B$D$^$jIUB08l(B | |
3520 * $B<-=q$,@_Dj$5$l$F$$$k$+$I$&$+$G(B) $BH=CG$9$k!#(Bjl_open_lang $B$O4D6-$,(B | |
3521 * $B$J$1$l$P:n$C$F$7$^$&$?$a!"(Bjs_env_exist $B$O;H$($J$$!#(B | |
3522 */ | |
3523 { | |
3524 char fzk[1024]; | |
3525 int serv_ver, lib_ver; | |
3526 | |
3527 if (ki2_jl_fuzokugo_get(wnnbuf, fzk, 1024) != -1) { | |
3528 env_exists = 1; | |
3529 TRACE("jcOpen2", "env exists"); | |
3530 } else { | |
3531 env_exists = 0; | |
3532 TRACE("jcOpen2", "no env"); | |
3533 } | |
3534 if (js_version(wnnenv->js_id, &serv_ver, &lib_ver) != -1 && | |
3535 serv_ver >= 0x4f00) { | |
3536 wnn_version = 6; | |
3537 TRACE("jcOpen2", "Wnn6"); | |
3538 } else { | |
3539 wnn_version = 4; | |
3540 TRACE("jcOpen2", "Wnn4"); | |
3541 } | |
3542 } | |
3543 | |
3544 /* wnnrc $B$NA*Br(B */ | |
3545 rcfile = (wnn_version == 4) ? rcfile4 : rcfile6; | |
3546 | |
3547 /* | |
3548 * $B4D6-$,$9$G$KB8:_$7$+$D4D6-$N>e=q$-$,;XDj$5$l$F$$$J$$!"$"$k$$$O(B | |
3549 * rcfile $B$,(B NULL $B$N>l9g$K$O$3$l$G=*$j!#(B | |
3550 */ | |
3551 if ((env_exists && !override) || rcfile == NULL) return wnnbuf; | |
3552 | |
3553 /* | |
3554 * wnnrc $B$,6uJ8;zNs$@$C$?>l9g$O!"%G%U%)%k%H$r;HMQ$9$k!#(B | |
3555 * 1. $B4D6-JQ?t(B WNNENVRC4 $B$^$?$O(B WNNENVRC6 | |
3556 * 2. $B4D6-JQ?t(B WNNENVRC | |
3557 * 3. $B%7%9%F%`$N%G%U%)%k%H(B | |
3558 * $B$N=g$G8!:w$9$k!#:G8e$N$O$A$g$C$H$$$$$+$2$s!#(B | |
3559 */ | |
3560 if (*rcfile == '\0') { | |
3561 rcfile = getenv((wnn_version == 4) ? "WNNENVRC4" : "WNNENVRC6"); | |
3562 if (rcfile == NULL || access(rcfile, R_OK) != 0) { | |
3563 rcfile = getenv("WNNENVRC"); | |
3564 } | |
3565 if (rcfile == NULL || access(rcfile, R_OK) != 0) { | |
3566 if (wnn_version == 6) { | |
3567 #ifdef WNN6 | |
3568 rcfile = "@DEFAULT"; | |
3569 #else | |
3570 rcfile = "wnnenvrc"; | |
3571 #endif | |
3572 } else { | |
3573 #if defined(LIBDIR) && JSERVER_VERSION > 0x4030 | |
3574 static char envrc[256]; | |
3575 rcfile = envrc; | |
3576 (void)sprintf(rcfile, "%s/ja_JP/wnnenvrc", LIBDIR); | |
3577 if (access(rcfile, R_OK) != 0) | |
3578 (void) sprintf(rcfile, "%s/wnnenvrc", LIBDIR); | |
3579 #else | |
3580 rcfile = "wnnenvrc"; | |
3581 #endif | |
3582 } | |
3583 } | |
3584 } | |
3585 | |
3586 /* $B4D6-@_Dj$9$k(B */ | |
3587 (void)jl_set_env_wnnrc(wnnenv, rcfile, confirm, errmsg); | |
3588 | |
3589 return wnnbuf; | |
3590 } | |
3591 | |
3592 int | |
3593 jcClose(wnnbuf) | |
3594 struct wnn_buf *wnnbuf; | |
3595 { | |
3596 TRACE("jcClose", "Enter") | |
3597 | |
3598 if (wnnbuf != NULL) | |
3599 jl_close(wnnbuf); | |
3600 return 0; | |
3601 } | |
3602 | |
3603 int | |
3604 jcIsConnect(wnnbuf) | |
3605 struct wnn_buf *wnnbuf; | |
3606 { | |
3607 TRACE("jcIsConnect", "Enter") | |
3608 | |
3609 if (wnnbuf == NULL) | |
3610 return 0; | |
3611 return jl_isconnect(wnnbuf); | |
3612 } | |
3613 | |
3614 #ifdef DEBUG_WNNLIB | |
3615 static void | |
3616 printBuffer(start, end) | |
3617 wchar *start; | |
3618 wchar *end; | |
3619 { | |
3620 wchar wc; | |
3621 | |
3622 while (start < end) { | |
3623 wc = *start++; | |
3624 if (wc >= 0200) { | |
3625 putc((wc >> 8) & 0xff, stderr); | |
3626 wc &= 0xff; | |
3627 } else if (wc < 040 || wc == 0177) { | |
3628 putc('^', stderr); | |
3629 wc ^= 0100; | |
3630 } else if (wc == '^' || wc == '\\') { | |
3631 putc('\\', stderr); | |
3632 } | |
3633 putc(wc, stderr); | |
3634 } | |
3635 } | |
3636 | |
3637 static void | |
3638 showBuffers(buf, tag) | |
3639 jcConvBuf *buf; | |
3640 char *tag; | |
3641 { | |
3642 int i; | |
3643 jcClause *clp = buf->clauseInfo; | |
3644 wchar ws[512]; | |
3645 | |
3646 fprintf(stderr, "Buffer Info [%s]\n", tag); | |
3647 fprintf(stderr, "nClause = %d, curClause = %d [%d, %d], ", | |
3648 buf->nClause, buf->curClause, buf->curLCStart, buf->curLCEnd); | |
3649 | |
3650 if (buf->dot < buf->kanaBuf) { | |
3651 fprintf(stderr, "dot < 0\n"); | |
3652 } else if (buf->dot > buf->kanaEnd) { | |
3653 fprintf(stderr, "dot > 0\n"); | |
3654 } else if (buf->nClause == 0) { | |
3655 fprintf(stderr, "dot == 0\n"); | |
3656 } else { | |
3657 for (i = 0; i < buf->nClause; i++) { | |
3658 if (buf->dot <= clp[i].kanap) | |
3659 break; | |
3660 } | |
3661 if (buf->dot < clp[i].kanap) | |
3662 i--; | |
3663 fprintf(stderr, "dot = %d.%d\n", i, buf->dot - clp[i].kanap); | |
3664 } | |
3665 | |
3666 for (i = 0; i < buf->nClause; i++) { | |
3667 fprintf(stderr, | |
3668 "clause[%d]: conv = %d, ltop = %d", | |
3669 i, clp->conv, clp->ltop); | |
3670 if (clp->conv == 1) { | |
3671 fprintf(stderr, " [%d]", jl_dai_top(buf->wnn, i)); | |
3672 } | |
3673 fprintf(stderr, "\n"); | |
3674 fprintf(stderr, "clause[%d]: Kana = '", i); | |
3675 printBuffer(clp->kanap, (clp + 1)->kanap); | |
3676 fprintf(stderr, "'\n"); | |
3677 if (clp->conv == 1) { | |
3678 fprintf(stderr, "clause[%d]: Yomi = '", i); | |
3679 (void)ki2_jl_get_yomi(buf->wnn, i, i + 1, ws, 512); | |
3680 printBuffer(ws, ws + jl_yomi_len(buf->wnn, i, i + 1)); | |
3681 fprintf(stderr, "'\n"); | |
3682 } | |
3683 fprintf(stderr, "clause[%d]: Disp = '", i); | |
3684 printBuffer(clp->dispp, (clp + 1)->dispp); | |
3685 fprintf(stderr, "'\n"); | |
3686 if (clp->conv == 1) { | |
3687 fprintf(stderr, "clause[%d]: Conv = '", i); | |
3688 (void)ki2_jl_get_kanji(buf->wnn, i, i + 1, ws, 512); | |
3689 printBuffer(ws, ws + jl_kanji_len(buf->wnn, i, i + 1)); | |
3690 fprintf(stderr, "'\n"); | |
3691 } | |
3692 clp++; | |
3693 } | |
3694 } | |
3695 #endif /* DEBUG_WNNLIB */ |