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