Function: info-lookup-make-completions

info-lookup-make-completions is a byte-compiled function defined in info-look.el.gz.

Signature

(info-lookup-make-completions TOPIC MODE)

Documentation

Create a unique alist from all index entries.

Source Code

;; Defined in /usr/src/emacs/lisp/info-look.el.gz
(defun info-lookup-make-completions (topic mode)
  "Create a unique alist from all index entries."
  (let ((doc-spec (info-lookup->doc-spec topic mode))
	(regexp (concat "^\\(" (info-lookup->regexp topic mode)
			"\\)\\([ \t].*\\)?$"))
	Info-history-list Info-fontify-maximum-menu-size
	node trans entry item prefix result doc-found
	(buffer (get-buffer-create " temp-info-look")))
    (with-current-buffer buffer
      (Info-mode))
    (while doc-spec
      (setq node (nth 0 (car doc-spec))
	    trans (cond ((eq (nth 1 (car doc-spec)) nil)
			 (lambda (arg)
			   (if (string-match regexp arg)
			       (match-string 1 arg))))
			((stringp (nth 1 (car doc-spec)))
			 (setq prefix (nth 1 (car doc-spec)))
			 (lambda (arg)
			   (if (string-match "^\\([^: \t\n]+\\)" arg)
			       (concat prefix (match-string 1 arg)))))
			(t (nth 1 (car doc-spec)))))
      (with-current-buffer buffer
	(message "Processing Info node `%s'..." node)
	(when (condition-case nil
		  (progn
		    (Info-goto-node node)
		    (setq doc-found t))
		(error
		 (message "Cannot access Info node `%s'" node)
		 (sit-for 1)
		 nil))
	  (condition-case nil
	      (progn
		(goto-char (point-min))
		(and (search-forward "\n* Menu:" nil t)
		     (while (re-search-forward "\n\\* \\(.*\\): " nil t)
		       (setq entry (match-string 1)
			     item (funcall trans entry))
		       ;; `trans' can return nil if the regexp doesn't match.
		       (when (and item
				  ;; Sometimes there's more than one Menu:
				  (not (string= entry "Menu")))
			 (and (info-lookup->ignore-case topic mode)
			      (setq item (downcase item)))
			 (and (string-equal entry item)
			      (setq entry nil))
			 (and (or (assoc item result)
				  (setq result (cons (cons item entry)
						     result))))))))
	    (error nil))))
      (message "Processing Info node `%s'...done" node)
      (setq doc-spec (cdr doc-spec)))
    (or doc-found
	(error "Info documentation for lookup was not found"))
    result))