Mercurial > hg > xemacs-beta
comparison lisp/egg/egg-wnn.el @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | |
children | 0d2f883870bc |
comparison
equal
deleted
inserted
replaced
69:804d1389bcd6 | 70:131b0175ea99 |
---|---|
1 ;;; wnn-egg.el --- a inputting method communicating with [jck]server | |
2 | |
3 ;; Author: Satoru Tomura (tomura@etl.go.jp), and | |
4 ;; Toshiaki Shingu (shingu@cpr.canon.co.jp) | |
5 ;; Keywords: inputting method | |
6 | |
7 ;; This file is part of Egg on Mule (Multilingual Environment) | |
8 | |
9 ;; Egg is free software; you can redistribute it and/or modify | |
10 ;; it under the terms of the GNU General Public License as published by | |
11 ;; the Free Software Foundation; either version 2, or (at your option) | |
12 ;; any later version. | |
13 | |
14 ;; Egg is distributed in the hope that it will be useful, | |
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 ;; GNU General Public License for more details. | |
18 | |
19 ;; You should have received a copy of the GNU General Public License | |
20 ;; along with GNU Emacs; see the file COPYING. If not, write to | |
21 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
22 | |
23 ;;; Commentary: | |
24 | |
25 ;;; Modified for Wnn V4 and Wnn6 by Satoru Tomura(tomura@etl.go.jp) | |
26 ;;; Modified for Wnn6 by OMRON | |
27 ;;; Written by Toshiaki Shingu (shingu@cpr.canon.co.jp) | |
28 ;;; Modified for Wnn V4 library on wnn4v3-egg.el | |
29 | |
30 ;;; $B$?$^$4!V$?$+$J!W%P!<%8%g%s(B | |
31 ;;; $B!V$?$+$J!W$H$ODR$1J*$N$?$+$J$G$O$"$j$^$;$s!#(B | |
32 ;;; $B!V$?$^$4$h!?$+$7$3$/!?$J!<!<$l!W$NN,$r$H$C$FL?L>$7$^$7$?!#(B | |
33 ;;; Wnn V4 $B$N(B jl $B%i%$%V%i%j$r;H$$$^$9!#(B | |
34 ;;; $B%i%$%V%i%j$H$N%$%s%?!<%U%'!<%9$O(B wnnfns.c $B$GDj5A$5$l$F$$$^$9!#(B | |
35 | |
36 ;;; $B=$@5%a%b(B | |
37 | |
38 ;;; 94/2/3 kWnn support by H.Kuribayashi | |
39 ;;; 93/11/24 henkan-select-kouho: bug fixed | |
40 ;;; 93/7/22 hinsi-from-menu updated | |
41 ;;; 93/5/12 remove-regexp-in-string | |
42 ;;; fixed by Shuji NARAZAKI <narazaki@csce.kyushu-u.ac.jp> | |
43 ;;; 93/4/22 set-wnn-host-name, set-cwnn-host-name | |
44 ;;; 93/4/5 EGG:open-wnn, close-wnn modified by tsuiki. | |
45 ;;; 93/4/2 wnn-param-set | |
46 ;;; 93/4/2 modified along with wnn4fns.c | |
47 ;;; 93/3/3 edit-dict-item: bug fixed | |
48 ;;; 93/1/8 henkan-help-command modified. | |
49 ;;; 92/12/1 buffer local 'wnn-server-type' and 'cwnn-zhuyin' | |
50 ;;; so as to support individual its mode with multiple buffers. | |
51 ;;; 92/11/26 set-cserver-host-name fixed. | |
52 ;;; 92/11/26 its:{previous,next}-mode by <yasutome@ics.osaka-u.ac.jp> | |
53 ;;; 92/11/25 set-wnn-host-name was changed to set-{j,c}server-host-name. | |
54 ;;; 92/11/25 redefined its:select-mode and its:select-mode-from-menu | |
55 ;;; defined in egg.el to run hook with its mode selection. | |
56 ;;; 92/11/20 bug fixed related to henkan mode attribute. | |
57 ;;; 92/11/12 get-wnn-host-name and set-wnn-host-name were changed. | |
58 ;;; 92/11/10 (set-dict-comment) bug fixed | |
59 ;;; 92/10/27 (henkan-region-internal) display message if error occurs. | |
60 ;;; 92/9/28 completely modified for chinese trandlation. | |
61 ;;; 92/9/28 diced-{use,hindo-set} bug fixed <tetsuya@rabbit.is.s.u-tokyo.ac.jp> | |
62 ;;; 92/9/22 touroku-henkan-mode by <tsuiki@sfc.keio.ac.jp> | |
63 ;;; 92/9/18 rewrite wnn-dict-add to support password files. | |
64 ;;; 92/9/8 henkan-region-internal was modified. | |
65 ;;; 92/9/8 henkan-mode-map " " 'henkan-next-kouho-dai -> 'henkan-next-kouho | |
66 ;;; 92/9/7 henkan-mode-map "\C-h" 'help-command -> 'henkan-help-command (Shuji Narazaki) | |
67 ;;; 92/9/3 wnn-server-get-msg without wnn-error-code. | |
68 ;;; 92/9/3 get-wnn-lang-name was modified. | |
69 ;;; 92/8/19 get-wnn-lang-name $B$NJQ99(B (by T.Matsuzawa) | |
70 ;;; 92/8/5 Bug in henkan-kakutei-first-char fixed. (by Y.Kasai) | |
71 ;;; 92/7/17 set-egg-henkan-format $B$NJQ99(B | |
72 ;;; 92/7/17 egg:error $B$N0z?t$r(B format &rest args $B$KJQ99(B | |
73 ;;; 92/7/17 henkan/gyaku-henkan-word $B$N=$@5(B | |
74 ;;; 92/7/17 henkan/gyaku-henkan-paragraph/sentence/word $B$G!"(B | |
75 ;;; $BI=<($,Mp$l$k$N$r=$@5!J(Bsave-excursion $B$r$O$:$9!K(B | |
76 ;;; 92.7.14 Unnecessary '*' in comments of variables deleted. (by T.Ito) | |
77 ;;; 92/7/10 henkan-kakutei-first-char $B$rDI2C!"(BC-@ $B$K3d$jEv$F!#(B(by K.Handa) | |
78 ;;; 92/7/8 overwrite-mode $B$N%5%]!<%H(B(by K. Handa) | |
79 ;;; 92/6/30 startup file $B<~$j$NJQ99(B | |
80 ;;; 92/6/30 $BJQ49%b!<%I$N%"%H%j%S%e!<%H$K(B bold $B$rDI2C(B | |
81 ;;; (by ITO Toshiyuki <toshi@his.cpl.melco.co.jp>) | |
82 ;;; 92/6/22 $B6uJ8;zNs$rJQ49$9$k$HMn$A$k%P%0$r=$@5(B | |
83 ;;; 92/5/20 set-egg-henkan-mode-format $B$N(B bug fix | |
84 ;;; 92/5/20 egg:set-bunsetu-attribute $B$,BgJ8@a$G@5$7$/F0$/$h$&$KJQ99(B | |
85 ;;; 92/5/19 version 0 | |
86 ;;; ---------------------------------------------------------------- | |
87 | |
88 ;;; Code: | |
89 | |
90 (make-variable-buffer-local 'wnn-server-type) | |
91 (make-variable-buffer-local 'cwnn-zhuyin) | |
92 | |
93 (defvar egg:*sho-bunsetu-face* nil "*$B>.J8@aI=<($KMQ$$$k(B face $B$^$?$O(B nil") | |
94 (make-variable-buffer-local | |
95 (defvar egg:*sho-bunsetu-overlay* nil "$B>.J8@a$NI=<($K;H$&(B overlay")) | |
96 | |
97 (defvar egg:*sho-bunsetu-kugiri* "-" "*$B>.J8@a$N6h@Z$j$r<($9J8;zNs(B") | |
98 | |
99 (defvar egg:*dai-bunsetu-face* nil "*$BBgJ8@aI=<($KMQ$$$k(B face $B$^$?$O(B nil") | |
100 (make-variable-buffer-local | |
101 (defvar egg:*dai-bunsetu-overlay* nil "$BBgJ8@a$NI=<($K;H$&(B overlay")) | |
102 | |
103 (defvar egg:*dai-bunsetu-kugiri* " " "*$BBgJ8@a$N6h@Z$j$r<($9J8;zNs(B") | |
104 | |
105 (defvar egg:*henkan-face* nil "*$BJQ49NN0h$rI=<($9$k(B face $B$^$?$O(B nil") | |
106 (make-variable-buffer-local | |
107 (defvar egg:*henkan-overlay* nil "$BJQ49NN0h$NI=<($K;H$&(B overlay")) | |
108 | |
109 (defvar egg:*henkan-open* "|" "*$BJQ49$N;OE@$r<($9J8;zNs(B") | |
110 (defvar egg:*henkan-close* "|" "*$BJQ49$N=*E@$r<($9J8;zNs(B") | |
111 | |
112 (defvar egg:henkan-mode-in-use nil) | |
113 | |
114 ;;; ---------------------------------------------------------------- | |
115 ;;; $B0J2<$N(B its mode $B4X78$N4X?t$O!"(Begg.el $B$GDj5A$5$l$F$$$k$,!"(B | |
116 ;;; $B$?$+$J$G$O(B its mode $B$N@ZBX$($KF14|$7$F!"(Bjserver/cserver, | |
117 ;;; pinyin/zhuyin $B$N@ZBX$($b9T$J$$$?$$$N$G!":FDj5A$7$F$$$k!#(B | |
118 ;;; $B=>$C$F!"(Begg.el, wnn-egg.el $B$N=g$K%m!<%I$7$J$1$l$P$J$i$J$$!#(B | |
119 | |
120 | |
121 (defun its:select-mode (name) | |
122 (interactive (list (completing-read "ITS mode: " its:*mode-alist*))) | |
123 (if (its:get-mode-map name) | |
124 (progn | |
125 (setq its:*current-map* (its:get-mode-map name)) | |
126 (egg:mode-line-display) | |
127 (run-hooks 'its:select-mode-hook)) | |
128 (beep)) | |
129 ) | |
130 | |
131 (defun its:select-mode-from-menu () | |
132 (interactive) | |
133 (setcar (nthcdr 2 its:*select-mode-menu*) its:*mode-alist*) | |
134 (setq its:*current-map* (menu:select-from-menu its:*select-mode-menu*)) | |
135 (egg:mode-line-display) | |
136 (run-hooks 'its:select-mode-hook)) | |
137 | |
138 (defvar its:select-mode-hook | |
139 (function | |
140 (lambda () | |
141 (cond ((eq its:*current-map* (its:get-mode-map "roma-kana")) | |
142 (setq wnn-server-type 'jserver)) | |
143 ((eq its:*current-map* (its:get-mode-map "PinYin")) | |
144 (setq wnn-server-type 'cserver) | |
145 (setq cwnn-zhuyin nil)) | |
146 ((eq its:*current-map* (its:get-mode-map "zhuyin")) | |
147 (setq wnn-server-type 'cserver) | |
148 (setq cwnn-zhuyin t)) | |
149 ((eq its:*current-map* (its:get-mode-map "hangul")) | |
150 (setq wnn-server-type 'kserver)) | |
151 )))) | |
152 | |
153 (defun its:next-mode () | |
154 (interactive) | |
155 (let ((pos (its:find its:*current-map* its:*standard-modes*))) | |
156 (setq its:*current-map* | |
157 (nth (% (1+ pos) (length its:*standard-modes*)) | |
158 its:*standard-modes*)) | |
159 (egg:mode-line-display) | |
160 (run-hooks 'its:select-mode-hook))) | |
161 | |
162 (defun its:previous-mode () | |
163 (interactive) | |
164 (let ((pos (its:find its:*current-map* its:*standard-modes*))) | |
165 (setq its:*current-map* | |
166 (nth (1- (if (= pos 0) (length its:*standard-modes*) pos)) | |
167 its:*standard-modes*)) | |
168 (egg:mode-line-display) | |
169 (run-hooks 'its:select-mode-hook))) | |
170 | |
171 (defun read-current-its-string (prompt &optional initial-input henkan) | |
172 (save-excursion | |
173 (let ((old-its-map its:*current-map*) | |
174 (minibuff (window-buffer (minibuffer-window)))) | |
175 (set-buffer minibuff) | |
176 (setq egg:*input-mode* t | |
177 egg:*mode-on* t | |
178 its:*current-map* old-its-map) | |
179 (mode-line-egg-mode-update | |
180 (nth 1 (its:get-mode-indicator its:*current-map*))) | |
181 (read-from-minibuffer prompt initial-input | |
182 (if henkan nil | |
183 egg:*minibuffer-local-hiragana-map*))))) | |
184 | |
185 ;;;---------------------------------------------------------------------- | |
186 ;;; | |
187 ;;; Kana Kanji Henkan | |
188 ;;; | |
189 ;;;---------------------------------------------------------------------- | |
190 | |
191 (defvar wnn-host-name nil "Jserver host name currently connected") | |
192 (defvar cwnn-host-name nil "Cserver host name currently connected") | |
193 (defvar kwnn-host-name nil "Kserver host name currently connected") | |
194 (defvar jserver-list nil "*List of jserver host name") | |
195 (defvar cserver-list nil "*List of cserver host name") | |
196 (defvar kserver-list nil "*List of kserver host name") | |
197 | |
198 (defvar egg:*sai-henkan-start* nil) | |
199 (defvar egg:*sai-henkan-end* nil) | |
200 (defvar egg:*old-bunsetu-suu* nil) | |
201 | |
202 (defun wnn-egg:kill-emacs-function () | |
203 (let ((wnn-server-type)) | |
204 (setq wnn-server-type 'jserver) | |
205 (close-wnn) | |
206 (setq wnn-server-type 'cserver) | |
207 (close-wnn) | |
208 (setq wnn-server-type 'kserver) | |
209 (close-wnn))) | |
210 | |
211 (add-hook 'kill-emacs-hook 'wnn-egg:kill-emacs-function) | |
212 | |
213 (defun egg:error (form &rest mesg) | |
214 (apply 'notify (or form "%s") mesg) | |
215 (apply 'error (or form "%s") mesg)) | |
216 | |
217 (defun egg:msg-get (message) | |
218 (or | |
219 (nth 1 (assoc message (nth 1 (assoc wnn-server-type *egg-message-alist*)))) | |
220 (format "No message. Check *egg-message-alist* %s %s" | |
221 wnn-server-type message))) | |
222 | |
223 (defvar *egg-message-alist* | |
224 '((jserver | |
225 ((open-wnn "$B%[%9%H(B %s $B$N(B Wnn $B$r5/F0$7$^$7$?(B") | |
226 (no-rcfile "%s $B>e$K(B egg-startup-file $B$,$"$j$^$;$s!#(B") | |
227 (file-saved "Wnn$B$NIQEY>pJs!&<-=q>pJs$rB`Hr$7$^$7$?!#(B") | |
228 (henkan-mode-indicator "$B4A(B") | |
229 (begin-henkan "$BJQ493+;OJ8;zNs(B: ") | |
230 (end-henkan "$BJQ49=*N;J8;zNs(B: ") | |
231 (kugiri-dai "$BBgJ8@a6h@Z$jJ8;zNs(B: ") | |
232 (kugiri-sho "$B>.J8@a6h@Z$jJ8;zNs(B: ") | |
233 (face-henkan "$BJQ496h4VI=<(B0@-(B: ") | |
234 (face-dai "$BBgJ8@a6h4VI=<(B0@-(B: ") | |
235 (face-sho "$B>.J8@a6h4VI=<(B0@-(B: ") | |
236 (jikouho "$B<!8uJd(B:") | |
237 (off-msg "%s %s(%s:%s)$B$r(B off $B$7$^$7$?!#(B") | |
238 (henkan-help "$B4A;zJQ49%b!<%I(B: | |
239 $BJ8@a0\F0(B | |
240 \\[henkan-first-bunsetu]\t$B@hF,J8@a(B\t\\[henkan-last-bunsetu]\t$B8eHxJ8@a(B | |
241 \\[henkan-backward-bunsetu]\t$BD>A0J8@a(B\t\\[henkan-forward-bunsetu]\t$BD>8eJ8@a(B | |
242 $BJQ49JQ99(B | |
243 $BBgJ8@a<!8uJd(B \\[henkan-next-kouho-dai]\t$B>.J8@a<!8uJd(B \\[henkan-next-kouho-sho] | |
244 $BA08uJd(B \\[henkan-previous-kouho] \t$B<!8uJd(B \\[henkan-next-kouho] | |
245 $BBgJ8@a?-$7(B \\[henkan-bunsetu-nobasi-dai] \t$BBgJ8@a=L$a(B \\[henkan-bunsetu-chijime-dai] | |
246 $B>.J8@a?-$7(B \\[henkan-bunsetu-nobasi-sho] \t$B>.J8@a=L$a(B \\[henkan-bunsetu-chijime-sho] | |
247 $BBgJ8@aJQ498uJdA*Br(B \\[henkan-select-kouho-dai] \t$B>.J8@aJQ498uJdA*Br(B \\[henkan-select-kouho-sho] | |
248 $BJQ493NDj(B | |
249 $BA4J8@a3NDj(B \\[henkan-kakutei] \t$BD>A0J8@a$^$G3NDj(B \\[henkan-kakutei-before-point] | |
250 $BJQ49Cf;_(B \\[henkan-quit] | |
251 ") | |
252 (hinsimei "$BIJ;lL>(B:") | |
253 (jishotouroku-yomi "$B<-=qEPO?!X(B%s$B!Y(B $BFI$_(B :") | |
254 (touroku-jishomei "$BEPO?<-=qL>(B:" ) | |
255 (registerd "$B<-=q9`L\!X(B%s$B!Y(B(%s: %s)$B$r(B%s$B$KEPO?$7$^$7$?!#(B" ) | |
256 (yomi "$B$h$_!'(B") | |
257 ; (no-yomi "$B!X(B%s$B!Y$N<-=q9`L\$O$"$j$^$;$s!#(B") | |
258 (no-yomi "$B<-=q9`L\!X(B%s$B!Y$O$"$j$^$;$s!#(B") | |
259 (jisho "$B<-=q!'(B") | |
260 (hindo " $BIQEY!'(B") | |
261 (kanji "$B4A;z!'(B") | |
262 (register-notify "$B<-=q9`L\!X(B%s$B!Y(B(%s: %s)$B$r(B%s$B$KEPO?$7$^$9!#(B") | |
263 (cannot-remove "$B%7%9%F%`<-=q9`L\$O:o=|$G$-$^$;$s!#(B") | |
264 (enter-hindo "$BIQEY$rF~$l$F2<$5$$(B: ") | |
265 (remove-notify "$B<-=q9`L\(B%s(%s)$B$r(B%s$B$+$i:o=|$7$^$9!#(B") | |
266 (removed "$B<-=q9`L\(B%s(%s)$B$r(B%s$B$+$i:o=|$7$^$7$?!#(B") | |
267 (jishomei "$B<-=qL>(B:" ) | |
268 (comment "$B%3%a%s%H(B: ") | |
269 (jisho-comment "$B<-=q(B:%s: $B%3%a%s%H(B:%s") | |
270 (param ("$B#N(B ( $BBg(B ) $BJ8@a2r@O$N#N(B" | |
271 "$BBgJ8@aCf$N>.J8@a$N:GBg?t(B" | |
272 "$B448l$NIQEY$N%Q%i%a!<%?(B" | |
273 "$B>.J8@aD9$N%Q%i%a!<%?(B" | |
274 "$B448lD9$N%Q%i%a!<%?(B" | |
275 "$B:#;H$C$?$h%S%C%H$N%Q%i%a!<%?(B" | |
276 "$B<-=q$N%Q%i%a!<%?(B" | |
277 "$B>.J8@a$NI>2ACM$N%Q%i%a!<%?(B" | |
278 "$BBgJ8@aD9$N%Q%i%a!<%?(B" | |
279 "$B>.J8@a?t$N%Q%i%a!<%?(B" | |
280 "$B5?;wIJ;l(B $B?t;z$NIQEY(B" | |
281 "$B5?;wIJ;l(B $B%+%J$NIQEY(B" | |
282 "$B5?;wIJ;l(B $B1Q?t$NIQEY(B" | |
283 "$B5?;wIJ;l(B $B5-9f$NIQEY(B" | |
284 "$B5?;wIJ;l(B $BJD3g8L$NIQEY(B" | |
285 "$B5?;wIJ;l(B $BIUB08l$NIQEY(B" | |
286 "$B5?;wIJ;l(B $B3+3g8L$NIQEY(B")) | |
287 )) | |
288 (cserver | |
289 ((open-wnn "Host %s $AIO5D(B cWnn $ARQ>-Fp6/AK(B") | |
290 (no-rcfile "$ATZ(B%s $AIOC;SP(B egg-startup-file") | |
291 (file-saved "Wnn$A5DF56HND<~:M4G5dPEO"RQ>-MK3vAK(B") | |
292 (henkan-mode-indicator "$A::(B") | |
293 (begin-henkan "$A1d;;?*J<WV7{AP(B: ") | |
294 (end-henkan "$A1d;;=aJxWV7{AP(B: ") | |
295 (kugiri-dai "$A4JWi7V8nWV7{AP(B: ") | |
296 (kugiri-sho "$A5%4J7V8nWV7{AP(B: ") | |
297 (face-henkan "$A1d;;Gx<d1mJ>JtPT(B: ") | |
298 (face-dai "$A4JWiGx<d1mJ>JtPT(B: ") | |
299 (face-sho "$A5%4JGx<d1mJ>JtPT(B: ") | |
300 (jikouho "$A4N:nQ!(B:") | |
301 (off-msg "%s %s(%s:%s)$ARQ1;(B off $A5tAK(B") | |
302 (henkan-help "$A::WV1d;;D#J=(B: | |
303 $A4JWiRF6/(B | |
304 \\[henkan-first-bunsetu]\t$AOHM74JWi(B\t\\[henkan-last-bunsetu]\t$A=aN24JWi(B | |
305 \\[henkan-backward-bunsetu]\t$AG0R;8v4JWi(B\t\\[henkan-forward-bunsetu]\t$AOBR;8v4JWi(B | |
306 $A1d;;1d8|(B | |
307 $A4JWi4N:nQ!(B \\[henkan-next-kouho-dai]\t$A5%4J4N:nQ!(B \\[henkan-next-kouho-sho] | |
308 $AG0:nQ!(B \\[henkan-previous-kouho] \t$A4N:nQ!(B \\[henkan-next-kouho] | |
309 $A4JWi@)U9(B \\[henkan-bunsetu-nobasi-dai] \t$A4JWiJUKu(B \\[henkan-bunsetu-chijime-dai] | |
310 $A5%4J@)U9(B \\[henkan-bunsetu-nobasi-sho] \t$A5%4JJUKu(B \\[henkan-bunsetu-chijime-sho] | |
311 $A4JWi1d;;:r295DQ!Tq(B \\[henkan-select-kouho-dai] \t$A5%4J1d;;:r295DQ!Tq(B \\[henkan-select-kouho-sho] | |
312 $A1d;;:r295DQ!Tq(B \\[henkan-select-kouho-dai] | |
313 $A1d;;H76((B | |
314 $AH+NDH76((B \\[henkan-kakutei] \t$AIOR;4JWiN*V95DH76((B \\[henkan-kakutei-before-point] | |
315 $AM#V91d;;(B \\[henkan-quit] | |
316 ") | |
317 (hinsimei "$A4JPTC{(B:") | |
318 (jishotouroku-yomi "$A4G5d5GB<!:(B%s$A!;F47((B :") | |
319 (touroku-jishomei "$A5GB<4G5dC{(B:" ) | |
320 (registerd "$A4G5dOnD?!:(B%s$A!;(B(%s: %s)$ARQ1;5GB<5=(B %s $AVPAK(B" ) | |
321 (yomi "$AF47($B!'(B") | |
322 ; (no-yomi "$A!:(B%s$A!;5D4G5dOnD?2;4fTZ(B") | |
323 (no-yomi "$A4G5dOnD?!:(B%s$A!;2;4fTZ(B") | |
324 (jisho "$A4G5d(B:") | |
325 (hindo " $AF56H$B!'(B") | |
326 (kanji "$A::WV$B!'(B") | |
327 (register-notify "$A4G5dOnD?!:(B%s$A!;(B(%s: %s)$A=+R*1;5GB<5=(B %s $AVP(B") | |
328 (cannot-remove "$AO5M34G5dOn2;D\O{3}(B") | |
329 (enter-hindo "$AGkJdHkF56H(B: ") | |
330 (remove-notify "$A4G5dOnD?(B%s(%s)$A=+R*4S(B %s $AVPO{3}(B") | |
331 (removed "$A4G5dOnD?(B%s(%s)$ARQ>-4S(B%s$AVPO{3}AK(B") | |
332 (jishomei "$A4G5dC{(B:" ) | |
333 (comment "$AW"JM(B: ") | |
334 (jisho-comment "$A4G5d(B:%s: $AW"JM(B:%s") | |
335 (param ("$A=bNv4JWi8vJ}(B" | |
336 "$A4JWiVP4J5DWn4s8vJ}(B" | |
337 "$AF56HH(V5(B" | |
338 "$A4J3$6HH(V5(B" | |
339 "$AKDIyU}H76HH(V5(B" | |
340 "$A8U2ESC9}H(V5(B" | |
341 "$AWV5dSEOH<6H(V5(B" | |
342 "$A4JF@<[>yV5H(V5(B" | |
343 "$A4JWi3$H(V5(B" | |
344 "$A4JWiVP4JJ}H(V5(B" | |
345 "$AJ}WV5DF56H(B" | |
346 "$AS"NDWVD85DF56H(B" | |
347 "$A<G:E5DF56H(B" | |
348 "$A?*@(;!5DF56H(B" | |
349 "$A1U@(;!5DF56H(B" | |
350 "$AWn4s:r298vJ}(B" | |
351 "$A18SC(B" | |
352 )) | |
353 )) | |
354 (kserver | |
355 ((open-wnn "$(CH#=:F.(B %s $(C@G(B kWnn $(C8&(B $(CQ&TQG_@>4O4Y(B.") | |
356 (no-rcfile "%s $(C?!(B egg-startup-file $(C@L(B $(C>x@>4O4Y(B.") | |
357 (file-saved "kWnn $(C@G(B $(C^:SxoW\C!$^vnpoW\C8&(B $(C?E0e@>4O4Y(B.") | |
358 (henkan-mode-indicator "$(CyS(B") | |
359 (begin-henkan "$(C\(|5(B $(CKRc7(B $(CY~m.fj(B: ") | |
360 (end-henkan "$(C\(|5(B $(Cp{Vu(B $(CY~m.fj(B: ") | |
361 (kugiri-dai "$(CS^Y~o=(B $(CO!\,(B $(CY~m.fj(B: ") | |
362 (kugiri-sho "$(Ca3Y~o=(B $(CO!\,(B $(CY~m.fj(B: ") | |
363 (face-henkan "$(C\(|5(B $(CO!J`(B $(CxvcF(B $(CaU`u(B: ") | |
364 (face-dai "$(CS^Y~o=(B $(CO!J`(B $(CxvcF(B $(CaU`u(B: ") | |
365 (face-sho "$(Ca3Y~o=(B $(CO!J`(B $(CxvcF(B $(CaU`u(B: ") | |
366 (jikouho "$(C4Y@=(B $(C}&\M(B:") | |
367 (off-msg "%s %s(%s:%s)$(C@;(B off $(CG_@>4O4Y(B.") | |
368 (henkan-help "$(CySm.(B $(C\(|5(B $(C8p5e(B: | |
369 $(CY~o=(B $(Cl9TQ(B | |
370 \\[henkan-first-bunsetu]\t$(C`;Ti(B $(CY~o=(B\t\\[henkan-last-bunsetu]\t$(C}-Z-(B $(CY~o=(B | |
371 \\[henkan-backward-bunsetu]\t$(CrAnq(B $(CY~o=(B\t\\[henkan-forward-bunsetu]\t$(CrA}-(B $(CY~o=(B | |
372 $(C\(|5(B $(C\(LZ(B | |
373 $(CS^Y~o=(B $(C4Y@=(B $(C}&\M(B \\[henkan-next-kouho-dai]\t$(Ca3Y~o=(B $(C4Y@=(B $(C}&\M(B \\[henkan-next-kouho-sho] | |
374 $(Cnq(B $(C}&\M(B \\[henkan-previous-kouho] \t$(C4Y@=(B $(C}&\M(B \\[henkan-next-kouho] | |
375 $(CS^Y~o=(B $(C|*S^(B \\[henkan-bunsetu-nobasi-dai] \t$(CS^Y~o=(B $(Cuja3(B \\[henkan-bunsetu-chijime-dai] | |
376 $(Ca3Y~o=(B $(C|*S^(B \\[henkan-bunsetu-nobasi-sho] \t$(Ca3Y~o=(B $(Cuja3(B \\[henkan-bunsetu-chijime-sho] | |
377 $(CS^Y~o=(B $(C\(|5(B $(C4Y@=(B $(C}&\M(B \\[henkan-select-kouho-dai] \t$(Ca3Y~o=(B $(C\(|5(B $(C4Y@=(B $(C}&\M(B \\[henkan-select-kouho-sho] | |
378 $(C\(|5(B $(C|,oR(B | |
379 $(CnoY~o=(B $(C|,oR(B \\[henkan-kakutei] \t$(CrAnq(B $(CY~o=1nAv(B $(C|,oR(B \\[henkan-kakutei-before-point] | |
380 $(C\(|5(B $(Cqir-(B \\[henkan-quit] | |
381 ") | |
382 (hinsimei "$(Cy!^rY#(B: ") | |
383 (jishotouroku-yomi "$(C^vnp(B $(CTtVb!:(B%s$(C!;(B $(CGQ1[(B: ") | |
384 (touroku-jishomei "$(CTtVb(B $(C^vnpY#(B: " ) | |
385 (registerd "$(C^vnp(B $(Cz#YM!:(B%s$(C!;(B(%s: %s)$(C@;(B %s$(C?!(B $(CTtVbG_@>4O4Y(B." ) | |
386 (yomi "$(CGQ1[(B: ") | |
387 ; (no-yomi "$(C!:(B%s$(C!;@G(B $(C^vnp(B $(Cz#YM@L(B $(C>x@>4O4Y(B.") | |
388 (no-yomi "$(C^vnp(B $(Cz#YM(B $(C!:(B%s$(C!;@L(B $(C>x@>4O4Y(B.") | |
389 (jisho "$(C^vnp(B: ") | |
390 (hindo " $(C^:Sx(B: ") | |
391 (kanji "$(CySm.(B: ") | |
392 (register-notify "$(C^vnp(B $(Cz#YM(B $(C!:(B%s$(C!;(B(%s: %s)$(C@;(B %s$(C?!(B $(CTtVbGO0Z@>4O4Y(B.") | |
393 (cannot-remove "$(C=C=:E[(B $(C^vnpz#YM@:(B $(Ca<K[GR(B $(C<v(B $(C>x@>4O4Y(B.") | |
394 (enter-hindo "$(C^:Sx8&(B $(Cl}UtGO=J=C?@(B: ") | |
395 (remove-notify "$(C^vnpz#YM(B %s(%s)$(C@;(B %s$(C:NEM(B $(Ca<K[GO0Z@>4O4Y(B.") | |
396 (removed "$(C^vnp(B $(Cz#YM(B %s(%s)$(C@;(B %s$(C:NEM(B $(Ca<K[G_@>4O4Y(B.") | |
397 (jishomei "$(C^vnpY#(B: " ) | |
398 (comment "$(CqI`7(B: ") | |
399 (jisho-comment "$(C^vnp(B:%s: $(CqI`7(B:%s") | |
400 (param ("N ($(CS^(B)$(CY~o=(B $(Cz0`0@G(B N" | |
401 "$(CS^Y~o=(B $(C>H@G(B $(Ca3Y~o=(B $(C<v@G(B $(CuLS^b&(B" | |
402 "$(CJOe^@G(B $(C^:Sx(B $(CFP7/9LEM(B" | |
403 "$(Ca3Y~o=(B $(C1f@L(B $(CFP7/9LEM(B" | |
404 "$(CJOe^@G(B $(C1f@L(B $(CFP7/9LEM(B" | |
405 "$(Cq~PQ(B $(C^EiDG_@>4O4Y(B $(C:qF.(B $(CFP7/9LEM(B" | |
406 "$(C^vnp@G(B $(CFP7/9LEM(B" | |
407 "$(Ca3Y~o=@G(B $(CxDJ$v7(B $(CFP7/9LEM(B" | |
408 "$(CS^Y~o=(B $(C1f@L(B $(CFP7/9LEM(B" | |
409 "$(Ca3Y~o=(B $(Cb&(B $(CFP7/9LEM(B" | |
410 "$(CJ#_L(B $(Cy!^r(B: $(Cb&m.@G(B $(C^:Sx(B" | |
411 "$(CJ#_L(B $(Cy!^r(B: $(CGQ1[@G(B $(C^:Sx(B" | |
412 "$(CJ#_L(B $(Cy!^r(B: $(CgHb&m.@G(B $(C^:Sx(B" | |
413 "$(CJ#_L(B $(Cy!^r(B: $(CQ@{\@G(B $(C^:Sx(B" | |
414 "$(CJ#_L(B $(Cy!^r(B: $(CxMN@{A@G(B $(C^:Sx(B" | |
415 "$(CJ#_L(B $(Cy!^r(B: $(C]>aUe^@G(B $(C^:Sx(B" | |
416 "$(CJ#_L(B $(Cy!^r(B: $(CKRN@{A@G(B $(C^:Sx(B")) | |
417 )) | |
418 )) | |
419 | |
420 | |
421 ;;; | |
422 ;;; Entry functions for egg-startup-file | |
423 ;;; | |
424 | |
425 ;(defvar wnn-lang-name nil) | |
426 ;(defvar default-wnn-lang-name "ja_JP") ; 92.8.19 by T.Matsuzawa | |
427 | |
428 (defvar skip-wnn-setenv-if-env-exist nil | |
429 "skip wnn environment setting when the same name environment exists") | |
430 | |
431 (defmacro push-end (val loc) | |
432 (list 'push-end-internal val (list 'quote loc))) | |
433 | |
434 (defun push-end-internal (val loc) | |
435 (set loc | |
436 (if (eval loc) | |
437 (nconc (eval loc) (cons val nil)) | |
438 (cons val nil)))) | |
439 | |
440 (defun is-wnn6-server () | |
441 (= (wnn-server-version) 61697)) | |
442 | |
443 (defun add-wnn-dict (dfile hfile priority dmode hmode &optional dpaswd hpaswd) | |
444 ; (open-wnn-if-disconnected) | |
445 (if (null (wnn-server-dict-add | |
446 (substitute-in-file-name dfile) | |
447 (substitute-in-file-name hfile) | |
448 priority dmode hmode dpaswd hpaswd)) | |
449 (egg:error (wnn-server-get-msg)))) | |
450 | |
451 (defun set-wnn-fuzokugo (ffile) | |
452 ; (open-wnn-if-disconnected) | |
453 (if (null (wnn-server-fuzokugo-set (substitute-in-file-name ffile))) | |
454 (egg:error (wnn-server-get-msg)))) | |
455 | |
456 (defun set-wnn-param (&rest param) | |
457 (interactive) | |
458 ; (open-wnn-if-disconnected) | |
459 (let ((current-param (wnn-server-get-param)) | |
460 (new-param) | |
461 (message (egg:msg-get 'param))) | |
462 (while current-param | |
463 (setq new-param | |
464 (cons | |
465 (if (or (null param) (null (car param))) | |
466 (string-to-int | |
467 (read-from-minibuffer (concat (car message) ": ") | |
468 (int-to-string (car current-param)))) | |
469 (car param)) | |
470 new-param)) | |
471 (setq current-param (cdr current-param) | |
472 message (cdr message) | |
473 param (if param (cdr param) nil))) | |
474 (apply 'wnn-server-set-param (nreverse new-param)))) | |
475 | |
476 ;; | |
477 ;; for Wnn6 | |
478 ;; | |
479 (defun add-wnn-fisys-dict (dfile hfile hmode &optional hpaswd) | |
480 ; (open-wnn-if-disconnected) | |
481 (if (null (wnn-server-fisys-dict-add | |
482 (substitute-in-file-name dfile) | |
483 (substitute-in-file-name hfile) | |
484 hmode hpaswd)) | |
485 (egg:error (wnn-server-get-msg)))) | |
486 | |
487 (defun add-wnn-fiusr-dict (dfile hfile dmode hmode &optional dpaswd hpaswd) | |
488 ; (open-wnn-if-disconnected) | |
489 (if (null (wnn-server-fiusr-dict-add | |
490 (substitute-in-file-name dfile) | |
491 (substitute-in-file-name hfile) | |
492 dmode hmode dpaswd hpaswd)) | |
493 (egg:error (wnn-server-get-msg)))) | |
494 | |
495 (defun add-wnn-notrans-dict (dfile priority dmode &optional dpaswd) | |
496 ; (open-wnn-if-disconnected) | |
497 (if (null (wnn-server-notrans-dict-add | |
498 (substitute-in-file-name dfile) | |
499 priority dmode dpaswd)) | |
500 (egg:error (wnn-server-get-msg)))) | |
501 | |
502 (defun add-wnn-bmodify-dict (dfile priority dmode &optional dpaswd) | |
503 ; (open-wnn-if-disconnected) | |
504 (if (null (wnn-server-bmodify-dict-add | |
505 (substitute-in-file-name dfile) | |
506 priority dmode dpaswd)) | |
507 (egg:error (wnn-server-get-msg)))) | |
508 | |
509 (defun set-last-is-first-mode (mode) | |
510 ; (open-wnn-if-disconnected) | |
511 (if (null (wnn-server-set-last-is-first | |
512 mode)) | |
513 (egg:error (wnn-server-get-msg)))) | |
514 | |
515 (defun set-complex-conv-mode (mode) | |
516 ; (open-wnn-if-disconnected) | |
517 (if (null (wnn-server-set-complex-conv-mode | |
518 mode)) | |
519 (egg:error (wnn-server-get-msg)))) | |
520 | |
521 (defun set-okuri-learn-mode (mode) | |
522 ; (open-wnn-if-disconnected) | |
523 (if (null (wnn-server-set-okuri-learn-mode | |
524 mode)) | |
525 (egg:error (wnn-server-get-msg)))) | |
526 | |
527 (defun set-okuri-flag (mode) | |
528 ; (open-wnn-if-disconnected) | |
529 (if (null (wnn-server-set-okuri-flag | |
530 mode)) | |
531 (egg:error (wnn-server-get-msg)))) | |
532 | |
533 (defun set-prefix-learn-mode (mode) | |
534 ; (open-wnn-if-disconnected) | |
535 (if (null (wnn-server-set-prefix-learn-mode | |
536 mode)) | |
537 (egg:error (wnn-server-get-msg)))) | |
538 | |
539 (defun set-prefix-flag (mode) | |
540 ; (open-wnn-if-disconnected) | |
541 (if (null (wnn-server-set-prefix-flag | |
542 mode)) | |
543 (egg:error (wnn-server-get-msg)))) | |
544 | |
545 (defun set-suffix-learn-mode (mode) | |
546 ; (open-wnn-if-disconnected) | |
547 (if (null (wnn-server-set-suffix-learn-mode | |
548 mode)) | |
549 (egg:error (wnn-server-get-msg)))) | |
550 | |
551 (defun set-common-learn-mode (mode) | |
552 ; (open-wnn-if-disconnected) | |
553 (if (null (wnn-server-set-common-learn-mode | |
554 mode)) | |
555 (egg:error (wnn-server-get-msg)))) | |
556 | |
557 (defun set-freq-func-mode (mode) | |
558 ; (open-wnn-if-disconnected) | |
559 (if (null (wnn-server-set-freq-func-mode | |
560 mode)) | |
561 (egg:error (wnn-server-get-msg)))) | |
562 | |
563 (defun set-numeric-mode (mode) | |
564 ; (open-wnn-if-disconnected) | |
565 (if (null (wnn-server-set-numeric-mode | |
566 mode)) | |
567 (egg:error (wnn-server-get-msg)))) | |
568 | |
569 (defun set-alphabet-mode (mode) | |
570 ; (open-wnn-if-disconnected) | |
571 (if (null (wnn-server-set-alphabet-mode | |
572 mode)) | |
573 (egg:error (wnn-server-get-msg)))) | |
574 | |
575 (defun set-symbol-mode (mode) | |
576 ; (open-wnn-if-disconnected) | |
577 (if (null (wnn-server-set-symbol-mode | |
578 mode)) | |
579 (egg:error (wnn-server-get-msg)))) | |
580 | |
581 (defun set-yuragi-mode (mode) | |
582 ; (open-wnn-if-disconnected) | |
583 (if (null (wnn-server-set-yuragi-mode | |
584 mode)) | |
585 (egg:error (wnn-server-get-msg)))) | |
586 | |
587 (defun wnn6-reset-prev-info () | |
588 ; (open-wnn-if-disconnected) | |
589 (if (null (wnn-reset-previous-info)) | |
590 (egg:error (wnn-server-get-msg)))) | |
591 | |
592 ;;; | |
593 ;;; WNN interface | |
594 ;;; | |
595 | |
596 (defun make-host-list (name list) | |
597 (cons name (delete name list))) | |
598 | |
599 (defun set-wnn-host-name (name) | |
600 (interactive "sHost name: ") | |
601 (let ((wnn-server-type 'jserver)) (close-wnn)) | |
602 (setq jserver-list | |
603 (make-host-list | |
604 name (or jserver-list (list (or wnn-host-name (getenv "JSERVER"))))))) | |
605 | |
606 (fset 'set-jserver-host-name (symbol-function 'set-wnn-host-name)) | |
607 | |
608 (defun set-cwnn-host-name (name) | |
609 (interactive "sHost name: ") | |
610 (let ((wnn-server-type 'cserver)) (close-wnn)) | |
611 (setq cserver-list | |
612 (make-host-list | |
613 name (or cserver-list (list (or cwnn-host-name (getenv "CSERVER"))))))) | |
614 | |
615 (fset 'set-cserver-host-name (symbol-function 'set-cwnn-host-name)) | |
616 | |
617 (defun set-kwnn-host-name (name) | |
618 (interactive "sHost name: ") | |
619 (let ((wnn-server-type 'kserver)) (close-wnn)) | |
620 (setq kserver-list | |
621 (make-host-list | |
622 name (or kserver-list (list (or kwnn-host-name (getenv "KSERVER"))))))) | |
623 | |
624 (fset 'set-kserver-host-name (symbol-function 'set-kwnn-host-name)) | |
625 | |
626 (defun open-wnn-if-disconnected () | |
627 (if (null (wnn-server-isconnect)) | |
628 (let ((hostlist | |
629 (cond ((eq wnn-server-type 'jserver) | |
630 (or jserver-list | |
631 (list (or wnn-host-name (getenv "JSERVER"))))) | |
632 ((eq wnn-server-type 'cserver) | |
633 (or cserver-list | |
634 (list (or cwnn-host-name (getenv "CSERVER"))))) | |
635 ((eq wnn-server-type 'kserver) | |
636 (or kserver-list | |
637 (list (or kwnn-host-name (getenv "KSERVER"))))))) | |
638 (loginname (user-login-name))) | |
639 (catch 'succ | |
640 (while hostlist | |
641 (let ((hostname (car hostlist))) | |
642 (if (wnn-server-open hostname loginname) | |
643 (progn | |
644 (cond ((eq wnn-server-type 'jserver) | |
645 (setq wnn-host-name hostname)) | |
646 ((eq wnn-server-type 'cserver) | |
647 (setq cwnn-host-name hostname)) | |
648 ((eq wnn-server-type 'kserver) | |
649 (setq kwnn-host-name hostname))) | |
650 (throw 'succ hostname)))) | |
651 (setq hostlist (cdr hostlist))) | |
652 (egg:error (wnn-server-get-msg)))))) | |
653 | |
654 (defvar egg-default-startup-file "eggrc" | |
655 "*Egg startup file name (system default)") | |
656 | |
657 (defvar egg-startup-file ".eggrc" | |
658 "*Egg startup file name.") | |
659 | |
660 ;;; 92/6/30, by K.Handa | |
661 (defvar egg-startup-file-search-path '("~" ".") | |
662 "*List of directories to search for egg-startup-file | |
663 whose name defaults to .eggrc.") | |
664 | |
665 (defun egg:search-file (filename searchpath) | |
666 (if (file-name-directory filename) | |
667 (let ((file (substitute-in-file-name (expand-file-name filename)))) | |
668 (if (file-exists-p file) file nil)) | |
669 (catch 'answer | |
670 (while searchpath | |
671 (let ((path (car searchpath))) | |
672 (if (stringp path) | |
673 (let ((file (substitute-in-file-name | |
674 (expand-file-name filename path)))) | |
675 (if (file-exists-p file) (throw 'answer file))))) | |
676 (setq searchpath (cdr searchpath))) | |
677 nil))) | |
678 | |
679 (defun EGG:open-wnn () | |
680 (let ((host (open-wnn-if-disconnected))) | |
681 (notify (egg:msg-get 'open-wnn) | |
682 (or host "local")) | |
683 (let* ((path (append egg-startup-file-search-path load-path)) | |
684 (eggrc (or (egg:search-file egg-startup-file path) | |
685 (egg:search-file egg-default-startup-file load-path)))) | |
686 (if (or (null skip-wnn-setenv-if-env-exist) | |
687 (null (wnn-server-dict-list))) | |
688 (if eggrc (load-file eggrc) | |
689 (let ((wnnenv-sticky nil)) (wnn-server-close)) | |
690 (egg:error (egg:msg-get 'no-rcfile) path))) | |
691 (run-hooks 'egg:open-wnn-hook)))) | |
692 | |
693 (defun disconnect-wnn () | |
694 (interactive) | |
695 (if (wnn-server-isconnect) (wnn-server-close))) | |
696 | |
697 (defun close-wnn () | |
698 (interactive) | |
699 (if (wnn-server-isconnect) | |
700 (progn | |
701 (wnn-server-set-rev nil) | |
702 (if (wnn-server-dict-save) | |
703 (message (egg:msg-get 'file-saved)) | |
704 (message (wnn-server-get-msg))) | |
705 (sit-for 0) | |
706 (wnn-server-set-rev t) | |
707 (if (wnn-server-dict-save) | |
708 (message (egg:msg-get 'file-saved)) | |
709 (message (wnn-server-get-msg))) | |
710 (sit-for 0) | |
711 (wnn-server-close) | |
712 (run-hooks 'egg:close-wnn-hook)))) | |
713 | |
714 (defun set-wnn-reverse (arg) | |
715 ; (open-wnn-if-disconnected) | |
716 (wnn-server-set-rev arg)) | |
717 | |
718 ;;; | |
719 ;;; Kanji henkan | |
720 ;;; | |
721 | |
722 (defvar egg:*kanji-kanabuff* nil) | |
723 (defvar egg:*dai* t) | |
724 (defvar *bunsetu-number* nil) | |
725 (defvar *zenkouho-suu* nil) | |
726 (defvar *zenkouho-offset* nil) | |
727 | |
728 (defun bunsetu-length-sho (number) | |
729 (cdr (wnn-server-bunsetu-yomi number))) | |
730 | |
731 (defun bunsetu-length (number) | |
732 (let ((max (wnn-server-dai-end number)) | |
733 (i (1+ number)) | |
734 (l (bunsetu-length-sho number))) | |
735 (while (< i max) | |
736 (setq l (+ l (bunsetu-length-sho i))) | |
737 (setq i (1+ i))) | |
738 l)) | |
739 | |
740 (defun bunsetu-position (number) | |
741 (let ((pos egg:*region-start*) (i 0)) | |
742 (while (< i number) | |
743 (setq pos (+ pos (length (bunsetu-kanji i)) | |
744 (if (wnn-server-dai-top (1+ i)) | |
745 (length egg:*dai-bunsetu-kugiri*) | |
746 (length egg:*sho-bunsetu-kugiri*)))) | |
747 (setq i (1+ i))) | |
748 pos)) | |
749 | |
750 (defun bunsetu-kanji (number) (car (wnn-server-bunsetu-kanji number))) | |
751 | |
752 (defun bunsetu-yomi (number) (car (wnn-server-bunsetu-yomi number))) | |
753 | |
754 (defun bunsetu-kouho-suu (bunsetu-number init) | |
755 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number)) | |
756 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*))) | |
757 (setq *zenkouho-suu* (wnn-server-zenkouho-suu))) | |
758 | |
759 (defun bunsetu-kouho-list (bunsetu-number init) | |
760 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number)) | |
761 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*))) | |
762 (let ((i (1- (setq *zenkouho-suu* (wnn-server-zenkouho-suu)))) | |
763 (val nil)) | |
764 (while (<= 0 i) | |
765 (setq val (cons (wnn-server-get-zenkouho i) val)) | |
766 (setq i (1- i))) | |
767 val)) | |
768 | |
769 (defun bunsetu-kouho-number (bunsetu-number init) | |
770 (if (or init (/= (wnn-server-zenkouho-bun) bunsetu-number)) | |
771 (setq *zenkouho-offset* (wnn-server-zenkouho bunsetu-number egg:*dai*))) | |
772 *zenkouho-offset*) | |
773 | |
774 ;;;; | |
775 ;;;; User entry : henkan-region, henkan-paragraph, henkan-sentence | |
776 ;;;; | |
777 | |
778 (defun egg:henkan-face-on () | |
779 ;; Make an overlay if henkan overlay does not exist. | |
780 ;; Move henkan overlay to henkan region. | |
781 (if egg:*henkan-face* | |
782 (progn | |
783 (if (overlayp egg:*henkan-overlay*) | |
784 nil | |
785 (setq egg:*henkan-overlay* (make-overlay 1 1 nil t)) | |
786 (overlay-put egg:*henkan-overlay* 'face egg:*henkan-face*)) | |
787 (move-overlay egg:*henkan-overlay* egg:*region-start* egg:*region-end*)))) | |
788 | |
789 (defun egg:henkan-face-off () | |
790 ;; detach henkan overlay from the current buffer. | |
791 (and egg:*henkan-face* | |
792 (overlayp egg:*henkan-overlay*) | |
793 (delete-overlay egg:*henkan-overlay*) )) | |
794 | |
795 | |
796 (defun henkan-region (start end) | |
797 "Convert a text in the region between START and END from kana to kanji." | |
798 (interactive "r") | |
799 (if (interactive-p) (set-mark (point))) ;;; to be fixed | |
800 (henkan-region-internal start end)) | |
801 | |
802 (defun gyaku-henkan-region (start end) | |
803 "Convert a text in the region between START and END from kanji to kana." | |
804 (interactive "r") | |
805 (if (interactive-p) (set-mark (point))) ;;; to be fixed | |
806 (henkan-region-internal start end t)) | |
807 | |
808 ;(defvar henkan-mode-indicator "$B4A(B") | |
809 | |
810 (defun henkan-region-internal (start end &optional rev) | |
811 ;; region $B$r$+$J4A;zJQ49$9$k(B | |
812 (if egg:henkan-mode-in-use nil | |
813 (let ((finished nil)) | |
814 (unwind-protect | |
815 (progn | |
816 (setq egg:henkan-mode-in-use t) | |
817 (if (null (wnn-server-isconnect)) (EGG:open-wnn)) | |
818 (setq egg:*kanji-kanabuff* (buffer-substring start end)) | |
819 ;;; for Wnn6 | |
820 (if (and (is-wnn6-server) | |
821 (not (and | |
822 egg:*henkan-fence-mode* | |
823 *in-cont-flag*))) | |
824 (progn | |
825 (wnn6-reset-prev-info))) | |
826 | |
827 (setq *bunsetu-number* 0) | |
828 (setq egg:*dai* t) ; 92.9.8 by T.shingu | |
829 (wnn-server-set-rev rev) | |
830 (let ((result (wnn-server-henkan-begin egg:*kanji-kanabuff*))) | |
831 (if (null result) | |
832 (egg:error (wnn-server-get-msg)) | |
833 (if (> result 0) | |
834 (progn | |
835 (mode-line-egg-mode-update (egg:msg-get 'henkan-mode-indicator)) | |
836 (goto-char start) | |
837 (or (markerp egg:*region-start*) | |
838 (setq egg:*region-start* (make-marker))) | |
839 (or (markerp egg:*region-end*) | |
840 (setq egg:*region-end* (set-marker-type (make-marker) t))) | |
841 (if (null (marker-position egg:*region-start*)) | |
842 (progn | |
843 ;;;(setq egg:*global-map-backup* (current-global-map)) | |
844 (setq egg:*local-map-backup* (current-local-map)) | |
845 (and (boundp 'disable-undo) (setq disable-undo t)) | |
846 (delete-region start end) | |
847 (goto-char start) | |
848 (insert egg:*henkan-open*) | |
849 (set-marker egg:*region-start* (point)) | |
850 (insert egg:*henkan-close*) | |
851 (set-marker egg:*region-end* egg:*region-start*) | |
852 (goto-char egg:*region-start*) | |
853 ) | |
854 (progn | |
855 (egg:fence-face-off) | |
856 (delete-region (- egg:*region-start* (length egg:*fence-open*)) | |
857 egg:*region-start*) | |
858 (delete-region egg:*region-end* | |
859 (+ egg:*region-end* (length egg:*fence-close*))) | |
860 (goto-char egg:*region-start*) | |
861 (insert egg:*henkan-open*) | |
862 (set-marker egg:*region-start* (point)) | |
863 (goto-char egg:*region-end*) | |
864 (let ((point (point))) | |
865 (insert egg:*henkan-close*) | |
866 (set-marker egg:*region-end* point)) | |
867 (goto-char start) | |
868 (delete-region start end) | |
869 )) | |
870 (henkan-insert-kouho 0 result) | |
871 (egg:henkan-face-on) | |
872 (egg:bunsetu-face-on) | |
873 (henkan-goto-bunsetu 0) | |
874 ;;;(use-global-map henkan-mode-map) | |
875 ;;;(use-local-map nil) | |
876 (use-local-map henkan-mode-map) | |
877 (run-hooks 'egg:henkan-start-hook))))) | |
878 (setq finished t)) | |
879 (or finished (setq disable-undo nil) (setq egg:henkan-mode-in-use nil))))) | |
880 ) | |
881 | |
882 (defun henkan-paragraph () | |
883 "Convert the current paragraph from kana to kanji." | |
884 (interactive) | |
885 (forward-paragraph) | |
886 (let ((end (point))) | |
887 (backward-paragraph) | |
888 (henkan-region-internal (point) end))) | |
889 | |
890 (defun gyaku-henkan-paragraph () | |
891 "Convert the current paragraph from kanji to kana." | |
892 (interactive) | |
893 (forward-paragraph) | |
894 (let ((end (point))) | |
895 (backward-paragraph) | |
896 (henkan-region-internal (point) end t))) | |
897 | |
898 (defun henkan-sentence () | |
899 "Convert the current sentence from kana to kanji." | |
900 (interactive) | |
901 (forward-sentence) | |
902 (let ((end (point))) | |
903 (backward-sentence) | |
904 (henkan-region-internal (point) end))) | |
905 | |
906 (defun gyaku-henkan-sentence () | |
907 "Convert the current sentence from kanji to kana." | |
908 (interactive) | |
909 (forward-sentence) | |
910 (let ((end (point))) | |
911 (backward-sentence) | |
912 (henkan-region-internal (point) end t))) | |
913 | |
914 (defun henkan-word () | |
915 "Convert the current word from kana to kanji." | |
916 (interactive) | |
917 (re-search-backward "\\<" nil t) | |
918 (let ((start (point))) | |
919 (re-search-forward "\\>" nil t) | |
920 (henkan-region-internal start (point)))) | |
921 | |
922 (defun gyaku-henkan-word () | |
923 "Convert the current word from kanji to kana." | |
924 (interactive) | |
925 (re-search-backward "\\<" nil t) | |
926 (let ((start (point))) | |
927 (re-search-forward "\\>" nil t) | |
928 (henkan-region-internal start (point) t))) | |
929 | |
930 ;;; | |
931 ;;; Kana Kanji Henkan Henshuu mode | |
932 ;;; | |
933 | |
934 (defun set-egg-henkan-mode-format (open close kugiri-dai kugiri-sho | |
935 &optional henkan-face dai-bunsetu-face sho-bunsetu-face) | |
936 "$BJQ49(B mode $B$NI=<(J}K!$r@_Dj$9$k!#(BOPEN $B$OJQ49$N;OE@$r<($9J8;zNs$^$?$O(B nil$B!#(B | |
937 CLOSE$B$OJQ49$N=*E@$r<($9J8;zNs$^$?$O(B nil$B!#(B | |
938 KUGIRI-DAI$B$OBgJ8@a$N6h@Z$j$rI=<($9$kJ8;zNs$^$?$O(B nil$B!#(B | |
939 KUGIRI-SHO$B$O>.J8@a$N6h@Z$j$rI=<($9$kJ8;zNs$^$?$O(B nil$B!#(B | |
940 optional HENKAN-FACE $B$OJQ496h4V$rI=<($9$k(B face $B$^$?$O(B nil | |
941 optional DAI-BUNSETU-FACE $B$OBgJ8@a6h4V$rI=<($9$k(B face $B$^$?$O(B nil | |
942 optional SHO-BUNSETU-FACE $B$O>.J8@a6h4V$rI=<($9$k(B face $B$^$?$O(B nil" | |
943 | |
944 (interactive (list (read-string (egg:msg-get 'begin-henkan)) | |
945 (read-string (egg:msg-get 'end-henkan)) | |
946 (read-string (egg:msg-get 'kugiri-dai)) | |
947 (read-string (egg:msg-get 'kugiri-sho)) | |
948 (cdr (assoc (completing-read (egg:msg-get 'face-henkan) | |
949 egg:*face-alist*) | |
950 egg:*face-alist*)) | |
951 (cdr (assoc (completing-read (egg:msg-get 'face-dai) | |
952 egg:*face-alist*) | |
953 egg:*face-alist*)) | |
954 (cdr (assoc (completing-read (egg:msg-get 'face-sho) | |
955 egg:*face-alist*) | |
956 egg:*face-alist*)) | |
957 )) | |
958 (if (or (stringp open) (null open)) | |
959 (setq egg:*henkan-open* open) | |
960 (egg:error "Wrong type of arguments(open): %s" open)) | |
961 | |
962 (if (or (stringp close) (null close)) | |
963 (setq egg:*henkan-close* close) | |
964 (egg:error "Wrong type of arguments(close): %s" close)) | |
965 | |
966 (if (or (stringp kugiri-dai) (null kugiri-dai)) | |
967 (setq egg:*dai-bunsetu-kugiri* (or kugiri-dai "")) | |
968 (egg:error "Wrong type of arguments(kugiri-dai): %s" kugiri-dai)) | |
969 | |
970 (if (or (stringp kugiri-sho) (null kugiri-sho)) | |
971 (setq egg:*sho-bunsetu-kugiri* (or kugiri-sho "")) | |
972 (egg:error "Wrong type of arguments(kugiri-sho): %s" kugiri-sho)) | |
973 | |
974 (if (or (null henkan-face) (memq henkan-face (face-list))) | |
975 (progn | |
976 (setq egg:*henkan-face* henkan-face) | |
977 (if (overlayp egg:*henkan-overlay*) | |
978 (overlay-put egg:*henkan-overlay* 'face egg:*henkan-face*))) | |
979 (egg:error "Wrong type of arguments(henkan-face): %s" henkan-face)) | |
980 | |
981 (if (or (null dai-bunsetu-face) (memq dai-bunsetu-face (face-list))) | |
982 (progn | |
983 (setq egg:*dai-bunsetu-face* dai-bunsetu-face) | |
984 (if (overlayp egg:*dai-bunsetu-overlay*) | |
985 (overlay-put egg:*dai-bunsetu-overlay* 'face egg:*dai-bunsetu-face*))) | |
986 (egg:error "Wrong type of arguments(dai-bunsetu-face): %s" dai-bunsetu-face)) | |
987 | |
988 (if (or (null sho-bunsetu-face) (memq sho-bunsetu-face (face-list))) | |
989 (progn | |
990 (setq egg:*sho-bunsetu-face* sho-bunsetu-face) | |
991 (if (overlayp egg:*sho-bunsetu-overlay*) | |
992 (overlay-put egg:*sho-bunsetu-overlay* 'face egg:*sho-bunsetu-face*))) | |
993 (egg:error "Wrong type of arguments(sho-bunsetu-face): %s" sho-bunsetu-face)) | |
994 ) | |
995 | |
996 (defun henkan-insert-kouho (start number) | |
997 (let ((i start)) | |
998 (while (< i number) | |
999 (insert (car (wnn-server-bunsetu-kanji i)) | |
1000 (if (= (1+ i) number) | |
1001 "" | |
1002 (if (wnn-server-dai-top (1+ i)) | |
1003 egg:*dai-bunsetu-kugiri* | |
1004 egg:*sho-bunsetu-kugiri*))) | |
1005 (setq i (1+ i))))) | |
1006 | |
1007 (defun henkan-kakutei () | |
1008 (interactive) | |
1009 (egg:bunsetu-face-off) | |
1010 (egg:henkan-face-off) | |
1011 (delete-region (- egg:*region-start* (length egg:*henkan-open*)) | |
1012 egg:*region-start*) | |
1013 (delete-region egg:*region-start* egg:*region-end*) | |
1014 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*))) | |
1015 (goto-char egg:*region-start*) | |
1016 (setq egg:*sai-henkan-start* (point)) | |
1017 (let ((i 0) (max (wnn-server-bunsetu-suu))) | |
1018 (setq egg:*old-bunsetu-suu* max) | |
1019 (while (< i max) | |
1020 (insert (car (wnn-server-bunsetu-kanji i ))) | |
1021 (if (not overwrite-mode) | |
1022 (undo-boundary)) | |
1023 (setq i (1+ i)) | |
1024 )) | |
1025 (setq egg:*sai-henkan-end* (point)) | |
1026 (wnn-server-hindo-update) | |
1027 (setq egg:henkan-mode-in-use nil) | |
1028 (egg:quit-egg-mode) | |
1029 (run-hooks 'egg:henkan-end-hook) | |
1030 ) | |
1031 | |
1032 ;; 92.7.10 by K.Handa | |
1033 (defun henkan-kakutei-first-char () | |
1034 "$B3NDjJ8;zNs$N:G=i$N0lJ8;z$@$1A^F~$9$k!#(B" | |
1035 (interactive) | |
1036 (egg:bunsetu-face-off) | |
1037 (egg:henkan-face-off) | |
1038 (delete-region (- egg:*region-start* (length egg:*henkan-open*)) | |
1039 egg:*region-start*) | |
1040 (delete-region egg:*region-start* egg:*region-end*) | |
1041 (delete-region egg:*region-end* (+ egg:*region-end* | |
1042 ;; 92.8.5 by Y.Kasai | |
1043 (length egg:*henkan-close*))) | |
1044 (goto-char egg:*region-start*) | |
1045 (insert (car (wnn-server-bunsetu-kanji 0))) | |
1046 (if (not overwrite-mode) | |
1047 (undo-boundary)) | |
1048 (goto-char egg:*region-start*) | |
1049 (forward-char 1) | |
1050 (delete-region (point) egg:*region-end*) | |
1051 (wnn-server-hindo-update) | |
1052 (setq egg:henkan-mode-in-use nil) | |
1053 (egg:quit-egg-mode) | |
1054 ) | |
1055 ;; end of patch | |
1056 | |
1057 (defun henkan-kakutei-before-point () | |
1058 (interactive) | |
1059 (egg:bunsetu-face-off) | |
1060 (egg:henkan-face-off) | |
1061 (delete-region egg:*region-start* egg:*region-end*) | |
1062 (goto-char egg:*region-start*) | |
1063 (let ((i 0) (max *bunsetu-number*)) | |
1064 (while (< i max) | |
1065 (insert (car (wnn-server-bunsetu-kanji i ))) | |
1066 (if (not overwrite-mode) | |
1067 (undo-boundary)) | |
1068 (setq i (1+ i)) | |
1069 )) | |
1070 (wnn-server-hindo-update *bunsetu-number*) | |
1071 (delete-region (- egg:*region-start* (length egg:*henkan-open*)) | |
1072 egg:*region-start*) | |
1073 (insert egg:*fence-open*) | |
1074 (set-marker egg:*region-start* (point)) | |
1075 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*))) | |
1076 (goto-char egg:*region-end*) | |
1077 (let ((point (point))) | |
1078 (insert egg:*fence-close*) | |
1079 (set-marker egg:*region-end* point)) | |
1080 (goto-char egg:*region-start*) | |
1081 (egg:fence-face-on) | |
1082 (let ((point (point)) | |
1083 (i *bunsetu-number*) (max (wnn-server-bunsetu-suu))) | |
1084 (while (< i max) | |
1085 (insert (car (wnn-server-bunsetu-yomi i))) | |
1086 (setq i (1+ i))) | |
1087 ;;;(insert "|") | |
1088 ;;;(insert egg:*fence-close*) | |
1089 ;;;(set-marker egg:*region-end* (point)) | |
1090 (goto-char point)) | |
1091 (setq egg:*mode-on* t) | |
1092 ;;;(use-global-map fence-mode-map) | |
1093 ;;;(use-local-map nil) | |
1094 (setq egg:henkan-mode-in-use nil) | |
1095 (use-local-map fence-mode-map) | |
1096 (egg:mode-line-display)) | |
1097 | |
1098 (defun sai-henkan () | |
1099 (interactive) | |
1100 (if egg:henkan-mode-in-use nil | |
1101 (let ((finished nil)) | |
1102 (unwind-protect | |
1103 (progn | |
1104 (setq egg:henkan-mode-in-use t) | |
1105 (mode-line-egg-mode-update (egg:msg-get 'henkan-mode-indicator)) | |
1106 (goto-char egg:*sai-henkan-start*) | |
1107 (setq egg:*local-map-backup* (current-local-map)) | |
1108 (and (boundp 'disable-undo) (setq disable-undo t)) | |
1109 (delete-region egg:*sai-henkan-start* egg:*sai-henkan-end*) | |
1110 (goto-char egg:*sai-henkan-start*) | |
1111 (insert egg:*henkan-open*) | |
1112 (set-marker egg:*region-start* (point)) | |
1113 (insert egg:*henkan-close*) | |
1114 (set-marker egg:*region-end* egg:*region-start*) | |
1115 (goto-char egg:*region-start*) | |
1116 (henkan-insert-kouho 0 egg:*old-bunsetu-suu*) | |
1117 (egg:henkan-face-on) | |
1118 (egg:bunsetu-face-on) | |
1119 (henkan-goto-bunsetu 0) | |
1120 (use-local-map henkan-mode-map) | |
1121 (setq finished t)) | |
1122 (or finished (setq disable-undo nil) (setq egg:henkan-mode-in-use nil))))) | |
1123 ) | |
1124 | |
1125 (defun egg:bunsetu-face-on () | |
1126 ;; make dai-bunsetu overlay and sho-bunsetu overlay if they do not exist. | |
1127 ;; put thier faces to overlays and move them to each bunsetu. | |
1128 (let* ((bunsetu-begin *bunsetu-number*) | |
1129 (bunsetu-end) | |
1130 (bunsetu-suu (wnn-server-bunsetu-suu))) | |
1131 ; dai bunsetu | |
1132 (if egg:*dai-bunsetu-face* | |
1133 (progn | |
1134 (if (overlayp egg:*dai-bunsetu-overlay*) | |
1135 nil | |
1136 (setq egg:*dai-bunsetu-overlay* (make-overlay 1 1)) | |
1137 (overlay-put egg:*dai-bunsetu-overlay* 'face egg:*dai-bunsetu-face*)) | |
1138 (setq bunsetu-end (wnn-server-dai-end *bunsetu-number*)) | |
1139 (while (not (wnn-server-dai-top bunsetu-begin)) | |
1140 (setq bunsetu-begin (1- bunsetu-begin))) | |
1141 (move-overlay egg:*dai-bunsetu-overlay* | |
1142 (bunsetu-position bunsetu-begin) | |
1143 (+ (bunsetu-position (1- bunsetu-end)) | |
1144 (length (bunsetu-kanji (1- bunsetu-end))))))) | |
1145 ; sho bunsetu | |
1146 (if egg:*sho-bunsetu-face* | |
1147 (progn | |
1148 (if (overlayp egg:*sho-bunsetu-overlay*) | |
1149 nil | |
1150 (setq egg:*sho-bunsetu-overlay* (make-overlay 1 1)) | |
1151 (overlay-put egg:*sho-bunsetu-overlay* 'face egg:*sho-bunsetu-face*)) | |
1152 (setq bunsetu-end (1+ *bunsetu-number*)) | |
1153 (move-overlay egg:*sho-bunsetu-overlay* | |
1154 (let ((point (bunsetu-position *bunsetu-number*))) | |
1155 (if (eq egg:*sho-bunsetu-face* 'modeline) | |
1156 (+ point (1+ (char-boundary-p point))) | |
1157 point)) | |
1158 (+ (bunsetu-position (1- bunsetu-end)) | |
1159 (length (bunsetu-kanji (1- bunsetu-end))))))))) | |
1160 | |
1161 (defun egg:bunsetu-face-off () | |
1162 (and egg:*dai-bunsetu-face* | |
1163 (overlayp egg:*dai-bunsetu-overlay*) | |
1164 (delete-overlay egg:*dai-bunsetu-overlay*)) | |
1165 (and egg:*sho-bunsetu-face* | |
1166 (overlayp egg:*sho-bunsetu-overlay*) | |
1167 (delete-overlay egg:*sho-bunsetu-overlay*)) | |
1168 ) | |
1169 | |
1170 (defun henkan-goto-bunsetu (number) | |
1171 (setq *bunsetu-number* | |
1172 (check-number-range number 0 (1- (wnn-server-bunsetu-suu)))) | |
1173 (goto-char (bunsetu-position *bunsetu-number*)) | |
1174 ; (egg:move-bunsetu-overlay) | |
1175 (egg:bunsetu-face-on) | |
1176 ) | |
1177 | |
1178 (defun henkan-forward-bunsetu () | |
1179 (interactive) | |
1180 (henkan-goto-bunsetu (1+ *bunsetu-number*)) | |
1181 ) | |
1182 | |
1183 (defun henkan-backward-bunsetu () | |
1184 (interactive) | |
1185 (henkan-goto-bunsetu (1- *bunsetu-number*)) | |
1186 ) | |
1187 | |
1188 (defun henkan-first-bunsetu () | |
1189 (interactive) | |
1190 (henkan-goto-bunsetu 0)) | |
1191 | |
1192 (defun henkan-last-bunsetu () | |
1193 (interactive) | |
1194 (henkan-goto-bunsetu (1- (wnn-server-bunsetu-suu))) | |
1195 ) | |
1196 | |
1197 (defun check-number-range (i min max) | |
1198 (cond((< i min) max) | |
1199 ((< max i) min) | |
1200 (t i))) | |
1201 | |
1202 (defun henkan-hiragana () | |
1203 (interactive) | |
1204 (henkan-goto-kouho (- (bunsetu-kouho-suu *bunsetu-number* nil) 1))) | |
1205 | |
1206 (defun henkan-katakana () | |
1207 (interactive) | |
1208 (henkan-goto-kouho (- (bunsetu-kouho-suu *bunsetu-number* nil) 2))) | |
1209 | |
1210 (defun henkan-next-kouho () | |
1211 (interactive) | |
1212 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* nil)))) | |
1213 | |
1214 (defun henkan-next-kouho-dai () | |
1215 (interactive) | |
1216 (let ((init (not egg:*dai*))) | |
1217 (setq egg:*dai* t) | |
1218 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* init))))) | |
1219 | |
1220 (defun henkan-next-kouho-sho () | |
1221 (interactive) | |
1222 (let ((init egg:*dai*)) | |
1223 (setq egg:*dai* nil) | |
1224 (henkan-goto-kouho (1+ (bunsetu-kouho-number *bunsetu-number* init))))) | |
1225 | |
1226 (defun henkan-previous-kouho () | |
1227 (interactive) | |
1228 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* nil)))) | |
1229 | |
1230 (defun henkan-previous-kouho-dai () | |
1231 (interactive) | |
1232 (let ((init (not egg:*dai*))) | |
1233 (setq egg:*dai* t) | |
1234 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* init))))) | |
1235 | |
1236 (defun henkan-previous-kouho-sho () | |
1237 (interactive) | |
1238 (let ((init egg:*dai*)) | |
1239 (setq egg:*dai* nil) | |
1240 (henkan-goto-kouho (1- (bunsetu-kouho-number *bunsetu-number* init))))) | |
1241 | |
1242 (defun henkan-goto-kouho (kouho-number) | |
1243 ; (egg:bunsetu-face-off) | |
1244 (let ((point (point)) | |
1245 (yomi (bunsetu-yomi *bunsetu-number*)) | |
1246 (max) | |
1247 (min)) | |
1248 (setq kouho-number | |
1249 (check-number-range kouho-number | |
1250 0 | |
1251 (1- (length (bunsetu-kouho-list | |
1252 *bunsetu-number* nil))))) | |
1253 (setq *zenkouho-offset* kouho-number) | |
1254 (wnn-server-henkan-kakutei kouho-number egg:*dai*) | |
1255 (setq max (wnn-server-bunsetu-suu)) | |
1256 (setq min (max 0 (1- *bunsetu-number*))) | |
1257 (delete-region | |
1258 (bunsetu-position min) egg:*region-end*) | |
1259 (goto-char (bunsetu-position min)) | |
1260 (henkan-insert-kouho min max) | |
1261 (goto-char point)) | |
1262 ; (egg:move-bunsetu-overlay) | |
1263 (egg:bunsetu-face-on) | |
1264 (egg:henkan-face-on) | |
1265 ) | |
1266 | |
1267 (defun henkan-bunsetu-chijime-dai () | |
1268 (interactive) | |
1269 (setq egg:*dai* t) | |
1270 (or (= (bunsetu-length *bunsetu-number*) 1) | |
1271 (bunsetu-length-henko (1- (bunsetu-length *bunsetu-number*))))) | |
1272 | |
1273 (defun henkan-bunsetu-chijime-sho () | |
1274 (interactive) | |
1275 (setq egg:*dai* nil) | |
1276 (or (= (bunsetu-length-sho *bunsetu-number*) 1) | |
1277 (bunsetu-length-henko (1- (bunsetu-length-sho *bunsetu-number*))))) | |
1278 | |
1279 (defun henkan-bunsetu-nobasi-dai () | |
1280 (interactive) | |
1281 (setq egg:*dai* t) | |
1282 (let ((i *bunsetu-number*) | |
1283 (max (wnn-server-bunsetu-suu)) | |
1284 (len (bunsetu-length *bunsetu-number*)) | |
1285 (maxlen 0)) | |
1286 (while (< i max) | |
1287 (setq maxlen (+ maxlen (cdr (wnn-server-bunsetu-yomi i)))) | |
1288 (setq i (1+ i))) | |
1289 (if (not (= len maxlen)) | |
1290 (bunsetu-length-henko (1+ len))))) | |
1291 | |
1292 (defun henkan-bunsetu-nobasi-sho () | |
1293 (interactive) | |
1294 (setq egg:*dai* nil) | |
1295 (let ((i *bunsetu-number*) | |
1296 (max (wnn-server-bunsetu-suu)) | |
1297 (len (bunsetu-length-sho *bunsetu-number*)) | |
1298 (maxlen 0)) | |
1299 (while (< i max) | |
1300 (setq maxlen (+ maxlen (cdr (wnn-server-bunsetu-yomi i)))) | |
1301 (setq i (1+ i))) | |
1302 (if (not (= len maxlen)) | |
1303 (bunsetu-length-henko (1+ len))))) | |
1304 | |
1305 ; (if (not (= (1+ *bunsetu-number*) (wnn-server-bunsetu-suu))) | |
1306 ; (bunsetu-length-henko (1+ (bunsetu-length *bunsetu-number*))))) | |
1307 | |
1308 | |
1309 (defun henkan-saishou-bunsetu () | |
1310 (interactive) | |
1311 (bunsetu-length-henko 1)) | |
1312 | |
1313 (defun henkan-saichou-bunsetu () | |
1314 (interactive) | |
1315 (let ((max (wnn-server-bunsetu-suu)) (i *bunsetu-number*) | |
1316 (l 0)) | |
1317 (while (< i max) | |
1318 (setq l (+ l (bunsetu-length-sho i))) | |
1319 (setq i (1+ i))) | |
1320 (bunsetu-length-henko l))) | |
1321 | |
1322 (defun bunsetu-length-henko (length) | |
1323 (let ((i 0) | |
1324 (r (wnn-server-bunsetu-henkou *bunsetu-number* length egg:*dai*)) | |
1325 (start (max 0 (1- *bunsetu-number*)))) | |
1326 (cond((null r) | |
1327 (egg:error (wnn-server-get-msg))) | |
1328 ((> r 0) | |
1329 ; (egg:henkan-face-off) | |
1330 ; (egg:bunsetu-face-off) | |
1331 (delete-region | |
1332 (bunsetu-position start) egg:*region-end*) | |
1333 (goto-char (bunsetu-position start)) | |
1334 (henkan-insert-kouho start r) | |
1335 (henkan-goto-bunsetu *bunsetu-number*))))) | |
1336 | |
1337 (defun henkan-quit () | |
1338 (interactive) | |
1339 (egg:bunsetu-face-off) | |
1340 (egg:henkan-face-off) | |
1341 (delete-region (- egg:*region-start* (length egg:*henkan-open*)) | |
1342 egg:*region-start*) | |
1343 (delete-region egg:*region-start* egg:*region-end*) | |
1344 (delete-region egg:*region-end* (+ egg:*region-end* (length egg:*henkan-close*))) | |
1345 (goto-char egg:*region-start*) | |
1346 (insert egg:*fence-open*) | |
1347 (set-marker egg:*region-start* (point)) | |
1348 (insert egg:*kanji-kanabuff*) | |
1349 (let ((point (point))) | |
1350 (insert egg:*fence-close*) | |
1351 (set-marker egg:*region-end* point) | |
1352 ) | |
1353 (goto-char egg:*region-end*) | |
1354 (egg:fence-face-on) | |
1355 (wnn-server-henkan-quit) | |
1356 (setq egg:*mode-on* t) | |
1357 ;;;(use-global-map fence-mode-map) | |
1358 ;;;(use-local-map nil) | |
1359 (setq egg:henkan-mode-in-use nil) | |
1360 (use-local-map fence-mode-map) | |
1361 (egg:mode-line-display) | |
1362 ) | |
1363 | |
1364 (defun henkan-select-kouho (init) | |
1365 (if (not (eq (selected-window) (minibuffer-window))) | |
1366 (let ((kouho-list (bunsetu-kouho-list *bunsetu-number* init)) | |
1367 menu) | |
1368 (setq menu | |
1369 (list 'menu (egg:msg-get 'jikouho) | |
1370 (let ((l kouho-list) (r nil) (i 0)) | |
1371 (while l | |
1372 (setq r (cons (cons (car l) i) r)) | |
1373 (setq i (1+ i)) | |
1374 (setq l (cdr l))) | |
1375 (reverse r)))) | |
1376 (henkan-goto-kouho | |
1377 (menu:select-from-menu menu | |
1378 (bunsetu-kouho-number *bunsetu-number* nil)))) | |
1379 (beep))) | |
1380 | |
1381 (defun henkan-select-kouho-dai () | |
1382 (interactive) | |
1383 (let ((init (not egg:*dai*))) | |
1384 (setq egg:*dai* t) | |
1385 (henkan-select-kouho init))) | |
1386 | |
1387 (defun henkan-select-kouho-sho () | |
1388 (interactive) | |
1389 (let ((init egg:*dai*)) | |
1390 (setq egg:*dai* nil) | |
1391 (henkan-select-kouho init))) | |
1392 | |
1393 (defun henkan-word-off () | |
1394 (interactive) | |
1395 (let ((info (wnn-server-inspect *bunsetu-number*))) | |
1396 (if (null info) | |
1397 (notify (wnn-server-get-msg)) | |
1398 (progn | |
1399 (let ((dic-list (wnn-server-dict-list))) | |
1400 (if (null dic-list) | |
1401 (notify (wnn-server-get-msg)) | |
1402 (progn | |
1403 (let* ((kanji (nth 0 info)) | |
1404 (yomi (nth 1 info)) | |
1405 (serial (nth 3 info)) | |
1406 (jisho-no (nth 2 info)) | |
1407 (jisho-name (nth 2 (assoc jisho-no dic-list)))) | |
1408 (if (wnn-server-word-use jisho-no serial) | |
1409 (notify (egg:msg-get 'off-msg) | |
1410 kanji yomi jisho-name serial) | |
1411 (egg:error (wnn-server-get-msg))))))))))) | |
1412 | |
1413 (defun henkan-kakutei-and-self-insert () | |
1414 (interactive) | |
1415 (setq unread-command-events (list last-command-event)) | |
1416 (henkan-kakutei)) | |
1417 | |
1418 (defvar henkan-mode-map (make-keymap)) | |
1419 (defvar henkan-mode-esc-map (make-keymap)) | |
1420 | |
1421 (define-key henkan-mode-map [t] 'undefined) | |
1422 (define-key henkan-mode-esc-map [t] 'undefined) | |
1423 | |
1424 (let ((ch 0)) | |
1425 (while (<= ch 127) | |
1426 (define-key henkan-mode-map (char-to-string ch) 'undefined) | |
1427 (define-key henkan-mode-esc-map (char-to-string ch) 'undefined) | |
1428 (setq ch (1+ ch)))) | |
1429 | |
1430 (let ((ch 32)) | |
1431 (while (< ch 127) | |
1432 (define-key henkan-mode-map (char-to-string ch) 'henkan-kakutei-and-self-insert) | |
1433 (setq ch (1+ ch)))) | |
1434 | |
1435 (define-key henkan-mode-map "\e" henkan-mode-esc-map) | |
1436 (define-key henkan-mode-map [escape] henkan-mode-esc-map) | |
1437 ;(define-key henkan-mode-map "\ei" 'henkan-inspect-bunsetu) | |
1438 (define-key henkan-mode-map "\ei" 'henkan-bunsetu-chijime-sho) | |
1439 (define-key henkan-mode-map "\eo" 'henkan-bunsetu-nobasi-sho) | |
1440 (define-key henkan-mode-map "\es" 'henkan-select-kouho-dai) | |
1441 (define-key henkan-mode-map "\eh" 'henkan-hiragana) | |
1442 (define-key henkan-mode-map "\ek" 'henkan-katakana) | |
1443 (define-key henkan-mode-map "\ez" 'henkan-select-kouho-sho) | |
1444 (define-key henkan-mode-map "\e<" 'henkan-saishou-bunsetu) | |
1445 (define-key henkan-mode-map "\e>" 'henkan-saichou-bunsetu) | |
1446 ;(define-key henkan-mode-map " " 'henkan-next-kouho-dai) | |
1447 ; 92.9.8 by T.Shingu | |
1448 (define-key henkan-mode-map " " 'henkan-next-kouho) | |
1449 ; 92.7.10 by K.Handa | |
1450 (define-key henkan-mode-map "\C-@" 'henkan-kakutei-first-char) | |
1451 (define-key henkan-mode-map [?\C-\ ] 'henkan-kakutei-first-char) | |
1452 (define-key henkan-mode-map "\C-a" 'henkan-first-bunsetu) | |
1453 (define-key henkan-mode-map "\C-b" 'henkan-backward-bunsetu) | |
1454 (define-key henkan-mode-map "\C-c" 'henkan-quit) | |
1455 (define-key henkan-mode-map "\C-e" 'henkan-last-bunsetu) | |
1456 (define-key henkan-mode-map "\C-f" 'henkan-forward-bunsetu) | |
1457 (define-key henkan-mode-map "\C-g" 'henkan-quit) | |
1458 (define-key henkan-mode-map "\C-h" 'henkan-help-command) | |
1459 (define-key henkan-mode-map "\C-i" 'henkan-bunsetu-chijime-dai) | |
1460 (define-key henkan-mode-map "\C-k" 'henkan-kakutei-before-point) | |
1461 (define-key henkan-mode-map "\C-l" 'henkan-kakutei) | |
1462 (define-key henkan-mode-map "\C-m" 'henkan-kakutei) | |
1463 (define-key henkan-mode-map [return] 'henkan-kakutei) | |
1464 (define-key henkan-mode-map "\C-n" 'henkan-next-kouho) | |
1465 (define-key henkan-mode-map "\C-o" 'henkan-bunsetu-nobasi-dai) | |
1466 (define-key henkan-mode-map "\C-p" 'henkan-previous-kouho) | |
1467 (define-key henkan-mode-map "\C-t" 'toroku-henkan-mode) | |
1468 (define-key henkan-mode-map "\C-u" 'undefined) | |
1469 (define-key henkan-mode-map "\C-v" 'henkan-inspect-bunsetu) | |
1470 (define-key henkan-mode-map "\C-w" 'henkan-next-kouho-dai) | |
1471 (define-key henkan-mode-map "\C-z" 'henkan-next-kouho-sho) | |
1472 (define-key henkan-mode-map "\177" 'henkan-quit) | |
1473 (define-key henkan-mode-map [delete] 'henkan-quit) | |
1474 (define-key henkan-mode-map [backspace] 'henkan-quit) | |
1475 (define-key henkan-mode-map [right] 'henkan-forward-bunsetu) | |
1476 (define-key henkan-mode-map [left] 'henkan-backward-bunsetu) | |
1477 (define-key henkan-mode-map [down] 'henkan-next-kouho) | |
1478 (define-key henkan-mode-map [up] 'henkan-previous-kouho) | |
1479 | |
1480 (defun henkan-help-command () | |
1481 "Display documentation for henkan-mode." | |
1482 (interactive) | |
1483 (let ((buf "*Help*")) | |
1484 (if (eq (get-buffer buf) (current-buffer)) | |
1485 (henkan-quit) | |
1486 (with-output-to-temp-buffer buf | |
1487 ;;(princ (substitute-command-keys henkan-mode-document-string)) | |
1488 (princ (substitute-command-keys (egg:msg-get 'henkan-help))) | |
1489 (print-help-return-message))))) | |
1490 | |
1491 ;;;---------------------------------------------------------------------- | |
1492 ;;; | |
1493 ;;; Dictionary management Facility | |
1494 ;;; | |
1495 ;;;---------------------------------------------------------------------- | |
1496 | |
1497 ;;; | |
1498 ;;; $B<-=qEPO?(B | |
1499 ;;; | |
1500 | |
1501 ;;;; | |
1502 ;;;; User entry: toroku-region | |
1503 ;;;; | |
1504 | |
1505 (defun remove-regexp-in-string (regexp string) | |
1506 (cond((not(string-match regexp string)) | |
1507 string) | |
1508 (t(let ((str nil) | |
1509 (ostart 0) | |
1510 (oend (match-beginning 0)) | |
1511 (nstart (match-end 0))) | |
1512 (setq str (concat str (substring string ostart oend))) | |
1513 (while (string-match regexp string nstart) | |
1514 (setq ostart nstart) | |
1515 (setq oend (match-beginning 0)) | |
1516 (setq nstart (match-end 0)) | |
1517 (setq str (concat str (substring string ostart oend)))) | |
1518 (concat str (substring string nstart)))))) | |
1519 | |
1520 (defun hinsi-from-menu (dict-number name) | |
1521 (let ((result (wnn-server-hinsi-list dict-number name)) | |
1522 ; (hinsi-pair) | |
1523 (menu)) | |
1524 (if (null result) | |
1525 (egg:error (wnn-server-get-msg)) | |
1526 (if (eq result 0) | |
1527 name | |
1528 (progn | |
1529 ; (setq hinsi-pair (mapcar '(lambda (x) (cons x x)) result)) | |
1530 ; (if (null (string= name "/")) | |
1531 ; (setq hinsi-pair (cons (cons "/" "/") hinsi-pair))) | |
1532 ; (setq menu (list 'menu (egg:msg-get 'hinsimei) hinsi-pair)) | |
1533 (setq menu (list 'menu (egg:msg-get 'hinsimei) | |
1534 (if (string= name "/") | |
1535 result | |
1536 (cons "/" result)))) | |
1537 (hinsi-from-menu dict-number | |
1538 (menu:select-from-menu menu))))))) | |
1539 | |
1540 (defun wnn-dict-name (dict-number dict-list) | |
1541 (let* ((dict-info (assoc dict-number dict-list)) | |
1542 (dict-comment (nth 2 dict-info))) | |
1543 (if (string= dict-comment "") | |
1544 (file-name-nondirectory (nth 1 dict-info)) | |
1545 dict-comment))) | |
1546 | |
1547 (defun egg:toroku-word (yomi kanji interactive) | |
1548 (let*((dic-list (wnn-server-dict-list)) | |
1549 (writable-dic-list (wnn-server-hinsi-dicts -1)) | |
1550 (dict-number | |
1551 (menu:select-from-menu | |
1552 (list 'menu (egg:msg-get 'touroku-jishomei) | |
1553 (mapcar '(lambda (x) | |
1554 (let ((y (car (assoc x dic-list)))) | |
1555 (cons (wnn-dict-name y dic-list) y))) | |
1556 writable-dic-list)))) | |
1557 (hinsi-name (hinsi-from-menu dict-number "/")) | |
1558 (hinsi-no (wnn-server-hinsi-number hinsi-name)) | |
1559 (dict-name (wnn-dict-name dict-number dic-list))) | |
1560 (if (or (not interactive) | |
1561 (notify-yes-or-no-p (egg:msg-get 'register-notify) | |
1562 kanji yomi hinsi-name dict-name)) | |
1563 (if (wnn-server-word-add dict-number kanji yomi "" hinsi-no) | |
1564 (notify (egg:msg-get 'registerd) kanji yomi hinsi-name dict-name) | |
1565 (egg:error (wnn-server-get-msg)))))) | |
1566 | |
1567 (defun toroku-region (start end) | |
1568 (interactive "r") | |
1569 (if (null (wnn-server-isconnect)) (EGG:open-wnn)) | |
1570 (wnn-server-set-rev nil) | |
1571 (let*((kanji | |
1572 (remove-regexp-in-string "[\0-\37]" (buffer-substring start end))) | |
1573 (yomi (read-current-its-string | |
1574 (format (egg:msg-get 'jishotouroku-yomi) kanji)))) | |
1575 (egg:toroku-word yomi kanji nil))) | |
1576 | |
1577 (defun delete-space (string) | |
1578 (let ((len (length string))) | |
1579 (if (eq len 0) "" | |
1580 (if (or (char-equal (aref string 0) ? ) (char-equal (aref string 0) ?-)) | |
1581 (delete-space (substring string 1)) | |
1582 (concat (substring string 0 1) (delete-space (substring string 1))))))) | |
1583 | |
1584 | |
1585 (defun toroku-henkan-mode () | |
1586 (interactive) | |
1587 (let*((kanji | |
1588 (read-current-its-string (egg:msg-get 'kanji) | |
1589 (delete-space | |
1590 (buffer-substring (point) egg:*region-end* )))) | |
1591 (yomi (read-current-its-string | |
1592 (format (egg:msg-get 'jishotouroku-yomi) kanji) | |
1593 (let ((str "") | |
1594 (i *bunsetu-number*) | |
1595 (max (wnn-server-bunsetu-suu))) | |
1596 (while (< i max) | |
1597 (setq str (concat str (car (wnn-server-bunsetu-yomi i)) )) | |
1598 (setq i (1+ i))) | |
1599 str)))) | |
1600 (egg:toroku-word yomi kanji nil))) | |
1601 | |
1602 ;;; | |
1603 ;;; $B<-=qJT=87O(B DicEd | |
1604 ;;; | |
1605 | |
1606 (defvar *diced-window-configuration* nil) | |
1607 | |
1608 (defvar *diced-dict-info* nil) | |
1609 | |
1610 (defvar *diced-yomi* nil) | |
1611 | |
1612 ;;;;; | |
1613 ;;;;; User entry : edit-dict-item | |
1614 ;;;;; | |
1615 | |
1616 (defun edit-dict-item (yomi) | |
1617 (interactive (list (read-current-its-string (egg:msg-get 'yomi)))) | |
1618 (if (null (wnn-server-isconnect)) (EGG:open-wnn)) | |
1619 (wnn-server-set-rev nil) | |
1620 (let ((dict-info (wnn-server-word-search yomi)) | |
1621 (current-wnn-server-type)) | |
1622 (if (null dict-info) | |
1623 (message (egg:msg-get 'no-yomi) yomi) | |
1624 (progn | |
1625 (setq current-wnn-server-type wnn-server-type) | |
1626 (setq *diced-yomi* yomi) | |
1627 (setq *diced-window-configuration* (current-window-configuration)) | |
1628 (pop-to-buffer "*Nihongo Dictionary Information*") | |
1629 (setq wnn-server-type current-wnn-server-type) | |
1630 (setq major-mode 'diced-mode) | |
1631 (setq mode-name "Diced") | |
1632 (setq mode-line-buffer-identification | |
1633 (concat "DictEd: " yomi | |
1634 (make-string (max 0 (- 17 (string-width yomi))) ? ))) | |
1635 (sit-for 0) ;; will redislay. | |
1636 ;;;(use-global-map diced-mode-map) | |
1637 (use-local-map diced-mode-map) | |
1638 (diced-display dict-info) | |
1639 )))) | |
1640 | |
1641 (defun diced-redisplay () | |
1642 (wnn-server-set-rev nil) | |
1643 (let ((dict-info (wnn-server-word-search *diced-yomi*))) | |
1644 (if (null dict-info) | |
1645 (progn | |
1646 (message (egg:msg-get 'no-yomi) *diced-yomi*) | |
1647 (diced-quit)) | |
1648 (diced-display dict-info)))) | |
1649 | |
1650 (defun diced-display (dict-info) | |
1651 ;;; (values (list (record kanji bunpo hindo dict-number serial-number))) | |
1652 ;;; 0 1 2 3 4 | |
1653 (setq dict-info | |
1654 (sort dict-info | |
1655 (function (lambda (x y) | |
1656 (or (< (nth 1 x) (nth 1 y)) | |
1657 (if (= (nth 1 x) (nth 1 y)) | |
1658 (or (> (nth 2 x) (nth 2 y)) | |
1659 (if (= (nth 2 x) (nth 2 y)) | |
1660 (< (nth 3 x) (nth 3 y)))))))))) | |
1661 (setq *diced-dict-info* dict-info) | |
1662 (setq buffer-read-only nil) | |
1663 (erase-buffer) | |
1664 (let ((l-kanji | |
1665 (apply 'max | |
1666 (mapcar (function (lambda (l) (string-width (nth 0 l)))) | |
1667 dict-info))) | |
1668 (l-bunpo | |
1669 (apply 'max | |
1670 (mapcar (function(lambda (l) | |
1671 (string-width (wnn-server-hinsi-name (nth 1 l))))) | |
1672 dict-info))) | |
1673 (dict-list (wnn-server-dict-list)) | |
1674 (writable-dict-list (wnn-server-hinsi-dicts -1))) | |
1675 (while dict-info | |
1676 (let*((kanji (nth 0 (car dict-info))) | |
1677 (bunpo (nth 1 (car dict-info))) | |
1678 (hinshi (wnn-server-hinsi-name bunpo)) | |
1679 (hindo (nth 2 (car dict-info))) | |
1680 (dict-number (nth 3 (car dict-info))) | |
1681 (dict-name (wnn-dict-name dict-number dict-list)) | |
1682 (sys-dict-p (null (memq dict-number writable-dict-list))) | |
1683 (serial-number (nth 4 (car dict-info)))) | |
1684 (insert (if sys-dict-p " *" " ")) | |
1685 (insert kanji) | |
1686 (insert-char ? | |
1687 (- (+ l-kanji 10) (string-width kanji))) | |
1688 (insert hinshi) | |
1689 (insert-char ? (- (+ l-bunpo 2) (string-width hinshi))) | |
1690 (insert (egg:msg-get 'jisho) (file-name-nondirectory dict-name) | |
1691 "/" (int-to-string serial-number) | |
1692 (egg:msg-get 'hindo) (int-to-string hindo) ?\n ) | |
1693 (setq dict-info (cdr dict-info)))) | |
1694 (goto-char (point-min))) | |
1695 (setq buffer-read-only t)) | |
1696 | |
1697 (defun diced-add () | |
1698 (interactive) | |
1699 (diced-execute t) | |
1700 (let*((kanji (read-from-minibuffer (egg:msg-get 'kanji)))) | |
1701 (egg:toroku-word *diced-yomi* kanji t) | |
1702 (diced-redisplay))) | |
1703 | |
1704 (defun diced-delete () | |
1705 (interactive) | |
1706 (beginning-of-line) | |
1707 (if (= (char-after (1+ (point))) ?* ) | |
1708 (progn (message (egg:msg-get 'cannot-remove)) (beep)) | |
1709 (if (= (following-char) ? ) | |
1710 (let ((buffer-read-only nil)) | |
1711 (delete-char 1) (insert "D") (backward-char 1)) | |
1712 ))) | |
1713 | |
1714 | |
1715 (defun diced-undelete () | |
1716 (interactive) | |
1717 (beginning-of-line) | |
1718 (if (= (following-char) ?D) | |
1719 (let ((buffer-read-only nil)) | |
1720 (delete-char 1) (insert " ") (backward-char 1)) | |
1721 (beep))) | |
1722 | |
1723 (defun diced-redisplay-hindo (dict-number serial-number) | |
1724 (let ((hindo)) | |
1725 (setq buffer-read-only nil) | |
1726 (beginning-of-line) | |
1727 (re-search-forward "\\([0-9\-]+\\)\\(\n\\)") | |
1728 (delete-region (match-beginning 1) (match-end 1)) | |
1729 (setq hindo (nth 3 (wnn-server-word-info dict-number serial-number))) | |
1730 (goto-char (match-beginning 1)) | |
1731 (insert (int-to-string hindo)) | |
1732 (beginning-of-line) | |
1733 (setq buffer-read-only t))) | |
1734 | |
1735 (defun diced-use () | |
1736 (interactive) | |
1737 (let* ((dict-item (nth | |
1738 (+ (count-lines (point-min) (point)) | |
1739 (if (= (current-column) 0) 1 0) | |
1740 -1) | |
1741 *diced-dict-info*)) | |
1742 (hindo (nth 2 dict-item)) | |
1743 (dict-number (nth 3 dict-item)) | |
1744 (serial-number (nth 4 dict-item)) | |
1745 ) | |
1746 (if (null (wnn-server-word-use dict-number serial-number)) | |
1747 (egg:error (wnn-server-get-msg))) | |
1748 (diced-redisplay-hindo dict-number serial-number))) | |
1749 | |
1750 (defun diced-hindo-set (&optional newhindo) | |
1751 (interactive) | |
1752 (if (null newhindo) | |
1753 (setq newhindo (read-minibuffer (egg:msg-get 'enter-hindo)))) | |
1754 (let* ((dict-item (nth | |
1755 (+ (count-lines (point-min) (point)) | |
1756 (if (= (current-column) 0) 1 0) | |
1757 -1) | |
1758 *diced-dict-info*)) | |
1759 (hindo (nth 2 dict-item)) | |
1760 (dict-number (nth 3 dict-item)) | |
1761 (serial-number (nth 4 dict-item)) | |
1762 ) | |
1763 (if (null (wnn-server-word-hindo-set dict-number serial-number newhindo)) | |
1764 (egg:error (wnn-server-get-msg))) | |
1765 (diced-redisplay-hindo dict-number serial-number))) | |
1766 | |
1767 (defun diced-quit () | |
1768 (interactive) | |
1769 (setq buffer-read-only nil) | |
1770 (erase-buffer) | |
1771 (setq buffer-read-only t) | |
1772 (bury-buffer (get-buffer "*Nihongo Dictionary Information*")) | |
1773 (set-window-configuration *diced-window-configuration*) | |
1774 ) | |
1775 | |
1776 (defun diced-execute (&optional display) | |
1777 (interactive) | |
1778 (goto-char (point-min)) | |
1779 (let ((no 0)) | |
1780 (while (not (eobp)) | |
1781 (if (= (following-char) ?D) | |
1782 (let* ((dict-item (nth no *diced-dict-info*)) | |
1783 (kanji (nth 0 dict-item)) | |
1784 (bunpo (nth 1 dict-item)) | |
1785 (hinshi (wnn-server-hinsi-name bunpo)) | |
1786 (hindo (nth 2 dict-item)) | |
1787 (dict-number (nth 3 dict-item)) | |
1788 (dict-name (wnn-dict-name dict-number (wnn-server-dict-list))) | |
1789 (sys-dict-p (null (memq dict-number (wnn-server-hinsi-dicts -1)))) | |
1790 (serial-number (nth 4 dict-item)) | |
1791 ) | |
1792 (if (notify-yes-or-no-p (egg:msg-get 'remove-notify) | |
1793 kanji hinshi dict-name) | |
1794 (progn | |
1795 (if (wnn-server-word-delete dict-number serial-number) | |
1796 (notify (egg:msg-get 'removed) | |
1797 kanji hinshi dict-name) | |
1798 (egg:error (wnn-server-get-msg))) | |
1799 )))) | |
1800 (setq no (1+ no)) | |
1801 (forward-line 1))) | |
1802 (forward-line -1) | |
1803 (if (not display) (diced-redisplay))) | |
1804 | |
1805 (defun diced-next-line () | |
1806 (interactive) | |
1807 (beginning-of-line) | |
1808 (forward-line 1) | |
1809 (if (eobp) (progn (beep) (forward-line -1)))) | |
1810 | |
1811 (defun diced-end-of-buffer () | |
1812 (interactive) | |
1813 (goto-char (point-max)) | |
1814 (forward-line -1)) | |
1815 | |
1816 (defun diced-scroll-down () | |
1817 (interactive) | |
1818 (scroll-down) | |
1819 (if (eobp) (forward-line -1))) | |
1820 | |
1821 (defun diced-mode () | |
1822 "Mode for \"editing\" dictionaries. | |
1823 In diced, you are \"editing\" a list of the entries in dictionaries. | |
1824 You can move using the usual cursor motion commands. | |
1825 Letters no longer insert themselves. Instead, | |
1826 | |
1827 Type a to Add new entry. | |
1828 Type d to flag an entry for Deletion. | |
1829 Type n to move cursor to Next entry. | |
1830 Type p to move cursor to Previous entry. | |
1831 Type q to Quit from DicEd. | |
1832 Type C-u to Toggle the word to use/unuse. | |
1833 Type u to Unflag an entry (remove its D flag). | |
1834 Type x to eXecute the deletions requested. | |
1835 " | |
1836 ) | |
1837 | |
1838 (defvar diced-mode-map (let ((map (make-sparse-keymap))) (suppress-keymap map) map)) | |
1839 | |
1840 (define-key diced-mode-map "a" 'diced-add) | |
1841 (define-key diced-mode-map "d" 'diced-delete) | |
1842 (define-key diced-mode-map "n" 'diced-next-line) | |
1843 (define-key diced-mode-map "p" 'previous-line) | |
1844 (define-key diced-mode-map "q" 'diced-quit) | |
1845 ;(define-key diced-mode-map "t" 'diced-use) | |
1846 (define-key diced-mode-map "u" 'diced-undelete) | |
1847 (define-key diced-mode-map "x" 'diced-execute) | |
1848 | |
1849 (define-key diced-mode-map "\C-h" 'help-command) | |
1850 (define-key diced-mode-map "\C-n" 'diced-next-line) | |
1851 (define-key diced-mode-map "\C-p" 'previous-line) | |
1852 (define-key diced-mode-map "\C-u" 'diced-use) | |
1853 (define-key diced-mode-map "\C-v" 'scroll-up) | |
1854 (define-key diced-mode-map "\eh" 'diced-hindo-set) | |
1855 (define-key diced-mode-map "\e<" 'beginning-of-buffer) | |
1856 (define-key diced-mode-map "\e>" 'diced-end-of-buffer) | |
1857 (define-key diced-mode-map "\ev" 'diced-scroll-down) | |
1858 | |
1859 (define-key diced-mode-map [up] 'previous-line) | |
1860 (define-key diced-mode-map [down] 'diced-next-line) | |
1861 | |
1862 | |
1863 ;;; | |
1864 ;;; set comment on dictionary | |
1865 ;;; | |
1866 | |
1867 (defun set-dict-comment () | |
1868 (interactive) | |
1869 (if (null (wnn-server-isconnect)) (EGG:open-wnn)) | |
1870 (wnn-server-set-rev nil) | |
1871 (let*((dic-list (wnn-server-dict-list)) | |
1872 (writable-dic-list (wnn-server-hinsi-dicts -1)) | |
1873 (dict-number | |
1874 (menu:select-from-menu | |
1875 (list 'menu (egg:msg-get 'jishomei) | |
1876 (mapcar '(lambda (x) | |
1877 (let ((y (assoc x dic-list))) | |
1878 (cons (nth 1 y) (nth 0 y)))) | |
1879 writable-dic-list)))) | |
1880 (comment (read-from-minibuffer (egg:msg-get 'comment) | |
1881 (wnn-dict-name dict-number dic-list)))) | |
1882 (if (wnn-server-dict-comment dict-number comment) | |
1883 (notify (egg:msg-get 'jisho-comment) | |
1884 (wnn-dict-name dict-number dic-list) comment) | |
1885 (egg:error (wnn-server-get-msg))))) | |
1886 | |
1887 | |
1888 ;;; | |
1889 ;;; Pure inspect facility | |
1890 ;;; | |
1891 | |
1892 (defun henkan-inspect-bunsetu () | |
1893 (interactive) | |
1894 (let ((info (wnn-server-inspect *bunsetu-number*))) | |
1895 (if (null info) | |
1896 (notify (wnn-server-get-msg)) | |
1897 (progn | |
1898 (let ((dic-list (wnn-server-dict-list))) | |
1899 (if (null dic-list) | |
1900 (notify (wnn-server-get-msg)) | |
1901 (progn | |
1902 (let ((hinsi (wnn-server-hinsi-name (nth 4 info))) | |
1903 (kanji (nth 0 info)) | |
1904 (yomi (nth 1 info)) | |
1905 (serial (nth 3 info)) | |
1906 (hindo (nth 5 info)) | |
1907 (jisho (wnn-dict-name (nth 2 info) dic-list)) | |
1908 (ima (nth 6 info)) | |
1909 (hyoka (nth 7 info)) | |
1910 (daihyoka (nth 8 info)) | |
1911 (kangovect (nth 9 info))) | |
1912 (notify-internal | |
1913 (format "%s %s(%s %s:%s Freq:%s%s) S:%s D:%s V:%s " | |
1914 kanji yomi hinsi jisho serial | |
1915 (if (= ima 1) "*" " ") | |
1916 hindo hyoka daihyoka kangovect) | |
1917 t))))))))) | |
1918 | |
1919 (provide 'wnn-egg) | |
1920 | |
1921 ;;; wnn-egg.el ends here |