Function: idlwave-where
idlwave-where is a byte-compiled function defined in idlwave.el.gz.
Signature
(idlwave-where)
Documentation
Find out where we are.
The return value is a list with the following stuff:
(PRO-LIST FUNC-LIST COMPLETE-WHAT CW-LIST LAST-CHAR)
PRO-LIST (PRO POINT CLASS ARROW)
FUNC-LIST (FUNC POINT CLASS ARROW)
COMPLETE-WHAT a symbol indicating what kind of completion makes sense here
CW-LIST (PRO-OR-FUNC POINT CLASS ARROW) Like PRO-LIST, for what can
be completed here.
LAST-CHAR last relevant character before point (non-white non-comment,
not part of current identifier or leading slash).
In the lists, we have these meanings:
PRO: Procedure name
FUNC: Function name
POINT: Where is this
CLASS: What class has the routine (nil=no, t=is method, but class unknown)
ARROW: Location of the arrow
Source Code
;; Defined in /usr/src/emacs/lisp/obsolete/idlwave.el.gz
(defun idlwave-where ()
"Find out where we are.
The return value is a list with the following stuff:
\(PRO-LIST FUNC-LIST COMPLETE-WHAT CW-LIST LAST-CHAR)
PRO-LIST (PRO POINT CLASS ARROW)
FUNC-LIST (FUNC POINT CLASS ARROW)
COMPLETE-WHAT a symbol indicating what kind of completion makes sense here
CW-LIST (PRO-OR-FUNC POINT CLASS ARROW) Like PRO-LIST, for what can
be completed here.
LAST-CHAR last relevant character before point (non-white non-comment,
not part of current identifier or leading slash).
In the lists, we have these meanings:
PRO: Procedure name
FUNC: Function name
POINT: Where is this
CLASS: What class has the routine (nil=no, t=is method, but class unknown)
ARROW: Location of the arrow"
(idlwave-routines)
(let* (;(bos (save-excursion (idlwave-beginning-of-statement) (point)))
(bos (save-excursion (idlwave-start-of-substatement 'pre) (point)))
(func-entry (idlwave-what-function bos))
(func (car func-entry))
(func-class (nth 1 func-entry))
(func-arrow (nth 2 func-entry))
(func-point (or (nth 3 func-entry) 0))
(func-level (or (nth 4 func-entry) 0))
(pro-entry (idlwave-what-procedure bos))
(pro (car pro-entry))
(pro-class (nth 1 pro-entry))
(pro-arrow (nth 2 pro-entry))
(pro-point (or (nth 3 pro-entry) 0))
(last-char (idlwave-last-valid-char))
(case-fold-search t)
(match-string (buffer-substring bos (point)))
cw cw-mod cw-arrow cw-class cw-point)
(if (< func-point pro-point) (setq func nil))
(cond
((string-match "\\`[ \t]*\\(pro\\|function\\)[ \t]+[a-zA-Z0-9_]*\\'"
match-string)
(setq cw 'class))
((string-match
"\\`[ \t]*\\([a-zA-Z][a-zA-Z0-9$_]*\\)?\\'"
(if (> pro-point 0)
(buffer-substring pro-point (point))
match-string))
(setq cw 'procedure cw-class pro-class cw-point pro-point
cw-arrow pro-arrow))
((string-match "\\`[ \t]*\\(pro\\|function\\)\\>"
match-string)
nil)
((string-match "OBJ_NEW([ \t]*['\"][a-zA-Z0-9$_]*\\'"
match-string)
(setq cw 'class))
((string-match "\\<inherits\\s-+[a-zA-Z0-9$_]*\\'"
match-string)
(setq cw 'class))
((and func
(> func-point pro-point)
(= func-level 1)
(memq last-char '(?\( ?,)))
(setq cw 'function-keyword cw-mod func cw-point func-point
cw-class func-class cw-arrow func-arrow))
((and pro (eq last-char ?,))
(setq cw 'procedure-keyword cw-mod pro cw-point pro-point
cw-class pro-class cw-arrow pro-arrow))
; ((member last-char '(?\' ?\) ?\] ?!))
; ;; after these chars, a function makes no sense
; ;; FIXME: I am sure there can be more in this list
; ;; FIXME: Do we want to do this at all?
; nil)
;; Everywhere else we try a function.
(t
(setq cw 'function)
(save-excursion
(if (re-search-backward "->[ \t]*\\(\\$[ \t]*\\(;.*\\)?\n\\s-*\\)?\\(\\([$a-zA-Z0-9_]+\\)::\\)?[$a-zA-Z0-9_]*\\=" bos t)
(setq cw-arrow (copy-marker (match-beginning 0))
cw-class (if (match-end 4)
(idlwave-sintern-class (match-string 4))
t))))))
(list (list pro pro-point pro-class pro-arrow)
(list func func-point func-class func-arrow)
cw
(list cw-mod cw-point cw-class cw-arrow)
last-char)))