Function: rng-generate-qname-list
rng-generate-qname-list is a byte-compiled function defined in
rng-nxml.el.gz.
Signature
(rng-generate-qname-list &optional STRING CANDIDATES ATTRIBUTE-FLAG EXTRA-STRINGS)
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/rng-nxml.el.gz
(defun rng-generate-qname-list (&optional string candidates attribute-flag extra-strings)
(let ((forced-prefix (and string
(string-match ":" string)
(> (match-beginning 0) 0)
(substring string
0
(match-beginning 0))))
(namespaces (mapcar #'car candidates))
ns-prefixes-alist ns-prefixes iter ns prefer)
(while namespaces
(setq ns (car namespaces))
(when ns
(setq ns-prefixes-alist
(cons (cons ns (nxml-ns-prefixes-for
ns
attribute-flag))
ns-prefixes-alist)))
(setq namespaces (delq ns (cdr namespaces))))
(setq iter ns-prefixes-alist)
(while iter
(setq ns-prefixes (car iter))
(setq ns (car ns-prefixes))
(when (null (cdr ns-prefixes))
;; No declared prefix for the namespace
(if forced-prefix
;; If namespace non-nil and prefix undeclared,
;; use forced prefix.
(when (and ns
(not (nxml-ns-get-prefix forced-prefix)))
(setcdr ns-prefixes (list forced-prefix)))
(setq prefer (rng-get-preferred-unused-prefix ns))
(when prefer
(setcdr ns-prefixes (list prefer)))
;; Unless it's an attribute with a non-nil namespace,
;; allow no prefix for this namespace.
(unless attribute-flag
(setcdr ns-prefixes (cons nil (cdr ns-prefixes))))))
(setq iter (cdr iter)))
(seq-uniq
(sort (apply #'append
(cons extra-strings
(mapcar (lambda (name)
(if (car name)
(mapcar (lambda (prefix)
(if prefix
(concat prefix
":"
(cdr name))
(cdr name)))
(cdr (assoc (car name)
ns-prefixes-alist)))
(list (cdr name))))
candidates)))
'string<))))