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.
This commit is contained in:
parent
a1d799c25e
commit
af9a3b28c0
4 changed files with 66 additions and 22 deletions
|
@ -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-05 Mario Lang <mlang@delysid.org>
|
||||
|
||||
* woman.el (woman-mapcan): Remove.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue