Function: rng-compute-start-tag-open-deriv

rng-compute-start-tag-open-deriv is a byte-compiled function defined in rng-match.el.gz.

Signature

(rng-compute-start-tag-open-deriv IPATTERN NM)

Source Code

;; Defined in /usr/src/emacs/lisp/nxml/rng-match.el.gz
(defun rng-compute-start-tag-open-deriv (ipattern nm)
  (let ((type (rng--ipattern-type ipattern)))
    (cond ((eq type 'choice)
	   (rng-transform-choice (lambda (p)
                                   (rng-start-tag-open-deriv p nm))
				 ipattern))
	  ((eq type 'element)
	   (if (rng-name-class-contains
		(rng--ipattern-name-class ipattern)
		nm)
	       (rng-intern-after (rng-element-get-child ipattern)
				 rng-empty-ipattern)
	     rng-not-allowed-ipattern))
	  ((eq type 'group)
	   (rng-transform-group-nullable
	    (lambda (p) (rng-start-tag-open-deriv p nm))
	    'rng-cons-group-after
	    ipattern))
	  ((eq type 'interleave)
	   (rng-transform-interleave-single
	    (lambda (p) (rng-start-tag-open-deriv p nm))
	    'rng-subst-interleave-after
	    ipattern))
	  ((eq type 'one-or-more)
           (let ((ip (rng-intern-optional ipattern)))
             (rng-apply-after
              (lambda (p) (rng-intern-group (list p ip)))
              (rng-start-tag-open-deriv (rng--ipattern-child ipattern)
                                        nm))))
	  ((eq type 'after)
           (let ((nip (rng--ipattern-after ipattern)))
             (rng-apply-after
              (lambda (p) (rng-intern-after p nip))
              (rng-start-tag-open-deriv (rng--ipattern-child ipattern)
                                        nm))))
	  (t rng-not-allowed-ipattern))))