[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: how to setuo Mule-UCS
- X-ml-count: 1784
- Subject: Re: how to setuo Mule-UCS
- From: chiyu <ma11092c@xxxxxxxxxxxxxxxxx>
- Date: 26 Dec 1999 18:45:39 +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@ふくおか、といいます。
中国語の hz という文字コードの設定
c:/meadow/1.10/lisp/language/ 内の china-util.el と chinese.el
を眺めていたら、JAVAのユニコードエスケープを
新しい文字コードとして定義する方法がわかりました。
以下のelispをロードして、
C-x C-m c java-unicode-escapes <RETURN> C-x C-f ファイル名 <RETURN>
で開けるはずです。
環境は、Meadow1.10 + Mule-UCS-0.62 です。
以上。失礼しました。
chiyu(あかば のぶゆき)
;以下、cgreek-emacs20、chinese.el、china-util.elを参考にした。
(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.
Return the length of resulting text."
(interactive "*")
(save-excursion
(save-restriction
(let (ucs-number)
(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を探す。
(setq ucs-number (string-to-number
(buffer-substring (match-beginning 1) (match-end 1)) 16))
(replace-match "")
(insert-char (ucs-to-char ucs-number) 1))) ;それをMule内部の文字に変換
(- (point-max) (point-min))))) ;変換結果の文字長を返り値にする。重要!!!
(make-coding-system
'java-unicode-escapes 0 ?U
"JAVA Unicode Escapes"
nil
'((safe-charsets . t)
(post-read-conversion . post-read-decode-java-unicode-escapes)
(pre-write-conversion . pre-write-encode-java-unicode-escapes)))
(defun post-read-decode-java-unicode-escapes (len)
(let ((pos (point))
(buffer-modified-p (buffer-modified-p))
last-coding-system-used)
(prog1
(UE-to-mule-region pos (+ pos len))
(set-buffer-modified-p buffer-modified-p))))
(defun pre-write-encode-java-unicode-escapes (from to)
(let ((buf (current-buffer)))
(set-buffer (generate-new-buffer " *temp*"))
(if (stringp from)
(insert from)
(insert-buffer-substring buf from to))
(let (last-coding-system-used)
(mule-to-UE-region 1 (point-max)))
nil))