Function: rng-c-parse-grammar-body
rng-c-parse-grammar-body is a byte-compiled function defined in
rng-cmpct.el.gz.
Signature
(rng-c-parse-grammar-body CLOSE-TOKEN &optional IN-INCLUDE)
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/rng-cmpct.el.gz
(defun rng-c-parse-grammar-body (close-token &optional in-include)
(while (not (string-equal rng-c-current-token close-token))
(cond ((rng-c-current-token-keyword-p)
(let ((kw (intern rng-c-current-token)))
(cond ((eq kw 'start)
(rng-c-parse-define 'start in-include))
((eq kw 'div)
(rng-c-advance)
(rng-c-parse-div in-include))
((eq kw 'include)
(and in-include
(rng-c-error "Nested include"))
(rng-c-advance)
(rng-c-parse-include))
(t (rng-c-error "Invalid grammar keyword")))))
((rng-c-current-token-ncname-p)
(if (looking-at "\\[")
(rng-c-parse-annotation-element)
(rng-c-parse-define rng-c-current-token
in-include)))
((rng-c-current-token-quoted-identifier-p)
(if (looking-at "\\[")
(rng-c-parse-annotation-element)
(rng-c-parse-define (substring rng-c-current-token 1)
in-include)))
((rng-c-current-token-prefixed-name-p)
(rng-c-parse-annotation-element))
((string-equal rng-c-current-token "[")
(rng-c-parse-lead-annotation)
(and (string-equal rng-c-current-token close-token)
(rng-c-error "Missing annotation subject"))
(and (looking-at "\\[")
(rng-c-error "Leading annotation applied to annotation")))
(t (rng-c-error "Invalid grammar content"))))
(or (string-equal rng-c-current-token "")
(rng-c-advance)))