summaryrefslogtreecommitdiff
path: root/lisp/textmodes
diff options
context:
space:
mode:
authorMichal Nazarewicz <mina86@mina86.com>2014-06-05 16:37:45 +0200
committerMichal Nazarewicz <mina86@mina86.com>2014-06-05 16:37:45 +0200
commitaf9a3b28c0ca250ed245bd54c8737792916fe4c6 (patch)
treee6547ebc6b75c57699cde2c3a8e07066ab73d110 /lisp/textmodes
parenta1d799c25e4ad96dd2303ef2daa6cb51b5a0fe01 (diff)
downloademacs-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.el40
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.