1 ;;; skk-kakasi.el --- KAKASI
\e$B4XO"%W%m%0%i%`
\e(B
2 ;; Copyright (C) 1996, 1998, 1999 Mikio Nakajima <minakaji@osaka.email.ne.jp>
4 ;; Author: Mikio Nakajima <minakaji@osaka.email.ne.jp>
5 ;; Version: $Id: skk-kakasi.el,v 1.3 2000-11-08 01:51:44 youngs Exp $
7 ;; Last Modified: $Date: 2000-11-08 01:51:44 $
9 ;; This file is not part of SKK yet.
11 ;; SKK is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either versions 2, or (at your option)
16 ;; SKK is distributed in the hope that it will be useful
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 ;; GNU General Public License for more details.
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with SKK, see the file COPYING. If not, write to the Free
23 ;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
24 ;; MA 02111-1307, USA.
28 ;; skk-kakasi.el
\e$B$O
\e(B KAKASI
\e$B$r
\e(B SKK
\e$B$NCf$+$i;H$&%$%s%?!<%U%'%$%9$G$9!#
\e(BKAKASI
\e$B$O!"
\e(B
29 ;;
\e$B9b66M5?.$5$s
\e(B <takahasi@tiny.or.jp>
\e$B$K$h$k!"!V4A;z$+$J$^$8$jJ8$r$R$i$,$JJ8$d
\e(B
30 ;;
\e$B%m!<%^;zJ8$KJQ49$9$k$3$H$rL\E*$H$7$F:n@.$7$?%W%m%0%i%`$H<-=q$NAm>N!W$G$9!#
\e(B
31 ;;
\e$B;d<+?H$,%K%e!<%9$d%a!<%k$rFI$s$G$$$F!"F|>oFI$_$,J,$i$J$/$FCQ$:$+$7$$;W$$$r
\e(B
32 ;;
\e$B$9$k$3$H$,B?$$$N$G!"5U0z$-$r$7$?$/$F:n$j$^$7$?!#
\e(B
34 ;; KAKASI
\e$B$O!"
\e(B1996
\e$BG/
\e(B 4
\e$B7n
\e(B 25
\e$BF|8=:_!"
\e(B
35 ;; sunsite.sut.ac.jp:/pub/asia-info/japanese-src/packages/kakasi-2.2.5.tar.gz
36 ;; sunsite.sut.ac.jp:/pub/asia-info/japanese-src/packages/kakasidict.940620.gz
37 ;;
\e$B$K$"$j
\e(B anonymous ftp
\e$B$GF~<j$G$-$^$9!#
\e(B
39 ;;
\e$BAG@2$7$$%W%m%0%i%`
\e(B KAKASI
\e$B$r$*:n$j$K$J$C$?9b66$5$s$H!"
\e(BKAKASI
\e$B$r
\e(B anonymous
40 ;; ftp
\e$B$GF~<j2DG=$H$7$F$$$k
\e(B sunsite.sut.ac.jp
\e$B$K46<U$$$?$7$^$9!#
\e(B
44 (require 'skk-foreword)
49 (defgroup skk-kakasi nil "SKK kakasi related customization."
57 (defcustom skk-use-kakasi (exec-installed-p "kakasi")
58 "*Non-nil
\e$B$G$"$l$P
\e(B KAKASI
\e$B$r;H$C$?JQ49$r9T$J$&!#
\e(B"
62 (defcustom skk-kakasi-command (exec-installed-p "kakasi")
63 "*KAKASI
\e$B%3%^%s%IK\BN!#
\e(B"
67 (defcustom skk-romaji-*-by-hepburn t
68 "*Non-nil
\e$B$G$"$l$P
\e(B KAKASI
\e$B$r;H$C$?%m!<%^;z$X$NJQ49MM<0$K%X%\%s<0$rMQ$$$k!#
\e(B
70 \"
\e$B$7
\e(B\" -> \"shi\"
72 nil
\e$B$G$"$l$P!"71Na<0
\e(B \"(
\e$B!VF|K\<0!W$H$b8@$&$h$&$@
\e(B)\"
\e$B$rMQ$$$k!#
\e(B
74 \"
\e$B$7
\e(B\" -> \"si\"
76 \e$B><OB
\e(B 29
\e$BG/
\e(B 12
\e$B7n
\e(B 9
\e$BF|IUFb3U9p<(Bh0l9f$K$h$l$P!"86B'E*$K71Na<0
\e(B \"(
\e$BF|K\<0
\e(B)\"
\e$B$r
\e(B
77 \e$BMQ$$$k$+$N$h$&$K5-:\$5$l$F$$$k$,!":#F|0lHLE*$J5-:\J}K!$O!"$`$7$m!"%X%\%s<0$G$"
\e(B
78 \e$B$k$h$&$K;W$&!#
\e(B"
82 (defcustom skk-kakasi-load-hook nil
83 "*skk-kakasi.el
\e$B$,%m!<%I$5$l$?$H$-$N%U%C%/!#
\e(B"
87 (if (fboundp 'modify-coding-system-alist)
88 (let ((euc (cdr (assoc "euc" skk-coding-system-alist))))
89 (modify-coding-system-alist 'process "kakasi" (cons euc euc)) ))
93 (defun skk-gyakubiki-region (start end &optional all)
94 "
\e$B%j!<%8%g%s$N4A;z!"Aw$j2>L>$rA4$F$R$i$,$J$KJQ49$9$k!#
\e(B
95 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
96 \e$B$/$C$FI=<($9$k!#
\e(B
98 \e$BCfEg
\e(B -> {
\e$B$J$+$7$^
\e(B|
\e$B$J$+$8$^
\e(B}"
100 (let ((str (skk-gyakubiki-1 start end all)))
101 (delete-region start end)
103 (insert-and-inherit str) )
104 (and (featurep 'skk-cursor)
105 (skk-set-cursor-properly)) )
108 (defun skk-gyakubiki-message (start end &optional all)
109 "
\e$B%j!<%8%g%s$N4A;z!"Aw$j2>L>$rA4$F$R$i$,$J$KJQ498e!"%(%3!<$9$k!#
\e(B
110 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
111 \e$B$/$C$FI=<($9$k!#
\e(B
113 \e$BCfEg
\e(B -> {
\e$B$J$+$7$^
\e(B|
\e$B$J$+$8$^
\e(B}"
115 (let ((str (skk-gyakubiki-1 start end all)))
117 (if (string-match "^[
\e$B!!
\e(B\t]+" str)
118 ;;
\e$B@hF,$N6uGr$r<h$j=|$/!#
\e(B
119 (setq str (substring str (match-end 0))) ))
121 (and (featurep 'skk-cursor)
122 (skk-set-cursor-properly)) ))
126 (defun skk-gyakubiki-katakana-region (start end &optional all)
127 "
\e$B%j!<%8%g%s$N4A;z!"Aw$j2>L>$rA4$F%+%?%+%J$KJQ49$9$k!#
\e(B
128 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
129 \e$B$/$C$FI=<($9$k!#
\e(B
131 \e$BCfEg
\e(B -> {
\e$B%J%+%7%^
\e(B|
\e$B%J%+%8%^
\e(B}"
133 (let ((str (skk-gyakubiki-1 start end all 'katakana)))
134 (delete-region start end)
136 (insert-and-inherit str) )
137 (and (featurep 'skk-cursor)
138 (skk-set-cursor-properly)) )
141 (defun skk-gyakubiki-katakana-message (start end &optional all)
142 "
\e$B%j!<%8%g%s$N4A;z!"Aw$j2>L>$rA4$F%+%?%+%J$KJQ498e!"%(%3!<$9$k!#
\e(B
143 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
144 \e$B$/$C$FI=<($9$k!#
\e(B
146 \e$BCfEg
\e(B -> {
\e$B%J%+%7%^
\e(B|
\e$B%J%+%8%^
\e(B}"
148 (let ((str (skk-gyakubiki-1 start end all 'katakana)))
150 (if (string-match "^[
\e$B!!
\e(B\t]+" str)
151 ;;
\e$B@hF,$N6uGr$r<h$j=|$/!#
\e(B
152 (setq str (substring str (match-end 0))) ))
154 (and (featurep 'skk-cursor)
155 (skk-set-cursor-properly)) ))
157 (defun skk-gyakubiki-1 (start end all &optional katakana)
158 ;; skk-gyakubiki-*
\e$B$N%5%V%k!<%A%s!#
\e(B
159 ;;
\e$B%*%W%7%g%J%k0z?t$N
\e(B KATAKANA
\e$B$,
\e(B non-nil
\e$B$G$"$l$P!"%+%?%+%J$XJQ49$9$k!#
\e(B
160 (let ((arg (if katakana '("-JK") '("-JH"))))
161 (if skk-allow-spaces-newlines-and-tabs
162 (setq arg (cons "-c" arg)) )
164 (setq arg (cons "-p" arg)) )
165 (skk-kakasi-region start end arg)) )
168 (defun skk-hurigana-region (start end &optional all)
169 "
\e$B%j!<%8%g%s$N4A;z$KA4$F$U$j$,$J$rIU$1$k!#
\e(B
171 \"
\e$BJQ49A0$N4A;z$NOF$K
\e(B\" -> \"
\e$BJQ49A0
\e(B[
\e$B$X$s$+$s$^$(
\e(B]
\e$B$N4A;z
\e(B[
\e$B$+$s$8
\e(B]
\e$B$NOF
\e(B[
\e$B$o$-
\e(B]
\e$B$K
\e(B\"
173 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
174 \e$B$/$C$FI=<($9$k!#
\e(B
176 \e$BCfEg
\e(B -> {
\e$B$J$+$7$^
\e(B|
\e$B$J$+$8$^
\e(B}"
177 (interactive "*r\nP")
178 (let ((str (skk-hurigana-1 start end all)))
179 (delete-region start end)
181 (insert-and-inherit str) )
182 (and (featurep 'skk-cursor)
183 (skk-set-cursor-properly)) )
186 (defun skk-hurigana-message (start end &optional all)
187 "
\e$B%j!<%8%g%s$N4A;z$KA4$F$U$j$,$J$rIU$1!"%(%3!<$9$k!#
\e(B
189 \"
\e$BJQ49A0$N4A;z$NOF$K
\e(B\" -> \"
\e$BJQ49A0
\e(B[
\e$B$X$s$+$s$^$(
\e(B]
\e$B$N4A;z
\e(B[
\e$B$+$s$8
\e(B]
\e$B$NOF
\e(B[
\e$B$o$-
\e(B]
\e$B$K
\e(B\"
191 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
192 \e$B$/$C$FI=<($9$k!#
\e(B
194 \e$BCfEg
\e(B -> {
\e$B$J$+$7$^
\e(B|
\e$B$J$+$8$^
\e(B}"
196 (message "%s" (skk-hurigana-1 start end all))
197 (and (featurep 'skk-cursor)
198 (skk-set-cursor-properly)) )
201 (defun skk-hurigana-katakana-region (start end &optional all)
202 "
\e$B%j!<%8%g%s$N4A;z$KA4$F%U%j%,%J$rIU$1$k!#
\e(B
204 \"
\e$BJQ49A0$N4A;z$NOF$K
\e(B\" -> \"
\e$BJQ49A0
\e(B[
\e$B%X%s%+%s%^%(
\e(B]
\e$B$N4A;z
\e(B[
\e$B%+%s%8
\e(B]
\e$B$NOF
\e(B[
\e$B%o%-
\e(B]
\e$B$K
\e(B\"
206 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
207 \e$B$/$C$FI=<($9$k!#
\e(B
209 \e$BCfEg
\e(B -> {
\e$B%J%+%7%^
\e(B|
\e$B%J%+%8%^
\e(B}"
210 (interactive "*r\nP")
211 (let ((str (skk-hurigana-1 start end all 'katakana)))
212 (delete-region start end)
214 (insert-and-inherit str) )
215 (and (featurep 'skk-cursor)
216 (skk-set-cursor-properly)) )
219 (defun skk-hurigana-katakana-message (start end &optional all)
220 "
\e$B%j!<%8%g%s$N4A;z$KA4$F%U%j%,%J$rIU$1!"%(%3!<$9$k!#
\e(B
222 \"
\e$BJQ49A0$N4A;z$NOF$K
\e(B\" -> \"
\e$BJQ49A0
\e(B[
\e$B%X%s%+%s%^%(
\e(B]
\e$B$N4A;z
\e(B[
\e$B%+%s%8
\e(B]
\e$B$NOF
\e(B[
\e$B%o%-
\e(B]
\e$B$K
\e(B\"
224 \e$B%*%W%7%g%J%k0z?t$N
\e(B ALL
\e$B$,
\e(B non-nil
\e$B$J$i$P!"J#?t$N8uJd$,$"$k>l9g$O!"
\e(B\"{}\"
\e$B$G$/
\e(B
225 \e$B$/$C$FI=<($9$k!#
\e(B
227 \e$BCfEg
\e(B -> {
\e$B%J%+%7%^
\e(B|
\e$B%J%+%8%^
\e(B}"
229 (message "%s" (skk-hurigana-1 start end all 'katakana))
230 (and (featurep 'skk-cursor)
231 (skk-set-cursor-properly)) )
233 (defun skk-hurigana-1 (start end all &optional katakana)
234 ;; skk-hurigana-*
\e$B$N%5%V%k!<%A%s!#
\e(B
235 ;;
\e$B%*%W%7%g%J%k0z?t$N
\e(B KATAKANA
\e$B$,
\e(B non-nil
\e$B$G$"$l$P!"%+%?%+%J$XJQ49$9$k!#
\e(B
236 (let ((arg (if katakana '("-JK" "-f") '("-JH" "-f"))))
237 (if skk-allow-spaces-newlines-and-tabs
238 (setq arg (cons "-c" arg)) )
240 (setq arg (cons "-p" arg)) )
241 (skk-kakasi-region start end arg)) )
244 (defun skk-romaji-region (start end)
245 "
\e$B%j!<%8%g%s$N4A;z!"$R$i$,$J!"%+%?%+%J!"A41QJ8;z$rA4$F%m!<%^;z$KJQ49$9$k!#
\e(B
246 \e$BJQ49$K$O!"%X%\%s<0$rMQ$$$k!#
\e(B
248 \"
\e$B4A;z$+$J:.$8$jJ8$r%m!<%^;z$KJQ49
\e(B\"
249 -> \" kan'zi kana ma ziri bun' woro-ma zi ni hen'kan' \"
251 skk-romaji-*-by-hepburn
\e$B$,
\e(B nil
\e$B$G$"$l$P!"%m!<%^;z$X$NJQ49MM<0$r71Na<0$KJQ99$9
\e(B
252 \e$B$k!#Nc$($P!"
\e(B\"
\e$B$7
\e(B\"
\e$B$O%X%\%s<0$G$O
\e(B \"shi\"
\e$B$@$,!"71Na<0$G$O
\e(B \"si\"
\e$B$H$J$k!#
\e(B"
254 (let ((arg '("-Ha" "-Ka" "-Ja" "-Ea" "-ka" "-s"))
256 (if skk-allow-spaces-newlines-and-tabs
257 (setq arg (cons "-c" arg)) )
258 (if (not skk-romaji-*-by-hepburn)
259 (setq arg (cons "-rk" arg)) )
260 (setq str (skk-kakasi-region start end arg))
261 (delete-region start end)
263 (insert-and-inherit str) )
264 (and (featurep 'skk-cursor)
265 (skk-set-cursor-properly)) )
268 (defun skk-romaji-message (start end)
269 "
\e$B%j!<%8%g%s$N4A;z!"$R$i$,$J!"%+%?%+%J!"A41QJ8;z$rA4$F%m!<%^;z$KJQ49$7!"%(%3!<$9$k!#
\e(B
270 \e$BJQ49$K$O!"%X%\%s<0$rMQ$$$k!#
\e(B
272 \"
\e$B4A;z$+$J:.$8$jJ8$r%m!<%^;z$KJQ49
\e(B\"
273 -> \" kan'zi kana ma ziri bun' woro-ma zi ni hen'kan' \"
275 skk-romaji-*-by-hepburn
\e$B$,
\e(B nil
\e$B$G$"$l$P!"%m!<%^;z$X$NJQ49MM<0$r71Na<0$KJQ99$9
\e(B
276 \e$B$k!#Nc$($P!"
\e(B\"
\e$B$7
\e(B\"
\e$B$O%X%\%s<0$G$O
\e(B \"shi\"
\e$B$@$,!"71Na<0$G$O
\e(B \"si\"
\e$B$H$J$k!#
\e(B"
278 (let ((arg '("-Ha" "-Ka" "-Ja" "-Ea" "-ka" "-s")))
279 (if skk-allow-spaces-newlines-and-tabs
280 (setq arg (cons "-c" arg)) )
281 (if (not skk-romaji-*-by-hepburn)
282 (setq arg (cons "-rk" arg)) )
283 (message "%s" (skk-kakasi-region start end arg))
284 (and (featurep 'skk-cursor)
285 (skk-set-cursor-properly)) ))
287 (defun skk-kakasi-region (start end arglist)
288 ;; START
\e$B$H
\e(B END
\e$B4V$N%j!<%8%g%s$KBP$7
\e(B kakasi
\e$B%3%^%s%I$rE,MQ$9$k!#
\e(BARGLIST
\e$B$r
\e(B
289 ;; kakasi
\e$B$N0z?t$H$7$FEO$9!#
\e(Bkakasi
\e$B$N=PNO$rJV$9!#
\e(B
290 (or skk-use-kakasi skk-kakasi-command
291 (skk-error "KAKASI
\e$B$,%$%s%9%H!<%k$5$l$F$$$J$$$+!";HMQ$7$J$$@_Dj$K$J$C$F$$$^$9!#
\e(B"
292 "KAKASI was not installed, or skk-use-kakasi is nil" ) )
293 (let ((str (buffer-substring-no-properties start end)))
294 ;;
\e$BIQEY>pJs$r;H$C$F2?$+$*$b$7$m$$;H$$J}$,$G$-$k$+$J!)
\e(B
\e$B8=>u$G$O;H$C$F
\e(B
296 ;;(hindo-file (skk-make-temp-file "skkKKS"))
298 ;; current buffer
\e$B$,
\e(B read-only
\e$B$N$H$-$K
\e(B current buffer
\e$B$G
\e(B call-process
299 ;;
\e$B$r8F$V$H
\e(B destination buffer
\e$B$rJL$K;XDj$7$F$$$F$b%(%i!<$K$J$k$N$G!"%j!<
\e(B
300 ;;
\e$B%8%g%s$NJ8;zNs$r%o!<%/%P%C%U%!$KB`Hr$9$k!#
\e(B
302 (if (and (eq (apply 'call-process-region (point-min) (point)
304 ;; kakasi-2.2.5.hindo.diff
\e$B$,Ev$C$F$$$k$HI8=`%(%i!<
\e(B
305 ;;
\e$B=PNO$KIQEY>pJs$,=PNO$5$l$k!#
\e(B
306 'delete-original-text
307 ;;(list t hindo-file)
311 (> (buffer-size) 0) )
313 (skk-error "
\e$BJQ49$G$-$^$;$s
\e(B" "Cannot convert!") ))))
315 (run-hooks 'skk-kakasi-load-hook)
316 (provide 'skk-kakasi)
317 ;;; skk-kakasi.el ends here