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))))