[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [22.0.95] mini buffer で漢字変換ができない
In article <E1HUjBZ-0000IB-Kx@xxxxxxxxxxxxxxx>, Kenichi Handa <handa@xxxxxxxx> writes:
> > Emacs 23.0.0 では,漢字変換が出来ず,mini buffer に 「1つも候補を作れませ
> > んでした」というエラーが表示されます.
> tamago はコード変換 (coding-system fixed-euc-jp) の部分で
> emacs の内部文字コードに依存した部分があるため、上手くいかな
> いのだと思います。今ちょっと忙しいので来週にでも見てみます。
tamago に以下のパッチをあてたものを Emacs 23 で試してもらえま
せんか。
---
半田@AIST
diff -c /project/mule/tamago/egg-com.el /project/mule/tmp/tamago/egg-com.el
*** /project/mule/tamago/egg-com.el Sun Jan 28 03:53:13 2001
--- /project/mule/tmp/tamago/egg-com.el Mon Mar 26 10:10:26 2007
***************
*** 44,105 ****
;; Japanese
! (eval-and-compile
! (define-ccl-program ccl-decode-fixed-euc-jp
! `(2
! ((r2 = ,(charset-id 'japanese-jisx0208))
! (r3 = ,(charset-id 'japanese-jisx0212))
! (r4 = ,(charset-id 'katakana-jisx0201))
! (read r0)
! (loop
! (read r1)
! (if (r0 < ?\x80)
! ((r0 = r1)
! (if (r1 < ?\x80)
! (write-read-repeat r0))
! (write r4)
! (write-read-repeat r0))
! ((if (r1 > ?\x80)
! ((write r2 r0)
! (r0 = r1)
! (write-read-repeat r0))
! ((write r3 r0)
! (r0 = (r1 | ?\x80))
! (write-read-repeat r0)))))))))
!
! (define-ccl-program ccl-encode-fixed-euc-jp
! `(2
! ((read r0)
! (loop
! (if (r0 == ,(charset-id 'latin-jisx0201)) ; Unify
! ((read r0)
! (r0 &= ?\x7f)))
! (if (r0 < ?\x80) ;G0
! ((write 0)
! (write-read-repeat r0)))
! (r6 = (r0 == ,(charset-id 'japanese-jisx0208)))
! (r6 |= (r0 == ,(charset-id 'japanese-jisx0208-1978)))
! (if r6 ;G1
! ((read r0)
! (write r0)
! (read r0)
! (write-read-repeat r0)))
! (if (r0 == ,(charset-id 'katakana-jisx0201)) ;G2
! ((read r0)
! (write 0)
! (write-read-repeat r0)))
! (if (r0 == ,(charset-id 'japanese-jisx0212)) ;G3
! ((read r0)
! (write r0)
! (read r0)
! (r0 &= ?\x7f)
! (write-read-repeat r0)))
! (read r0)
! (repeat)))))
! )
!
! (make-coding-system 'fixed-euc-jp 4 ?W "Coding System for fixed EUC Japanese"
! (cons ccl-decode-fixed-euc-jp ccl-encode-fixed-euc-jp))
;; Korean
--- 44,110 ----
;; Japanese
! (defun fixed-euc-jp-pre-write-conversion (from to)
! (let ((work-buf (generate-new-buffer " *temp*"))
! ch)
! (if (stringp from)
! (encode-coding-string from 'euc-japan nil work-buf)
! (encode-coding-region from to 'euc-japan work-buf))
! (set-buffer work-buf)
! (set-buffer-multibyte nil)
! (goto-char (point-min))
! (while (not (eobp))
! (setq ch (following-char))
! (cond ((= ch #x8E) ; SS2 for JISX0201-kana
! (delete-char 1) ; SS2 BYTE -> 0 BYTE&0x7F
! (insert 0)
! (forward-char 1))
! ((= ch #x8F) ; SS3 for JISX0212
! (delete-char 1) ; SS3 BYTE1 BYTE2 -> BYTE1 BYTE2&0x7F
! (forward-char 1)
! (setq ch (following-char))
! (delete-char 1)
! (insert (logand ch #x7F)))
! ((>= ch #xA0) ; JISX0208
! (forward-char 2))
! (t ; ASCII
! (insert 0) ; BYTE -> 0 BYTE
! (forward-char 1))))))
!
! (defun fixed-euc-jp-post-read-conversion (len)
! (let ((str (string-as-unibyte (buffer-substring (point) (+ (point) len))))
! (pos (point))
! i ch1 ch2)
! (delete-region (point) (+ (point) len))
! (setq i 0)
! (while (< i len)
! (setq ch1 (aref str i))
! (setq ch2 (aref str (1+ i)))
! (cond ((>= ch1 #x80)
! (if (>= ch2 #x80)
! (setq ch1 ; JISX0208
! (decode-char 'japanese-jisx0208
! (logior (lsh (logand ch1 #x7F) 8)
! (logand ch2 #x7F))))
! (setq ch1 ; JISX0212
! (decode-char 'japanese-jisx0212
! (logior (lsh (logand ch1 #x7F) 8) ch2)))))
! (t
! (if (>= ch2 #x80)
! (setq ch1 ; JISX0201-kana
! (decode-char 'katakana-jisx0201 (logand ch2 #x7F)))
! (setq ch1 ch2))))
! (insert ch1)
! (setq i (+ i 2)))
! (prog1 (- (point) pos)
! (goto-char pos))))
!
! (define-coding-system 'fixed-euc-jp "Coding System for fixed EUC Japanese"
! :mnemonic ?W
! :coding-type 'raw-text
! :charset-list '(ascii japanese-jisx0208 katakana-jisx0201 japanese-jisx0212)
! :pre-write-conversion 'fixed-euc-jp-pre-write-conversion
! :post-read-conversion 'fixed-euc-jp-post-read-conversion)
;; Korean
Diff finished. Mon Mar 26 10:10:35 2007