Function: Info-speedbar-fetch-file-nodes
Info-speedbar-fetch-file-nodes is a byte-compiled function defined in
info.el.gz.
Signature
(Info-speedbar-fetch-file-nodes NODESPEC)
Documentation
Fetch the subnodes from the info NODESPEC.
NODESPEC is a string of the form: (file)node.
Source Code
;; Defined in /usr/src/emacs/lisp/info.el.gz
(defun Info-speedbar-fetch-file-nodes (nodespec)
"Fetch the subnodes from the info NODESPEC.
NODESPEC is a string of the form: (file)node."
;; Set up a buffer we can use to fake-out Info.
(with-current-buffer (get-buffer-create " *info-browse-tmp*")
(if (not (derived-mode-p 'Info-mode))
(Info-mode))
;; Get the node into this buffer
(if (not (string-match "^(\\([^)]+\\))\\([^.]+\\)$" nodespec))
(error "Invalid node specification %s" nodespec)
(Info-find-node (match-string 1 nodespec) (match-string 2 nodespec)))
;; Scan the created buffer
(goto-char (point-min))
(let ((completions nil)
(case-fold-search t)
(thisfile (progn (string-match "^(\\([^)]+\\))" nodespec)
(match-string 1 nodespec))))
;; Always skip the first one...
(re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
(while (re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
(let ((name (match-string 1)))
(push (cons name
(if (looking-at " *\\(([^)]+)[^.\n]+\\)\\.")
(match-string 1)
(if (looking-at " *\\(([^)]+)\\)\\.")
(concat (match-string 1) "Top")
(concat "(" thisfile ")"
(if (looking-at " \\([^.]+\\).")
(match-string 1)
name)))))
completions)))
(nreverse completions))))