changeset 57645:24ec89bbe7bc

(translate-region): Implement it in Lisp as a front end of translate-region-internal.
author Kenichi Handa <handa@m17n.org>
date Fri, 22 Oct 2004 13:10:23 +0000
parents c0f2bdd90b5d
children 3611af22c464
files lisp/international/mule.el
diffstat 1 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/mule.el	Fri Oct 22 13:09:39 2004 +0000
+++ b/lisp/international/mule.el	Fri Oct 22 13:10:23 2004 +0000
@@ -2015,6 +2015,34 @@
     (put symbol 'translation-table-id id)
     id))
 
+(defun translate-region (start end table)
+  "From START to END, translate characters according to TABLE.
+TABLE is a string or a char-table.
+If TABLE is a string, the Nth character in it is the mapping
+for the character with code N.
+If TABLE is a char-table, the element for character N is the mapping
+for the character with code N.
+It returns the number of characters changed."
+  (interactive
+   (list (region-beginning)
+	 (region-end)
+	 (let (table l)
+	   (dotimes (i (length translation-table-vector))
+	     (if (consp (aref translation-table-vector i))
+		 (push (list (symbol-name
+			      (car (aref translation-table-vector i)))) l)))
+	   (if (not l)
+	       (error "No translation table defined"))
+	   (while (not table)
+	     (setq table (completing-read "Translation table: " l nil t)))
+	   (intern table))))
+  (if (symbolp table)
+      (let ((val (get table 'translation-table)))
+	(or (char-table-p val)
+	    (error "Invalid translation table name: %s" table))
+	(setq table val)))
+  (translate-region-internal start end table))
+
 (put 'with-category-table 'lisp-indent-function 1)
 
 (defmacro with-category-table (table &rest body)