From: Alan Mackenzie Date: Sat, 27 Aug 2011 08:41:23 +0000 (+0000) Subject: progmodes/cc-menus.el (cc-imenu-c++-generic-expression): Make it handle X-Git-Tag: emacs-pretest-24.0.90~104^2~152^2~57 X-Git-Url: https://code.delx.au/gnu-emacs/commitdiff_plain/3fc9b2184582296ffe4a602d87534f35ba4b4919 progmodes/cc-menus.el (cc-imenu-c++-generic-expression): Make it handle function pointer parameters properly. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93f7bd1a20..8a57fe7540 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-08-27 Alan Mackenzie + + * progmodes/cc-menus.el (cc-imenu-c++-generic-expression): Make it + handle function pointer parameters properly. + 2011-08-27 Martin Rudalics * window.el (display-buffer-reuse-window): Fix case where diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el index f53a7da518..4e9350de42 100644 --- a/lisp/progmodes/cc-menus.el +++ b/lisp/progmodes/cc-menus.el @@ -108,8 +108,11 @@ A sample value might look like: `\\(_P\\|_PROTO\\)'.") "[^" c-alnum "_:<>~]" ; match any non-identifier char "\\([" c-alpha "_][" c-alnum "_:<>~]*\\)" ; match function name "\\([ \t\n]\\|\\\\\n\\)*(" ; see above, BUT the arg list - "\\([ \t\n]\\|\\\\\n\\)*\\([^ \t\n(*][^)]*\\)?)" ; must not start - "\\([ \t\n]\\|\\\\\n\\)*[^ \t\n;(]" ; with an asterisk or parentheses + "\\([ \t\n]\\|\\\\\n\\)*" ; must not start + "\\([^ \t\n(*]" ; with an asterisk or parentheses + "[^()]*\\(([^()]*)[^()]*\\)*" ; Maybe function pointer arguments + "\\)?)" + "\\([ \t\n]\\|\\\\\n\\)*[^ \t\n;(]" ) 1) ;; Special case for definitions using phony prototype macros like: ;; `int main _PROTO( (int argc,char *argv[]) )'. diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el index a0892b5ebb..59454043c4 100644 --- a/lisp/textmodes/paragraphs.el +++ b/lisp/textmodes/paragraphs.el @@ -456,21 +456,25 @@ sentences. Also, every paragraph boundary terminates sentences as well." (sentence-end (sentence-end))) (while (< arg 0) (let ((pos (point)) - ;; We used to use (start-of-paragraph-text), but this can - ;; prevent sentence-end from matching if it is anchored at - ;; BOL and the paragraph starts indented. - (par-beg (save-excursion (backward-paragraph) (point)))) - (if (and (re-search-backward sentence-end par-beg t) - (or (< (match-end 0) pos) - (re-search-backward sentence-end par-beg t))) - (goto-char (match-end 0)) - (goto-char par-beg))) + (par-beg + (save-excursion + (start-of-paragraph-text) + ;; Move PAR-BEG back over indentation + ;; to allow s1entence-end to match if it is anchored at + ;; BOL and the paragraph starts indented. + (beginning-of-line) + (point)))) + (if (and (re-search-backward sentence-end par-beg t) + (or (< (match-end 0) pos) + (re-search-backward sentence-end par-beg t))) + (goto-char (match-end 0)) + (goto-char par-beg))) (setq arg (1+ arg))) (while (> arg 0) (let ((par-end (save-excursion (end-of-paragraph-text) (point)))) - (if (re-search-forward sentence-end par-end t) - (skip-chars-backward " \t\n") - (goto-char par-end))) + (if (re-search-forward sentence-end par-end t) + (skip-chars-backward " \t\n") + (goto-char par-end))) (setq arg (1- arg))) (constrain-to-field nil opoint t)))