(c++-imenu-generic-expression): Var defined.

(c++-mode): Set imenu-generic-expression.
This commit is contained in:
Karl Heuer 1995-07-28 00:30:18 +00:00
parent 82af06af78
commit d6209f58ef

View file

@ -143,6 +143,101 @@ with the colon on the first line.")
"*Indicates how far to indent an line following an empty argument
list. Nil indicates to just after the paren.")
(defvar c++-imenu-generic-expression
(`
((nil
(,
(concat
"^" ; beginning of line is required
"\\(template[ \t]*<[^>]+>[ \t]*\\)?" ; there may be a "template <...>"
"\\([a-zA-Z0-9_:]+[ \t]+\\)?" ; type specs; there can be no
"\\([a-zA-Z0-9_:]+[ \t]+\\)?" ; more than 3 tokens, right?
"\\(" ; last type spec including */&
"[a-zA-Z0-9_:]+"
"\\([ \t]*[*&]+[ \t]*\\|[ \t]+\\)" ; either pointer/ref sign or whitespace
"\\)?" ; if there is a last type spec
"\\(" ; name; take that into the imenu entry
"[a-zA-Z0-9_:~]+" ; member function, ctor or dtor...
; (may not contain * because then
; "a::operator char*" would become "char*"!)
"\\|"
"\\([a-zA-Z0-9_:~]*::\\)?operator"
"[^a-zA-Z1-9_][^(]*" ; ...or operator
" \\)"
"[ \t]*([^)]*)[ \t\n]*[^ ;]" ; require something other than a ; after
; the (...) to avoid prototypes. Can't
; catch cases with () inside the parentheses
; surrounding the parameters
; (like "int foo(int a=bar()) {...}"
)) 6)
("Class"
(, (concat
"^" ; beginning of line is required
"\\(template[ \t]*<[^>]+>[ \t]*\\)?" ; there may be a "template <...>"
"class[ \t]+"
"\\([a-zA-Z0-9_]+\\)" ; this is the string we want to get
"[ \t]*[:{]"
)) 2)
;; Example of generic expression for finding prototypes, structs, unions, enums.
;; Uncomment if you want to find these too. It will be a bit slower gathering
;; the indexes.
; ("Prototypes"
; (,
; (concat
; "^" ; beginning of line is required
; "\\(template[ \t]*<[^>]+>[ \t]*\\)?" ; there may be a "template <...>"
; "\\([a-zA-Z0-9_:]+[ \t]+\\)?" ; type specs; there can be no
; "\\([a-zA-Z0-9_:]+[ \t]+\\)?" ; more than 3 tokens, right?
; "\\(" ; last type spec including */&
; "[a-zA-Z0-9_:]+"
; "\\([ \t]*[*&]+[ \t]*\\|[ \t]+\\)" ; either pointer/ref sign or whitespace
; "\\)?" ; if there is a last type spec
; "\\(" ; name; take that into the imenu entry
; "[a-zA-Z0-9_:~]+" ; member function, ctor or dtor...
; ; (may not contain * because then
; ; "a::operator char*" would become "char*"!)
; "\\|"
; "\\([a-zA-Z0-9_:~]*::\\)?operator"
; "[^a-zA-Z1-9_][^(]*" ; ...or operator
; " \\)"
; "[ \t]*([^)]*)[ \t\n]*;" ; require ';' after
; ; the (...) Can't
; ; catch cases with () inside the parentheses
; ; surrounding the parameters
; ; (like "int foo(int a=bar());"
; )) 6)
; ("Struct"
; (, (concat
; "^" ; beginning of line is required
; "\\(static[ \t]+\\)?" ; there may be static or const.
; "\\(const[ \t]+\\)?"
; "struct[ \t]+"
; "\\([a-zA-Z0-9_]+\\)" ; this is the string we want to get
; "[ \t]*[{]"
; )) 3)
; ("Enum"
; (, (concat
; "^" ; beginning of line is required
; "\\(static[ \t]+\\)?" ; there may be static or const.
; "\\(const[ \t]+\\)?"
; "enum[ \t]+"
; "\\([a-zA-Z0-9_]+\\)" ; this is the string we want to get
; "[ \t]*[{]"
; )) 3)
; ("Union"
; (, (concat
; "^" ; beginning of line is required
; "\\(static[ \t]+\\)?" ; there may be static or const.
; "\\(const[ \t]+\\)?"
; "union[ \t]+"
; "\\([a-zA-Z0-9_]+\\)" ; this is the string we want to get
; "[ \t]*[{]"
; )) 3)
))
"Imenu generic expression for C++ mode. See `imenu-generic-expression'.")
;;;###autoload
(defun c++-mode ()
@ -228,6 +323,8 @@ no args if that value is non-nil."
(set (make-local-variable 'paragraph-ignore-fill-prefix) t)
(set (make-local-variable 'require-final-newline) t)
(set (make-local-variable 'parse-sexp-ignore-comments) t)
(make-local-variable 'imenu-generic-expression)
(setq imenu-generic-expression c++-imenu-generic-expression)
(run-hooks 'c++-mode-hook)
(if c++-electric-colon
(define-key c++-mode-map ":" 'electric-c++-terminator)))