1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-06 11:50:51 -08:00

Add rx.el support for numbered groups (Bug#8776).

* lisp/emacs-lisp/rx.el (rx-constituents): Add support for numbered groups.
(rx-submatch-n): New function.
(rx): Document it.
This commit is contained in:
Chong Yidong 2011-06-18 17:12:33 -04:00
parent ddb8b596be
commit 6420d28b9a
3 changed files with 25 additions and 0 deletions

View file

@ -1051,6 +1051,9 @@ deferring warnings until the main command loop is executed.
** `set-auto-mode' now respects mode: local variables at the end of files, ** `set-auto-mode' now respects mode: local variables at the end of files,
as well as those in the -*- line. as well as those in the -*- line.
---
** rx.el has a new `group-n' construct for explicitly numbered groups.
* Changes in Emacs 24.1 on non-free operating systems * Changes in Emacs 24.1 on non-free operating systems

View file

@ -1,5 +1,10 @@
2011-06-18 Chong Yidong <cyd@stupidchicken.com> 2011-06-18 Chong Yidong <cyd@stupidchicken.com>
* emacs-lisp/rx.el (rx-constituents): Add support for numbered
groups (Bug#8776).
(rx-submatch-n): New function.
(rx): Document it.
* dired-x.el (dired-mark-unmarked-files): Fix interactive spec * dired-x.el (dired-mark-unmarked-files): Fix interactive spec
(Bug#8768). (Bug#8768).

View file

@ -130,6 +130,8 @@
(** . (rx-** 2 nil)) ; SRE (** . (rx-** 2 nil)) ; SRE
(submatch . (rx-submatch 1 nil)) ; SRE (submatch . (rx-submatch 1 nil)) ; SRE
(group . submatch) ; sregex (group . submatch) ; sregex
(submatch-n . (rx-submatch-n 2 nil))
(group-n . submatch-n)
(zero-or-more . (rx-kleene 1 nil)) (zero-or-more . (rx-kleene 1 nil))
(one-or-more . (rx-kleene 1 nil)) (one-or-more . (rx-kleene 1 nil))
(zero-or-one . (rx-kleene 1 nil)) (zero-or-one . (rx-kleene 1 nil))
@ -690,6 +692,16 @@ FORM is either `(repeat N FORM1)' or `(repeat N M FORMS...)'."
(mapconcat (lambda (re) (rx-form re ':)) (cdr form) nil)) (mapconcat (lambda (re) (rx-form re ':)) (cdr form) nil))
"\\)")) "\\)"))
(defun rx-submatch-n (form)
"Parse and produce code from FORM, which is `(submatch-n N ...)'."
(let ((n (nth 1 form)))
(concat "\\(?" (number-to-string n) ":"
(if (= 3 (length form))
;; Only one sub-form.
(rx-form (nth 2 form))
;; Several sub-forms implicitly concatenated.
(mapconcat (lambda (re) (rx-form re ':)) (cddr form) nil))
"\\)")))
(defun rx-backref (form) (defun rx-backref (form)
"Parse and produce code from FORM, which is `(backref N)'." "Parse and produce code from FORM, which is `(backref N)'."
@ -1072,6 +1084,11 @@ CHAR
like `and', but makes the match accessible with `match-end', like `and', but makes the match accessible with `match-end',
`match-beginning', and `match-string'. `match-beginning', and `match-string'.
`(submatch-n N SEXP1 SEXP2 ...)'
`(group-n N SEXP1 SEXP2 ...)'
like `group', but make it an explicitly-numbered group with
group number N.
`(or SEXP1 SEXP2 ...)' `(or SEXP1 SEXP2 ...)'
`(| SEXP1 SEXP2 ...)' `(| SEXP1 SEXP2 ...)'
matches anything that matches SEXP1 or SEXP2, etc. If all matches anything that matches SEXP1 or SEXP2, etc. If all