Function: rng-normalize-interleave-list
rng-normalize-interleave-list is a byte-compiled function defined in
rng-match.el.gz.
Signature
(rng-normalize-interleave-list IPATTERNS)
Documentation
Normalize a list containing members of an interleave.
Expands nested groups, removes empty members, handles notAllowed. Returns a pair whose car says whether the list is nullable and whose cdr is the normalized list.
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/rng-match.el.gz
(defun rng-normalize-interleave-list (ipatterns)
"Normalize a list containing members of an interleave.
Expands nested groups, removes empty members, handles notAllowed.
Returns a pair whose car says whether the list is nullable and whose
cdr is the normalized list."
(let ((nullable t)
(result nil)
member)
(while ipatterns
(setq member (car ipatterns))
(setq ipatterns (cdr ipatterns))
(when nullable
(setq nullable (rng--ipattern-nullable member)))
(cond ((eq (rng--ipattern-type member) 'interleave)
(setq result
(append (rng--ipattern-child member)
result)))
((eq member rng-not-allowed-ipattern)
(setq result (list rng-not-allowed-ipattern))
(setq ipatterns nil))
((not (eq member rng-empty-ipattern))
(setq result (cons member result)))))
(cons nullable (sort result 'rng-compare-ipattern))))