From: Kenichi Handa <handa@m17n.org>
Date: Fri, 26 Sep 2003 11:24:10 +0000 (+0000)
Subject: (auto-compose-region): New function.
X-Git-Tag: emacs-pretest-23.0.90~8295^2~1820
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bd4a85b9ffa6c2f705101eaeb7df9d316198114b;p=emacs.git

(auto-compose-region): New function.
---

diff --git a/lisp/composite.el b/lisp/composite.el
index 3db2ff09644..ad1a37f69cb 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -456,6 +456,32 @@ With arg, enable it iff arg is positive."
       (save-restriction
 	(widen)
 	(put-text-property (point-min) (point-max) 'auto-composed nil)))))
+
+(defun auto-compose-region (from to)
+  "Force automatic character composition on the region FROM and TO."
+  (save-excursion
+    (if (get-text-property from 'auto-composed)
+	(setq from (next-single-property-change from 'auto-composed nil to)))
+    (goto-char from)
+    (let ((modified-p (buffer-modified-p))
+	  (inhibit-read-only '(composition auto-composed))
+	  (stop (next-single-property-change (point) 'auto-composed nil to)))
+      (while (< (point) to)
+	(if (= (point) stop)
+	    (progn
+	      (goto-char (next-single-property-change (point)
+						      'auto-composed nil to))
+	      (setq stop (next-single-property-change (point)
+						      'auto-composed nil to)))
+	  (let ((func (aref composition-function-table (following-char)))
+		(pos (point)))
+	    (if (functionp func)
+		(goto-char (funcall func (point) nil)))
+	    (if (<= (point) pos)
+		(forward-char 1)))))
+      (put-text-property from to 'auto-composed t)
+      (set-buffer-modified-p modified-p))))
+
 
 ;;; The following codes are only for backward compatibility with Emacs
 ;;; 20.4 and earlier.