Function: rx--translate-form
rx--translate-form is a byte-compiled function defined in rx.el.gz.
Signature
(rx--translate-form FORM)
Documentation
Translate an rx form (list structure). Return (REGEXP . PRECEDENCE).
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/rx.el.gz
(defun rx--translate-form (form)
"Translate an rx form (list structure). Return (REGEXP . PRECEDENCE)."
(let ((body (cdr form)))
(pcase (car form)
((or 'seq : 'and 'sequence) (rx--translate-seq body))
((or 'or '|) (rx--translate-or body))
((or 'any 'in 'char) (rx--translate-any nil body))
('rx--char-alt (rx--translate-char-alt nil body))
('not-char (rx--translate-any t body))
('not (rx--translate-not nil body))
('intersection (rx--translate-intersection nil body))
('repeat (rx--translate-repeat body))
('= (rx--translate-= body))
('>= (rx--translate->= body))
('** (rx--translate-** body))
((or 'zero-or-more '0+) (rx--translate-rep "*" rx--greedy body))
((or 'one-or-more '1+) (rx--translate-rep "+" rx--greedy body))
((or 'zero-or-one 'opt 'optional) (rx--translate-rep "?" rx--greedy body))
('* (rx--translate-rep "*" t body))
('+ (rx--translate-rep "+" t body))
((or '\? ?\s) (rx--translate-rep "?" t body))
('*? (rx--translate-rep "*" nil body))
('+? (rx--translate-rep "+" nil body))
((or '\?? ??) (rx--translate-rep "?" nil body))
('minimal-match (rx--control-greedy nil body))
('maximal-match (rx--control-greedy t body))
((or 'group 'submatch) (rx--translate-group body))
((or 'group-n 'submatch-n) (rx--translate-group-n body))
('backref (rx--translate-backref body))
('syntax (rx--translate-syntax nil body))
('not-syntax (rx--translate-syntax t body))
('category (rx--translate-category nil body))
('literal (rx--translate-literal body))
('eval (rx--translate-eval body))
((or 'regexp 'regex) (rx--translate-regexp body))
(op
(cond
((not (symbolp op)) (error "Bad rx operator `%S'" op))
((let ((expanded (rx--expand-def-form form)))
(and expanded
(rx--translate expanded))))
;; For compatibility with old rx.
((let ((entry (assq op rx-constituents)))
(and entry (rx--translate-compat-form-entry form entry))))
(t (error "Unknown rx form `%s'" op)))))))