From 66bb9533fc77963c495de7f33ec6dc8e4d342a55 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sun, 24 Aug 2014 20:38:11 +0000 Subject: [PATCH] Make ">>" act as double template ender in C++ Mode. cc-langs.el (c->-op-cont-tokens): New lang-const split off from c->-op-cont-re. (c->-op-cont-tokens): Change to use the above. (c->-op-without->-cont-regexp): New lang-const. cc-engine.el (c-forward-<>-arglist-recur): Use c->-op-without->-cont-regexp in place of c->-op-cont-tokens. --- lisp/ChangeLog | 11 +++++++++++ lisp/progmodes/cc-engine.el | 2 +- lisp/progmodes/cc-langs.el | 39 +++++++++++++++++++++++++++++---------- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 920eea268f4..5b1c0b1b386 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2014-08-24 Alan Mackenzie + + Make ">>" act as double template ender in C++ Mode. + * progmodes/cc-langs.el (c->-op-cont-tokens): New lang-const split + off from c->-op-cont-re. + (c->-op-cont-tokens): Change to use the above. + (c->-op-without->-cont-regexp): New lang-const. + * progmodes/cc-engine.el (c-forward-<>-arglist-recur): Use + c->-op-without->-cont-regexp in place of c->-op-cont-tokens. + + 2014-08-23 Alan Mackenzie * progmodes/cc-fonts.el (c-font-lock-declarators): Fix infinite diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 626e131ed22..8283bb38eae 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -5944,7 +5944,7 @@ comment at the start of cc-engine.el for more info." ;; Either an operator starting with '>' or the end of ;; the angle bracket arglist. - (if (looking-at c->-op-cont-regexp) + (if (looking-at c->-op-without->-cont-regexp) (progn (goto-char (match-end 0)) t) ; Continue the loop. diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 42b6f5964c2..2bf660a32eb 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -1217,22 +1217,41 @@ operators." (c-lang-defvar c-<-op-cont-regexp (c-lang-const c-<-op-cont-regexp)) +(c-lang-defconst c->-op-cont-tokens + ;; A list of second and subsequent characters of all multicharacter tokens + ;; that begin with ">". + t (c-filter-ops (c-lang-const c-all-op-syntax-tokens) + t + "\\`>." + (lambda (op) (substring op 1))) + java (c-filter-ops (c-lang-const c-all-op-syntax-tokens) + t + "\\`>[^>]\\|\\`>>[^>]" + (lambda (op) (substring op 1)))) + (c-lang-defconst c->-op-cont-regexp ;; Regexp matching the second and subsequent characters of all ;; multicharacter tokens that begin with ">". - t (c-make-keywords-re nil - (c-filter-ops (c-lang-const c-all-op-syntax-tokens) - t - "\\`>." - (lambda (op) (substring op 1)))) - java (c-make-keywords-re nil - (c-filter-ops (c-lang-const c-all-op-syntax-tokens) - t - "\\`>[^>]\\|\\`>>[^>]" - (lambda (op) (substring op 1))))) + t (c-make-keywords-re nil (c-lang-const c->-op-cont-tokens))) (c-lang-defvar c->-op-cont-regexp (c-lang-const c->-op-cont-regexp)) +(c-lang-defconst c->-op-without->-cont-regexp + ;; Regexp matching the second and subsequent characters of all + ;; multicharacter tokens that begin with ">" except for those beginning with + ;; ">>". + t (c-make-keywords-re nil + (set-difference + (c-lang-const c->-op-cont-tokens) + (c-filter-ops (c-lang-const c-all-op-syntax-tokens) + t + "\\`>>" + (lambda (op) (substring op 1))) + :test 'string-equal))) + +(c-lang-defvar c->-op-without->-cont-regexp + (c-lang-const c->-op-without->-cont-regexp)) + (c-lang-defconst c-stmt-delim-chars ;; The characters that should be considered to bound statements. To ;; optimize `c-crosses-statement-barrier-p' somewhat, it's assumed to -- 2.11.4.GIT