[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