view lisp/progmodes/octave-hlp.el @ 30403:68e734ab7d5d

(c-looking-at-inexpr-block): Replaced a call to c-beginning-of-statement-1 that caused a bad case of recursion which could consume a lot of CPU in large classes in languages that have in-expression classes (i.e. Java and Pike). (c-guess-basic-syntax): Check for in-expression statements before top level constructs (i.e. case 6 is moved before case 5 and is now case 4) to catch in-expression classes in top level expressions correctly. (c-guess-basic-syntax): Less naive handling of objc-method-intro. Case 4 removed and case 5I added. (c-beginning-of-inheritance-list, c-guess-basic-syntax): Fixed recognition of inheritance lists when the lines begins with a comma. (c-forward-syntactic-ws): Fixed an infloop bug when the buffer ends with a macro continuation char. (c-guess-basic-syntax): Added support for function definitions as statements in Pike. The first statement in a lambda block is now labeled defun-block-intro instead of statement-block-intro. (c-narrow-out-enclosing-class): Whack the state so that the class surrounding point is selected, not the one innermost in the state. (c-guess-basic-syntax): Fixed bug in recognition of switch labels having hanging multiline statements. (c-beginning-of-member-init-list): Broke out some code in c-guess-basic-syntax to a separate function. (c-just-after-func-arglist-p): Fixed recognition of member inits with multiple line arglists. (c-guess-basic-syntax): New case 5B.3 to detect member-init-cont when the commas are in funny places. (c-looking-at-bos): New helper function. (c-looking-at-inexpr-block): More tests to tell inexpr and toplevel classes apart in Pike. (c-guess-basic-syntax): Fixed bogus recognition of case 9A. (c-guess-basic-syntax): Made the cpp-macro a syntax modifier like comment-intro, to make it possible to get syntactic indentation for preprocessor directives. It's incompatible wrt to lineup functions on cpp-macro, but it has no observable effect in the 99.9% common case where cpp-macro is set to -1000. (c-guess-basic-syntax): Fixed bug with missed member-init-cont when the preceding arglist is several lines. (c-beginning-of-statement-1): Fixed bug where we were left at comments preceding the first statement when reaching the beginning of the buffer. (c-beginning-of-closest-statement): New helper function to go back to the closest preceding statement start, which could be inside a conditional statement. (c-guess-basic-syntax): Use c-beginning-of-closest-statement in cases 10B.2, 17B and 17C. (c-guess-basic-syntax): Better handling of arglist-intro, arglist-cont-nonempty and arglist-close when the arglist is nested inside parens. Cases 7A, 7C and 7F changed. (c-beginning-of-statement-1): Fixed handling of multiline Pike type decls. (c-guess-basic-syntax): Fixed bug with fully::qualified::names in C++ member init lists. Preamble in case 5D changed.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:11:20 +0000
parents 8f952e921136
children 0d8b17d428b5
line wrap: on
line source

;;; octave-hlp.el --- getting help on Octave symbols using info

;; Copyright (C) 1997 Free Software Foundation, Inc.

;; Author: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>
;; Author: John Eaton <jwe@bevo.che.wisc.edu>
;; Maintainer: Kurt Hornik <Kurt.Hornik@ci.tuwien.ac.at>
;; Keywords: languages

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.

;;; Commentary:

;; Provides the command `octave-help' which allows index lookup of a
;; symbol in the Octave-related info files, as specified by the list
;; `octave-help-files'.

;; Other features may be added in future versions.

;;; Code:

(require 'octave-mod)
(require 'info)

(defvar octave-help-files '("octave")
  "List of info files with documentation for Octave.
Default is (\"octave\").")

(defvar octave-help-lookup-alist nil
  "Alist of Octave index entries for lookup.")

(defvar octave-help-completion-alist nil
  "Alist of Octave index entries for completion.
The entries are of the form (VAR . VAR), where VAR runs through all
different keys in `octave-help-lookup-alist'.")

;;;###autoload
(defun octave-help (key)
  "Get help on Octave symbols from the Octave info files.
Look up KEY in the function, operator and variable indices of the files
specified by `octave-help-files'.
If KEY is not a string, prompt for it with completion."
  (interactive
   (list
    (completing-read (format "Describe Octave symbol: ")
		     (octave-help-get-completion-alist)
		     nil t)))
  (if (get-buffer "*info*")
      (set-buffer "*info*"))
  (if (zerop (length key))
      (Info-find-node (car octave-help-files) "Top")
    (let ((alist (copy-alist (octave-help-get-lookup-alist)))
	  entry matches)
      (while (setq entry (car alist))
	(if (string-match key (car entry))
	    (add-to-list 'matches entry))
	(setq alist (cdr alist)))
      (if matches
	  (progn
	    (setq Info-index-alternatives matches)
	    (Info-index-next 0))))))

(defun octave-help-get-lookup-alist ()
  "Build the index lookup alist from all Octave info files.
The files specified by `octave-help-files' are searched."
  (if octave-help-lookup-alist
      ()
    (message "Building help lookup alist...")    
    (let ((files octave-help-files) file key node)
      (save-window-excursion
	(while files
	  (setq file (car files))
 	  (Info-goto-node (concat "(" file ")"))
	  (condition-case nil
	      (progn
		(Info-index "")
		(while
		    (progn
		      (while (re-search-forward
			      "^\\* \\([^(:]+\\)[^:]*: *\\(.+\\)\\.$"
			      nil t)
			(setq key (match-string 1)
			      node (concat "(" file ")" (match-string 2)))
			(and (string-match "\\(.*\\>\\) *$" key)
			     (setq key (replace-match "\\1" t nil key)))
			(add-to-list 'octave-help-lookup-alist
				     (list key
					   node
					   (concat (concat "(" file ")")
						   Info-current-node)
					   0)))
		      (and (setq node (Info-extract-pointer "next" t))
			   (string-match
			    (concat "\\(Function\\|Operator\\|Variable\\) "
				    "\\<Index\\>")
			    node)))
		  (Info-goto-node node)))
	    (error nil))
	  (setq files (cdr files)))))
    (message "Building help lookup alist...done"))
  octave-help-lookup-alist)

(defun octave-help-get-completion-alist ()
  "Build the index completion alist from all Octave info files.
The files specified by `octave-help-files' are searched."
  (if octave-help-completion-alist
      ()
    (message "Building help completion alist...")
    (let ((alist (octave-help-get-lookup-alist)) entry)
      (while alist
	(setq entry (car alist))
	(add-to-list 'octave-help-completion-alist
		     (cons (car entry) (car entry)))
	(setq alist (cdr alist))))
    (message "Building help completion alist...done"))    
  octave-help-completion-alist)

;;; provide ourself

(provide 'octave-hlp)

;;; octave-hlp.el ends here