Mercurial > emacs
diff lisp/composite.el @ 89651:65f1f8091f15
(auto-compose-chars): Don't do unnecessary save-exclusion and
save-restriction.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sun, 23 Nov 2003 07:33:48 +0000 |
parents | adfad852712a |
children | 91f056b94e70 |
line wrap: on
line diff
--- a/lisp/composite.el Sun Nov 23 07:32:11 2003 +0000 +++ b/lisp/composite.el Sun Nov 23 07:33:48 2003 +0000 @@ -391,12 +391,13 @@ ,@body (unless modified (restore-buffer-modified-p nil)))) - (put 'save-buffer-state 'lisp-indent-function 1) ;; Fixme: This makes bootstrapping fail with this error. ;; Symbol's function definition is void: eval-defun ;;(def-edebug-spec save-buffer-state let) ) +(put 'save-buffer-state 'lisp-indent-function 1) + (defun auto-compose-chars (pos string) "Compose characters after the buffer position POS. If STRING is non-nil, it is a string, and POS is an index into the string. @@ -404,38 +405,35 @@ This function is the default value of `auto-composition-function' (which see)." (save-buffer-state nil - (save-excursion - (save-restriction - (save-match-data - (let ((start pos) - (limit (next-single-property-change pos 'auto-composed string)) - ch func newpos) - (if limit - (setq limit (1+ limit)) - (setq limit (if string (length string) (point-max)))) - (catch 'tag - (if string - (while (< pos limit) - (setq ch (aref string pos) - pos (1+ pos)) - (if (= ch ?\n) - (throw 'tag nil)) - (setq func (aref composition-function-table ch)) - (if (and (functionp func) - (setq newpos (funcall func (1- pos) string)) - (> newpos pos)) - (setq pos newpos))) - (while (< pos limit) - (setq ch (char-after pos) - pos (1+ pos)) - (if (= ch ?\n) - (throw 'tag nil)) - (setq func (aref composition-function-table ch)) - (if (and (functionp func) - (setq newpos (funcall func (1- pos) string)) - (> newpos pos)) - (setq pos newpos))))) - (put-text-property start pos 'auto-composed t string))))))) + (save-match-data + (let ((start pos) + (limit (if string (length string) (point-max))) + ch func newpos) + (setq limit (or (text-property-any pos limit 'auto-composed t string) + limit)) + (catch 'tag + (if string + (while (< pos limit) + (setq ch (aref string pos)) + (if (= ch ?\n) + (throw 'tag nil)) + (setq func (aref composition-function-table ch)) + (if (and (functionp func) + (setq newpos (funcall func pos string)) + (> newpos pos)) + (setq pos newpos) + (setq pos (1+ pos)))) + (while (< pos limit) + (setq ch (char-after pos)) + (if (= ch ?\n) + (throw 'tag nil)) + (setq func (aref composition-function-table ch)) + (if (and (functionp func) + (setq newpos (funcall func pos string)) + (> newpos pos)) + (setq pos newpos) + (setq pos (1+ pos)))))) + (put-text-property start pos 'auto-composed t string))))) (setq auto-composition-function 'auto-compose-chars)