Make the rx operators \? and \?? behave correctly
* lisp/emacs-lisp/rx.el (rx-kleene): Treat \? and \?? like ? and ?? (Bug#34100). * test/lisp/emacs-lisp/rx-tests.el: Add tests for all repetition operators.
This commit is contained in:
parent
b01a4295c2
commit
decdff76fb
2 changed files with 25 additions and 2 deletions
|
@ -733,8 +733,8 @@ If OP is anything else, produce a greedy regexp if `rx-greedy-flag'
|
|||
is non-nil."
|
||||
(rx-check form)
|
||||
(setq form (rx-trans-forms form))
|
||||
(let ((suffix (cond ((memq (car form) '(* + ?\s)) "")
|
||||
((memq (car form) '(*? +? ??)) "?")
|
||||
(let ((suffix (cond ((memq (car form) '(* + \? ?\s)) "")
|
||||
((memq (car form) '(*? +? \?? ??)) "?")
|
||||
(rx-greedy-flag "")
|
||||
(t "?")))
|
||||
(op (cond ((memq (car form) '(* *? 0+ zero-or-more)) "*")
|
||||
|
|
|
@ -65,5 +65,28 @@
|
|||
(list u v)))
|
||||
'("1" "3"))))
|
||||
|
||||
(ert-deftest rx-kleene ()
|
||||
"Test greedy and non-greedy repetition operators."
|
||||
(should (equal (rx (* "a") (+ "b") (\? "c") (?\s "d")
|
||||
(*? "e") (+? "f") (\?? "g") (?? "h"))
|
||||
"a*b+c?d?e*?f+?g??h??"))
|
||||
(should (equal (rx (zero-or-more "a") (0+ "b")
|
||||
(one-or-more "c") (1+ "d")
|
||||
(zero-or-one "e") (optional "f") (opt "g"))
|
||||
"a*b*c+d+e?f?g?"))
|
||||
(should (equal (rx (minimal-match
|
||||
(seq (* "a") (+ "b") (\? "c") (?\s "d")
|
||||
(*? "e") (+? "f") (\?? "g") (?? "h"))))
|
||||
"a*b+c?d?e*?f+?g??h??"))
|
||||
(should (equal (rx (minimal-match
|
||||
(seq (zero-or-more "a") (0+ "b")
|
||||
(one-or-more "c") (1+ "d")
|
||||
(zero-or-one "e") (optional "f") (opt "g"))))
|
||||
"a*?b*?c+?d+?e??f??g??"))
|
||||
(should (equal (rx (maximal-match
|
||||
(seq (* "a") (+ "b") (\? "c") (?\s "d")
|
||||
(*? "e") (+? "f") (\?? "g") (?? "h"))))
|
||||
"a*b+c?d?e*?f+?g??h??")))
|
||||
|
||||
(provide 'rx-tests)
|
||||
;; rx-tests.el ends here.
|
||||
|
|
Loading…
Add table
Reference in a new issue