changeset 55103:93f6ab2a0eb5

(rx-syntax): Move sregex style syntax to code. (rx-bracket, rx-check-any, rx-any): Clean up name space.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 23 Apr 2004 21:25:58 +0000
parents 95c1c6487fda
children 60202911eed0
files lisp/emacs-lisp/rx.el
diffstat 1 files changed, 15 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/rx.el	Fri Apr 23 21:23:29 2004 +0000
+++ b/lisp/emacs-lisp/rx.el	Fri Apr 23 21:25:58 2004 +0000
@@ -1,6 +1,6 @@
 ;;; rx.el --- sexp notation for regular expressions
 
-;; Copyright (C) 2001, 2003, 2004  Free Software Foundation, Inc.
+;; Copyright (C) 2001, 03, 2004  Free Software Foundation, Inc.
 
 ;; Author: Gerd Moellmann <gerd@gnu.org>
 ;; Maintainer: FSF
@@ -235,23 +235,7 @@
     (comment-start	. ?<)
     (comment-end	. ?>)
     (string-delimiter	. ?|)
-    (comment-delimiter	. ?!)
-    ;; sregex compatibility
-    (- . ?-)
-    (\. . ?.)
-    (w . ?w)
-    (_ . ?_)
-    (\( . ?\()
-    (\) . ?\))
-    (\' . ?\')
-    (\" . ?\")
-    (\$ . ?$)
-    (\\ . ?\\)
-    (/ . ?/)
-    (< . ?<)
-    (> . ?>)
-    (| . ?|)
-    (! . ?!))
+    (comment-delimiter	. ?!))
   "Alist mapping Rx syntax symbols to syntax characters.
 Each entry has the form (SYMBOL . CHAR), where SYMBOL is a valid
 symbol in `(syntax SYMBOL)', and CHAR is the syntax character
@@ -372,7 +356,7 @@
 	    "\\)")))
 
 
-(defvar bracket)		       ; dynamically bound in `rx-any'
+(defvar rx-bracket)		       ; dynamically bound in `rx-any'
 
 (defun rx-check-any (arg)
    "Check arg ARG for Rx `any'."
@@ -387,7 +371,7 @@
      ;; Remove ] and set flag for adding it to start of overall result.
      (when (string-match "]" arg)
        (setq arg (replace-regexp-in-string "]" "" arg)
-	     bracket "]")))
+	     rx-bracket "]")))
    (when (symbolp arg)
      (let ((translation (condition-case nil
 			    (rx-to-string arg 'no-group)
@@ -406,13 +390,13 @@
   "Parse and produce code from FORM, which is `(any ARG ...)'.
 ARG is optional."
   (rx-check form)
-  (let* (bracket
-	 (args (mapcar #'rx-check-any (cdr form)))) ; side-effects `bracket'
+  (let* ((rx-bracket nil)
+	 (args (mapcar #'rx-check-any (cdr form)))) ; side-effects `rx-bracket'
     ;; If there was a ?- in the form, move it to the front to avoid
     ;; accidental range.
     (if (member "-" args)
 	(setq args (cons "-" (delete "-" args))))
-    (apply #'concat "[" bracket (append args '("]")))))
+    (apply #'concat "[" rx-bracket (append args '("]")))))
 
 
 (defun rx-check-not (arg)
@@ -595,9 +579,15 @@
 (defun rx-syntax (form)
   "Parse and produce code from FORM, which is `(syntax SYMBOL)'."
   (rx-check form)
-  (let ((syntax (assq (cadr form) rx-syntax)))
+  (let* ((sym (cadr form))
+	 (syntax (assq sym rx-syntax)))
     (unless syntax
-      (error "Unknown rx syntax `%s'" (cadr form)))
+      ;; Try sregex compatibility.
+      (let ((name (symbol-name sym)))
+	(if (= 1 (length name))
+	    (setq syntax (rassq (aref name 0) rx-syntax))))
+      (unless syntax
+	(error "Unknown rx syntax `%s'" (cadr form))))
     (format "\\s%c" (cdr syntax))))