[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: 外字エディタで作成した文字の入力/表示



矢木です。

gfg04172@xxxxxxxxx writes:
>Content-Type: Text/Plain; charset=iso-2022-jp-3

になってたので全文引用しておきます。

> すばやい回答ありがとうございます。
>
>
> Mule-UCSを組み込んでjisx0213の文字を読めるようにしました。
>...site-lisp/Mule-UCS/lisp/jisx0213/ujisx0213.el の中の文字がちゃんと
>読めます。
>
> しかし (set-keyboard-coding-system 'shift_jisx0213) を実行すると
>"Wrong type argument: number-or-marker-p, (255)"
>と出て、入力する文字がすべて文字化けしてしまいます。
> その代わり外字を入力しても"Invalid Shift JIS code:f040"のエラーが出
>なくなり、文字化けしているとはいえ入力はできるようになりました。
>
> ちなみに表示の方は、コード f040 や f041 の文字が
>...site-lisp/Mule-UCS/lisp/jisx0213/ujisx0213.el の中の
>"〓"や"〓"の文字となって表示されます。(豆腐になる人、ごめんなさい)
>
>------------ujisx0213.el------------------
>(defvar
>  jis-x-0213-2000-2-vs-unicode-assoc
>  '(assoc
>    (char-1 . ucs-generic)
>    (
>     ;;(?〓 . ?\x(AAA1)) ; 2-1-1          ←こことか
>     (?〓 . ?\x4E02) ; 2-1-2              ←こことか
>
>
> 現在試行錯誤の途中なので、とりあえず中間報告させていただきました。
>
>
>--
>椎橋真希人

meadow-1.15 の encoded-kb.el がバグっているからです。
末尾に最低限のパッチを付けておきます。

はしご高を入力すると[馬是]になるのが正しい化け方です。
これを更に文字化けさせてはしご高を表示させるには次の様にします。
ただし jisx0213 の本来の文字は表示できなくなります。

(let* ((fontset-name "default-fontset") ;; 使うフォントセット名
       (size (aref (fontset-info fontset-name) 1))
       (lfl (list (w32-change-logfont-height
                   '(w32-logfont "MS ゴシック"
                                 0 0 400 0 nil nil nil 128 1 3 49)
                   (- size)))))
  (mapcar
   (lambda (charset)
     (let ((font-name (format "%s-dummy-%s" fontset-name charset)))
       (or (member font-name (w32-font-list))
           (w32-automatic-font-regist
            font-name lfl 'shift-jisx0213-font-encoder))
       (set-fontset-font fontset-name charset font-name)))
   '(japanese-jisx0213-1 japanese-jisx0213-2)))

おわり

diff -u encoded-kb.el.org encoded-kb.el
--- encoded-kb.el.org	Mon Apr 23 22:33:31 2001
+++ encoded-kb.el	Mon Jun 16 11:22:55 2003
@@ -272,10 +272,14 @@
 (defun encoded-kbd-self-insert-ccl ()
   (interactive)
   (let ((str (char-to-string last-command-char))
-	(coding (keyboard-coding-system)))
-    (setq str (decode-coding-string str coding))
+	(ccl (car (aref (coding-system-spec (keyboard-coding-system)) 4)))
+	(vec [nil nil nil nil nil nil nil nil nil])
+	result)
+    (while (= (length (setq result (ccl-execute-on-string ccl vec str t))) 0)
+      (dotimes (i 9) (aset vec i nil))
+      (setq str (format "%s%c" str (read-char-exclusive))))
     (setq unread-command-events
-	  (append (string-to-list str) unread-command-events))))
+	  (append result unread-command-events))))
 
 (defun encoded-kbd-setup-keymap (coding)
   ;; At first, reset the keymap.
@@ -312,7 +316,7 @@
 
    ((eq encoded-kbd-coding 'ccl)
     (let ((valid-codes (or (coding-system-get coding 'valid-codes)
-			   '((128 255))))
+			   '((128 . 255))))
 	  elt from to)
       (while valid-codes
 	(setq elt (car valid-codes) valid-codes (cdr valid-codes))