Function: rng-ipattern-required-attributes
rng-ipattern-required-attributes is a byte-compiled function defined
in rng-match.el.gz.
Signature
(rng-ipattern-required-attributes IPATTERN ACCUM)
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/rng-match.el.gz
(defun rng-ipattern-required-attributes (ipattern accum)
(let ((type (rng--ipattern-type ipattern)))
(cond ((eq type 'after)
(rng-ipattern-required-attributes (rng--ipattern-child ipattern)
accum))
((memq type '(interleave group))
(let ((members (rng--ipattern-child ipattern)))
(while members
(setq accum
(rng-ipattern-required-attributes (car members)
accum))
(setq members (cdr members))))
accum)
((eq type 'choice)
(let ((members (rng--ipattern-child ipattern))
in-all in-this new-in-all)
(setq in-all
(rng-ipattern-required-attributes (car members)
nil))
(while (and in-all (setq members (cdr members)))
(setq in-this
(rng-ipattern-required-attributes (car members) nil))
(setq new-in-all nil)
(while in-this
(when (member (car in-this) in-all)
(setq new-in-all
(cons (car in-this) new-in-all)))
(setq in-this (cdr in-this)))
(setq in-all new-in-all))
(append in-all accum)))
((eq type 'attribute)
(let ((nc (rng--ipattern-name-class ipattern)))
(if (consp nc)
(cons nc accum)
accum)))
((eq type 'one-or-more)
(rng-ipattern-required-attributes (rng--ipattern-child ipattern)
accum))
(t accum))))