Commit 6420d28b authored by Chong Yidong's avatar Chong Yidong
Browse files

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.
parent ddb8b596
......@@ -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,
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
......
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
(Bug#8768).
......
......@@ -130,6 +130,8 @@
(** . (rx-** 2 nil)) ; SRE
(submatch . (rx-submatch 1 nil)) ; SRE
(group . submatch) ; sregex
(submatch-n . (rx-submatch-n 2 nil))
(group-n . submatch-n)
(zero-or-more . (rx-kleene 1 nil))
(one-or-more . (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))
"\\)"))
(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)
"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',
`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 ...)'
`(| SEXP1 SEXP2 ...)'
matches anything that matches SEXP1 or SEXP2, etc. If all
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment