diff lisp/mule/chinese.el @ 70:131b0175ea99 r20-0b30

Import from CVS: tag r20-0b30
author cvs
date Mon, 13 Aug 2007 09:02:59 +0200
parents
children 3bb7ccffb0c0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/mule/chinese.el	Mon Aug 13 09:02:59 2007 +0200
@@ -0,0 +1,119 @@
+;;; chinese.el --- Chinese specific setup for XEmacs/Mule (not pre-loaded).
+
+;; Copyright (C) 1992 Free Software Foundation, Inc.
+
+;; This file is part of XEmacs.
+
+;; XEmacs is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; XEmacs is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with XEmacs; see the file COPYING.  If not, write to the 
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Synched up with: Mule 2.3.
+
+;;; 92.3.5   Created for Mule Ver.0.9.0 by K.Handa <handa@etl.go.jp>
+
+;; #### This does not work yet in XEmacs.
+
+;; Hz/ZW encoding stuffs
+(defvar hz2gb-gb-designation "\e$A")
+(defvar hz2gb-ascii-designation "\e(B")
+(defvar hz2gb-line-continuation nil)
+
+;;;###autoload
+(defun hz2gb-buffer ()
+  "Decode the text in the current buffer, assumed to be HZ/ZW-encoded."
+  (interactive)
+  (hz2gb-region (point-min) (point-max)))	
+
+;;;###autoload
+(defun hz2gb-region (beg end)
+  "Decode HZ/ZW-encoded text between point and mark.
+When called from a program, expects two arguments,
+positions (integers or markers) specifying the stretch to be decoded."
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      ;; "~\n" -> "\n"
+      (goto-char (point-min))
+      (while (search-forward "~" nil t)
+	(if (= (following-char) ?\n) (delete-char -1))
+	(if (not (eobp)) (forward-char 1)))
+      ;; "^zW...\n" -> Chinese text
+      ;; "~{...~}"  -> Chinese Text
+      (goto-char (point-min))
+      (let (chinese-found)
+	(while (re-search-forward "~{\\|^zW" nil t)
+	  (if (= (char-after (match-beginning 0)) ?z)
+	      ;; ZW -> junet
+	      (progn
+		(delete-char -2)
+		(insert hz2gb-gb-designation)
+		(end-of-line)
+		(insert hz2gb-ascii-designation))
+	    ;; Hz -> junet
+	    (delete-char -2)
+	    (insert hz2gb-gb-designation)
+	    (if (re-search-forward "\\(~}\\)\\|\\(\n\\)" nil t)
+		(if (match-beginning 1)
+		    (replace-match hz2gb-ascii-designation)
+		  (if (not hz2gb-line-continuation)
+		      (progn
+			(goto-char (match-beginning 2))
+			(insert hz2gb-ascii-designation))))))
+	  (setq chinese-found t))
+	(if chinese-found
+	    (decode-coding-region (point-min) (point-max) 'junet)))
+      ;; "~~" -> "~"
+      (goto-char (point-min))
+      (while (search-forward "~~" nil t) (delete-char -1)))))
+
+;;;###autoload
+(defun gb2hz-buffer ()
+  "Convert whole text in the current buffer
+from mule internal encoding to HZ encoding."
+  (interactive) (gb2hz-region (point-min) (point-max)))	
+
+;;;###autoload
+(defun gb2hz-region (beg end)
+  "Encode text between point and mark in HZ/ZW encoding.
+When called from a program, expects two arguments,
+positions (integers or markers) specifying the stretch to be encoded."
+  (interactive "r")
+  (save-excursion
+    (save-restriction
+      (narrow-to-region beg end)
+      ;; "~" -> "~~"
+      (goto-char (point-min))
+      (while (search-forward "~" nil t)	(insert ?~))
+      ;; Chinese text -> "~{...~}"
+      (goto-char (point-min))
+      (if (re-search-forward "\\cc" nil t)
+	  (let (p)
+	    (goto-char (match-beginning 0))
+	    (setq p (point))
+	    (encode-coding-region p (point-max) 'junet)
+	    (goto-char p)
+	    (while (search-forward hz2gb-gb-designation nil t)
+	      (delete-char -3)
+	      (insert "~{"))
+	    (goto-char p)
+	    (while (search-forward hz2gb-ascii-designation nil t)
+	      (delete-char -3)
+	      (insert "~}"))
+	    (goto-char p)))
+      )))
+
+;;;
+(provide 'chinese)