diff options
author | Michal Nazarewicz <mina86@mina86.com> | 2014-06-05 16:37:45 +0200 |
---|---|---|
committer | Michal Nazarewicz <mina86@mina86.com> | 2014-06-05 16:37:45 +0200 |
commit | af9a3b28c0ca250ed245bd54c8737792916fe4c6 (patch) | |
tree | e6547ebc6b75c57699cde2c3a8e07066ab73d110 /lisp/textmodes | |
parent | a1d799c25e4ad96dd2303ef2daa6cb51b5a0fe01 (diff) | |
download | emacs-af9a3b28c0ca250ed245bd54c8737792916fe4c6.tar.gz |
tildify.el: Fix end-regex building in `tildify-find-env'
* lisp/textmodes/tildify.el (tildify-find-env): The
`tildify-ignored-environments-alist' allows the end-regex
to be provided not as a static string but mix of strings and
indexes of groups matched the begin-regex. For example, the
“\verb!…!” TeX-command (where “!” is an arbitrary character)
is handled using:
("\\\\verb\\*?\\(.\\)" . (1))
In the same way, the following should be supported as well:
("open-\\(.\\)" . ("end-" 1))
However the tildify-find-env function fails at
(concat result
(if (stringp (setq aux (car expression)))
expression ; BUG: expression is a list
(regexp-quote (match-string aux))))
where the string part is handled incorrectly.
The most trivial fix would be to replace `expression'
in the true-part of the if-statement with `aux', but
instead, this commit optimises `tildify-find-env' by
changing it to use `mapconcat' rather than open-coded
while-loop.
* tests/automated/tildify-tests.el (tildify-test-find-env-end-re-bug):
New test validating fix to the above bug.
Diffstat (limited to 'lisp/textmodes')
-rw-r--r-- | lisp/textmodes/tildify.el | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el index 339f9006cf2..7e4b39b615a 100644 --- a/lisp/textmodes/tildify.el +++ b/lisp/textmodes/tildify.el @@ -3,7 +3,7 @@ ;; Copyright (C) 1997-2014 Free Software Foundation, Inc. ;; Author: Milan Zamazal <pdm@zamazal.org> -;; Version: 4.5.1 +;; Version: 4.5.2 ;; Keywords: text, TeX, SGML, wp ;; This file is part of GNU Emacs. @@ -270,27 +270,23 @@ won't be prompted for confirmation of each substitution." Return regexp for the end of the environment or nil if no environment was found." ;; Find environment - (if (re-search-forward regexp nil t) - ;; Build end-env regexp - (let ((match (match-string 0)) - (alist (tildify-mode-alist tildify-ignored-environments-alist)) - expression) - (save-match-data - (while (not (eq (string-match (caar alist) match) 0)) - (setq alist (cdr alist)))) - (if (stringp (setq expression (cdar alist))) - expression - (let ((result "") - aux) - (while expression - (setq result (concat result - (if (stringp (setq aux (car expression))) - expression - (regexp-quote (match-string aux))))) - (setq expression (cdr expression))) - result))) - ;; Return nil if not found - nil)) + (when (re-search-forward regexp nil t) + ;; Build end-env regexp + (let ((match (match-string 0)) + (alist (tildify-mode-alist tildify-ignored-environments-alist))) + (save-match-data + (while (not (eq (string-match (caar alist) match) 0)) + (setq alist (cdr alist)))) + (let ((expression (cdar alist))) + (if (stringp expression) + expression + (mapconcat + (lambda (expr) + (if (stringp expr) + expr + (regexp-quote (match-string expr)))) + expression + "")))))) (defun tildify-tildify (beg end ask) "Add tilde characters in the region between BEG and END. |