Function: xsdre-compile-regexp
xsdre-compile-regexp is a byte-compiled function defined in
xsd-regexp.el.gz.
Signature
(xsdre-compile-regexp RE ACCUM)
Documentation
Return an Emacs regular expression for the symbolic regexp RE.
Returns a list of strings whose head is the regexp for RE and whose tail is ACCUM.
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/xsd-regexp.el.gz
(defun xsdre-compile-regexp (re accum)
"Return an Emacs regular expression for the symbolic regexp RE.
Returns a list of strings whose head is the regexp for RE
and whose tail is ACCUM."
(cond ((not (consp re))
(xsdre-compile-char-class re accum))
((eq (car re) 'choice)
(setq accum (cons "\\(?:" accum))
(let ((choices (cdr re)))
(while choices
(setq accum
(xsdre-compile-regexp (car choices)
accum))
(setq choices (cdr choices))
(when choices
(setq accum
(cons "\\|" accum)))))
(cons "\\)" accum))
((eq (car re) 'sequence)
(let ((members (cdr re)))
(while members
(setq accum (xsdre-compile-regexp (car members)
accum))
(setq members (cdr members))))
accum)
((eq (car re) 'repeat)
(let* ((sub (nth 1 re))
(lower (nth 2 re))
(upper (nth 3 re))
(need-paren (and (consp sub)
(eq (car sub) 'sequence))))
(when need-paren
(setq accum (cons "\\(?:" accum)))
(setq accum
(xsdre-compile-regexp sub accum))
(when need-paren
(setq accum (cons "\\)" accum)))
(cond ((not upper)
(cond ((eq lower 0)
(cons "*" accum))
((eq lower 1)
(cons "+" accum))
(t
(cons (concat "\\{"
(number-to-string lower)
",\\}")
accum))))
((eq lower upper)
(cons (concat "\\{"
(number-to-string lower)
"\\}")
accum))
((and (eq lower 0) (eq upper 1))
(cons "?" accum))
(t
(cons (concat "\\{"
(number-to-string lower)
","
(number-to-string upper)
"\\}")
accum)))))
(t (xsdre-compile-char-class re accum))))