aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Nazarewicz2014-06-05 16:37:45 +0200
committerMichal Nazarewicz2014-06-05 16:37:45 +0200
commitaf9a3b28c0ca250ed245bd54c8737792916fe4c6 (patch)
treee6547ebc6b75c57699cde2c3a8e07066ab73d110
parenta1d799c25e4ad96dd2303ef2daa6cb51b5a0fe01 (diff)
downloademacs-af9a3b28c0ca250ed245bd54c8737792916fe4c6.tar.gz
emacs-af9a3b28c0ca250ed245bd54c8737792916fe4c6.zip
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.
-rw-r--r--lisp/ChangeLog31
-rw-r--r--lisp/textmodes/tildify.el40
-rw-r--r--test/ChangeLog6
-rw-r--r--test/automated/tildify-tests.el11
4 files changed, 66 insertions, 22 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f5273a66659..7bbaf642d3c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,34 @@
12014-06-05 Michal Nazarewicz <mina86@mina86.com>
2
3 * textmodes/tildify.el (tildify-find-env): Fix end-regex building
4 in `tildify-find-env'
5
6 The `tildify-ignored-environments-alist' allows the end-regex to
7 be provided not as a static string but mix of strings and indexes
8 of groups matched the begin-regex. For example, the “\verb!…!”
9 TeX-command (where “!” is an arbitrary character) is handled
10 using:
11
12 ("\\\\verb\\*?\\(.\\)" . (1))
13
14 In the same way, the following should be supported as well:
15
16 ("open-\\(.\\)" . ("end-" 1))
17
18 However the tildify-find-env function fails at
19
20 (concat result
21 (if (stringp (setq aux (car expression)))
22 expression ; BUG: expression is a list
23 (regexp-quote (match-string aux))))
24
25 where the string part is handled incorrectly.
26
27 The most trivial fix would be to replace `expression' in the
28 true-part of the if-statement with `aux', but instead, this commit
29 optimises `tildify-find-env' by changing it to use `mapconcat'
30 rather than open-coded while-loop.
31
12014-06-05 Mario Lang <mlang@delysid.org> 322014-06-05 Mario Lang <mlang@delysid.org>
2 33
3 * woman.el (woman-mapcan): Remove. 34 * woman.el (woman-mapcan): Remove.
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 @@
3;; Copyright (C) 1997-2014 Free Software Foundation, Inc. 3;; Copyright (C) 1997-2014 Free Software Foundation, Inc.
4 4
5;; Author: Milan Zamazal <pdm@zamazal.org> 5;; Author: Milan Zamazal <pdm@zamazal.org>
6;; Version: 4.5.1 6;; Version: 4.5.2
7;; Keywords: text, TeX, SGML, wp 7;; Keywords: text, TeX, SGML, wp
8 8
9;; This file is part of GNU Emacs. 9;; This file is part of GNU Emacs.
@@ -270,27 +270,23 @@ won't be prompted for confirmation of each substitution."
270Return regexp for the end of the environment or nil if no environment was 270Return regexp for the end of the environment or nil if no environment was
271found." 271found."
272 ;; Find environment 272 ;; Find environment
273 (if (re-search-forward regexp nil t) 273 (when (re-search-forward regexp nil t)
274 ;; Build end-env regexp 274 ;; Build end-env regexp
275 (let ((match (match-string 0)) 275 (let ((match (match-string 0))
276 (alist (tildify-mode-alist tildify-ignored-environments-alist)) 276 (alist (tildify-mode-alist tildify-ignored-environments-alist)))
277 expression) 277 (save-match-data
278 (save-match-data 278 (while (not (eq (string-match (caar alist) match) 0))
279 (while (not (eq (string-match (caar alist) match) 0)) 279 (setq alist (cdr alist))))
280 (setq alist (cdr alist)))) 280 (let ((expression (cdar alist)))
281 (if (stringp (setq expression (cdar alist))) 281 (if (stringp expression)
282 expression 282 expression
283 (let ((result "") 283 (mapconcat
284 aux) 284 (lambda (expr)
285 (while expression 285 (if (stringp expr)
286 (setq result (concat result 286 expr
287 (if (stringp (setq aux (car expression))) 287 (regexp-quote (match-string expr))))
288 expression 288 expression
289 (regexp-quote (match-string aux))))) 289 ""))))))
290 (setq expression (cdr expression)))
291 result)))
292 ;; Return nil if not found
293 nil))
294 290
295(defun tildify-tildify (beg end ask) 291(defun tildify-tildify (beg end ask)
296 "Add tilde characters in the region between BEG and END. 292 "Add tilde characters in the region between BEG and END.
diff --git a/test/ChangeLog b/test/ChangeLog
index b6b3dd379a7..db32aae578b 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
12014-06-05 Michal Nazarewicz <mina86@mina86.com>
2
3 * automated/tildify-tests.el (tildify-test-find-env-end-re-bug): New
4 test checking end-regex building in `tildify-find-env' function when
5 integers (denoting capture groups) and strings are mixed together.
6
12014-06-02 Michael Albinus <michael.albinus@gmx.de> 72014-06-02 Michael Albinus <michael.albinus@gmx.de>
2 8
3 * automated/tramp-tests.el (tramp-remote-process-environment): Declare. 9 * automated/tramp-tests.el (tramp-remote-process-environment): Declare.
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index 4223029f626..25e9f22adf3 100644
--- a/test/automated/tildify-tests.el
+++ b/test/automated/tildify-tests.el
@@ -101,6 +101,17 @@ latter is missing, SENTENCE will be used in all placeholder positions."
101 (tildify-test--example-tex sentence sentence) 101 (tildify-test--example-tex sentence sentence)
102 (tildify-test--example-tex sentence with-nbsp)))) 102 (tildify-test--example-tex sentence with-nbsp))))
103 103
104
105(ert-deftest tildify-test-find-env-end-re-bug ()
106 "Tests generation of end-regex using mix of indexes and strings"
107 (with-temp-buffer
108 (let ((tildify-ignored-environments-alist
109 `((,major-mode ("foo\\|bar" . ("end-" 0))))))
110 (insert "foo whatever end-foo")
111 (goto-char (point-min))
112 (should (string-equal "end-foo" (tildify-find-env "foo\\|bar"))))))
113
114
104(provide 'tildify-tests) 115(provide 'tildify-tests)
105 116
106;;; tildify-tests.el ends here 117;;; tildify-tests.el ends here