[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: how to setuo Mule-UCS
- X-ml-count: 1746
- Subject: Re: how to setuo Mule-UCS
- From: chiyu <ma11092c@xxxxxxxxxxxxxxxxx>
- Date: 13 Dec 1999 21:39:16 +0900
- User-agent: Nana-gnus/6.13.9 SEMI/1.13.5 (Meihō) FLIM/1.13.2 (Kasanui) Emacs/20.4 (i386-*-windows98.1998) MULE/4.1 (AOI) Meadow/1.10 (TSUYU)
こんにちは。chiyu(AKABA Nobuyuki)といいます。
"T.Fukagawa" <bruce@xxxxxxxxxx> writes:
> 小島> これを「編集する」する意味があるかどうかはわかりませんが、ファイ
> 小島> ルを開いて、Unicode表を片手に、そのままコードを打てば「編集」もで
> 小島> きます。たとえば、\u8a9e を \u4eba に変えれば「日本人」となるはず
> 小島> です。native2ascii -reverse INPUTFILE OUTPUTFILE すれば確認できる
> 小島> と思います。Mule-UCS は必要ありません。
>
> 小島> 以上
>
> 小島> でも、これは深川さんの意図するものじゃあないですよね?
>
> はい。さすがに、それは辛いです (^^;
JavaのUnicode Escapes(\uxxxx)をMule-UCSを使って
新しい文字コードとして定義したかったのですが、
自分にはまだそこまでの力はないので、
cgreek-emacs20 (古典ギリシア語環境)
http://www.etl.go.jp/etl/divisions/~ntakahas/npx/
のTeX形式での入出力の部分を参考にして、
次のような設定をしてみました。
Meadow1.10 + Mule-UCS-0.62を使用しました。
実は、次のような不具合があります。
下のコードをevaluateした後、はじめて(既存の).javaファイルを
find-fileすると、
File mode specification error: (args-out-of-range 0 3)
というエラーがエコーエリアに表示され、
バッファ内もUnicode Escapesがdecodeされていません。
そして、もう一度find-fileすると、以後は正しくdecodeされます。
java-mode-hookの設定に問題がある、ということは
わかるのですが、ではいったいどうしたらいいのでしょうか???
どなたかご教授お願いします....。
(defun mule-to-UE-region (beg end)
"Convert multilingual characters in the region into Unicode Escapes notation."
(interactive "*r")
(save-excursion
(save-restriction
(narrow-to-region beg end) ;ナローイング
(mule-to-UE-buffer))))
(defun mule-to-UE-buffer nil ;Mule-UCS-0.62/lisp/un-define.el内のchar-to-ucsを使用
"Convert multilingual characters in the current buffer into Unicode Escapes notation."
(interactive "*")
(save-excursion
(save-restriction
(let (ch ch-id)
(goto-char (point-min)) ;バッファの先頭へ
(while (not (eobp)) ;バッファの最後でない間、
(setq ch (following-char)) ;ポイント位置の文字コード
(setq ch-id (nth 0 (split-char ch))) ;その文字のleading-charcter
(if (not (eq 'ascii ch-id)) ;その文字がASCIIでなければ、
(progn
(insert (concat "\\u" (format "%04x" (char-to-ucs ch))))
;Unicode番号に変換
(delete-char 1)) ;その文字自身(ch)を削除
(forward-char 1))))))) ;ASCIIな場合は、そのまま次の文字へ。
(defun UE-to-mule-region (beg end)
"Convert the region from Unicode Escapes notation into mule characters."
(interactive "*r")
(save-excursion
(save-restriction
(narrow-to-region beg end) ;ナローイング
(UE-to-mule-buffer))))
(defun UE-to-mule-buffer nil ;Mule-UCS-0.62/lisp/un-define.el内のucs-to-charを使用
"Convert the current buffer from Unicode Escapes notation into mule characters."
(interactive "*")
(save-excursion
(save-restriction
(goto-char (point-min)) ;バッファの先頭へ。
(while (re-search-forward "\\\\u\\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]\\)" nil t)
;JavaのUnicode Escapesを探す。
(replace-match (char-to-string
(ucs-to-char (string-to-number
(buffer-substring (match-beginning 1) (match-end 1))
16)))))))) ;それをMule内部の文字に変換
(defun java-find-file (filename &optional wildcards)
"Do function find-file then do function UE-to-mule-buffer."
(interactive "FFind file: \np")
(find-file filename wildcards)
(save-excursion ;find-fileをした後で
(save-restriction
(UE-to-mule-buffer))) ;バッファ内のUnicode EscapesをMule内部の文字に変換
(set-buffer-modified-p nil)) ;バッファの修正フラグを「修正されてない」にする。
(defun java-save-buffer (&optional args)
"Do funciton save-buffer after do function mule-to-UE-buffer."
(interactive "p")
(save-excursion
(save-restriction
(widen) ;ナローイングを解く
(mule-to-UE-buffer) ;Unicode Escapesに変換した後で、
(save-buffer args) ;save-bufferをする
(UE-to-mule-buffer))) ;バッファ内のUnicode Escapesを元の文字に戻す。
(set-buffer-modified-p nil)) ;バッファの修正フラグを「修正されてない」にする。
(defun java-write-file (filename &optional confirm)
"Do function write-file after do function mule-to-UE-buffer"
(interactive
(list (if buffer-file-name
(read-file-name "Write file: "
nil nil nil nil)
(read-file-name "Write file: " default-directory
(expand-file-name
(file-name-nondirectory (buffer-name))
default-directory)
nil nil))
(not current-prefix-arg))) ;ここまでは、write-fileの定義をそのまま使っている。
(save-excursion
(save-restriction
(widen) ;ナローイングを解く
(mule-to-UE-buffer) ;Unicode Escapesに変換した後で、
(write-file filename confirm) ;write-fileをする
(UE-to-mule-buffer))); バッファ内のUnicode Escapesを元の文字に戻す。
(set-buffer-modified-p nil)) ;バッファの修正フラグを「修正されてない」にする。
(add-hook 'java-mode-hook ;この設定で正しいの???
(lambda () ;java-modeでファイルを開いた後、
(UE-to-mule-buffer) ;バッファ内のUnicode Escapesを文字に変換する。
(goto-char (point-min)) ;バッファの先頭へ移動。
(set-buffer-modified-p nil) ;バッファの修正フラグを変更。
(substitute-key-definition ;C-x C-s の置き換え
'save-buffer 'java-save-buffer java-mode-map global-map)
(substitute-key-definition ;C-x C-w の置き換え
'write-file 'java-write-file java-mode-map global-map)))
以上。おげんきで。