[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#17699: [PATCH 1/7] tildify.el: Fix end-regex building in `tildify-fi
From: |
Michal Nazarewicz |
Subject: |
bug#17699: [PATCH 1/7] tildify.el: Fix end-regex building in `tildify-find-env' |
Date: |
Thu, 5 Jun 2014 13:27:30 +0200 |
* 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.
---
lisp/ChangeLog | 31 +++++++++++++++++++++++++++++++
lisp/textmodes/tildify.el | 40 ++++++++++++++++++----------------------
test/ChangeLog | 6 ++++++
test/automated/tildify-tests.el | 11 +++++++++++
4 files changed, 66 insertions(+), 22 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index a6ae6f8..dc3c42a 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,34 @@
+2014-06-05 Michal Nazarewicz <mina86@mina86.com>
+
+ * textmodes/tildify.el (tildify-find-env): Fix end-regex building
+ in `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.
+
2014-06-03 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* register.el: Add link to Emacs manual in Commentary.
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 339f900..7e4b39b 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.
diff --git a/test/ChangeLog b/test/ChangeLog
index b6b3dd3..db32aae 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-05 Michal Nazarewicz <mina86@mina86.com>
+
+ * automated/tildify-tests.el (tildify-test-find-env-end-re-bug): New
+ test checking end-regex building in `tildify-find-env' function when
+ integers (denoting capture groups) and strings are mixed together.
+
2014-06-02 Michael Albinus <michael.albinus@gmx.de>
* automated/tramp-tests.el (tramp-remote-process-environment): Declare.
diff --git a/test/automated/tildify-tests.el b/test/automated/tildify-tests.el
index 4223029..25e9f22 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."
(tildify-test--example-tex sentence sentence)
(tildify-test--example-tex sentence with-nbsp))))
+
+(ert-deftest tildify-test-find-env-end-re-bug ()
+ "Tests generation of end-regex using mix of indexes and strings"
+ (with-temp-buffer
+ (let ((tildify-ignored-environments-alist
+ `((,major-mode ("foo\\|bar" . ("end-" 0))))))
+ (insert "foo whatever end-foo")
+ (goto-char (point-min))
+ (should (string-equal "end-foo" (tildify-find-env "foo\\|bar"))))))
+
+
(provide 'tildify-tests)
;;; tildify-tests.el ends here
--
2.0.0.526.g5318336
- bug#17699: Various tildify.el improvements, Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 1/7] tildify.el: Fix end-regex building in `tildify-find-env',
Michal Nazarewicz <=
- bug#17699: [PATCH 6/7] tildify.el: Rewrite `tildify-region' and co., add foreach function., Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 2/7] tildify.el: Fix matched group indexes in end-regex building, Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 7/7] * tests/automated/tildify-tests.el (tildify-test--test): Optimise the test slightly by reusing the same temporary buffer across multiple test cases., Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 4/7] tildify.el: Better support for XML, Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 5/7] tildify.el: Optimise environments regexes, Michal Nazarewicz, 2014/06/05
- bug#17699: [PATCH 3/7] tildify.el: Improve defcustom's types, Michal Nazarewicz, 2014/06/05
- bug#17699: Various tildify.el improvements, Stefan Monnier, 2014/06/05