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

Re: how to setuo Mule-UCS



こんにちは。chiyu(あかば)といいます。
自己レスです。

JDKのnative2ascii.exeを持っていれば、
次のやりかたでもよいみたいです。
(ひょっとしたら、常識だったのかもしれない...)

環境は、Windows98(Japanese) + Meadow1.10 + Mule-UCS-0.62 + JDK1.1.1 です。

以上。よいお年を。

(define-process-argument-editing "/native2ascii\\.exe\\'"
  (lambda (x) (general-process-argument-editing-function x nil t)))

(defun mule-to-UE-buffer nil 
  "Convert multilingual characters in the current buffer into Unicode Escapes notation."
  (interactive "*")
  (save-excursion
    (save-restriction
      (mule-to-UE-buffer (point-min) (point-max)))))

(defun mule-to-UE-region (beg end)
  "Convert multilingual characters in the region into Unicode Escapes notation."
  (interactive "*r")
  (save-excursion
    (save-restriction
      (let ((coding-system-for-read 'latin-1) (coding-system-for-write 'utf-8))
        (call-process-region beg end "native2ascii.exe" t t t "-encoding UTF8")))))

(defun UE-to-mule-buffer nil
  "Convert the current buffer from Unicode Escapes notation into mule characters."
  (interactive "*")
  (save-excursion
    (save-restriction
      (UE-to-mule-buffer (point-min) (point-max))))

(defun UE-to-mule-region (beg end)
  "Convert the region from Unicode Escapes notation into mule characters.
Return the length of resulting text."
  (interactive "*r")
  (save-excursion
    (save-restriction
      (let ((coding-system-for-read 'utf-8) (coding-system-for-write 'latin-1))
        (call-process-region beg end "native2ascii.exe" t t t "-reverse -encoding UTF8")
        (- (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))