Function: rng-complete-tag

rng-complete-tag is a byte-compiled function defined in rng-nxml.el.gz.

Signature

(rng-complete-tag LT-POS)

Source Code

;; Defined in /usr/src/emacs/lisp/nxml/rng-nxml.el.gz
(defun rng-complete-tag (lt-pos)
  (let ((extra-strings
         (when (and (= lt-pos (1- (point)))
                    rng-complete-end-tags-after-<
                    rng-open-elements
                    (not (eq (car rng-open-elements) t))
                    (or rng-collecting-text
                        (rng-match-save
                          (rng-match-end-tag))))
           (list (concat "/"
                         (if (caar rng-open-elements)
                             (concat (caar rng-open-elements)
                                     ":"
                                     (cdar rng-open-elements))
                           (cdar rng-open-elements)))))))
    (when (save-excursion
	    (re-search-backward rng-in-start-tag-name-regex
				lt-pos
				t))
      (and rng-collecting-text (rng-flush-text))
      (let ((target-names (rng-match-possible-start-tag-names)))
        `(,(1+ lt-pos)
          ,(save-excursion (skip-chars-forward "-[:alnum:]_.:") (point))
          ,(apply-partially #'rng-complete-qname-function
                            target-names nil extra-strings)
          :exit-function
          ,(lambda (completion status)
             (cond
              ((not (eq status 'finished)) nil)
              ((rng-qname-p completion)
               (let ((name (rng-expand-qname completion
                                             t
                                             #'rng-start-tag-expand-recover)))
                 (when (and name
                            (rng-match-start-tag-open name)
                            (or (not (rng-match-start-tag-close))
                                ;; need a namespace decl on the root element
                                (and (car name)
                                     (not rng-open-elements))))
                   ;; attributes are required
                   (insert " "))))
              ((member completion extra-strings)
               (insert ">"))))
          :company-kind ,(lambda (_) 'property))))))