changeset 52341:6a060e586596

(c-lineup-math): Don't align the operators "!=", "<=" and ">=" as assignment operators. (c-assignment-operators): New language constant that only contains the assignment operators. (c-assignment-op-regexp): New language variable used by c-lineup-math'.
author Martin Stjernholm <mast@lysator.liu.se>
date Tue, 26 Aug 2003 11:52:40 +0000
parents 600f01b30149
children a3cdc2f62039
files lisp/progmodes/cc-align.el lisp/progmodes/cc-langs.el
diffstat 2 files changed, 37 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/cc-align.el	Tue Aug 26 11:51:55 2003 +0000
+++ b/lisp/progmodes/cc-align.el	Tue Aug 26 11:52:40 2003 +0000
@@ -708,18 +708,20 @@
       (save-excursion
 	(beginning-of-line)
 	(when (c-syntactic-re-search-forward
-	       ;; This regexp avoids matches on ==.
-	       "\\(\\=\\|[^=]\\)=\\([^=]\\|$\\)"
-	       (c-point 'eol) t t)
-	  (setq equalp (- (match-beginning 2) (c-point 'boi))))))
+	       c-assignment-op-regexp
+	       (c-point 'eol) t t t)
+	  (setq equalp (- (or (match-beginning 1)
+			      (match-end 0))
+			  (c-point 'boi))))))
 
     (save-excursion
       (goto-char startpos)
       (if (or (if (c-syntactic-re-search-forward
-		   "\\(\\=\\|[^=]\\)=\\([^=]\\|$\\)"
-		   (min endpos (c-point 'eol)) t t)
+		   c-assignment-op-regexp
+		   (min endpos (c-point 'eol)) t t t)
 		  (progn
-		    (goto-char (match-beginning 2))
+		    (goto-char (or (match-beginning 1)
+				   (match-end 0)))
 		    nil)
 		t)
 	      (save-excursion
--- a/lisp/progmodes/cc-langs.el	Tue Aug 26 11:51:55 2003 +0000
+++ b/lisp/progmodes/cc-langs.el	Tue Aug 26 11:52:40 2003 +0000
@@ -544,6 +544,15 @@
 	   '("defined"))
   pike '("defined" "efun" "constant"))
 
+(c-lang-defconst c-assignment-operators
+  "List of all assignment operators."
+  t    '("=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" "&=" "^=" "|=")
+  java (append (c-lang-const c-assignment-operators)
+	       '(">>>="))
+  c++  (append (c-lang-const c-assignment-operators)
+	       '("and_eq" "or_eq" "xor_eq"))
+  idl  nil)
+
 (c-lang-defconst c-operators
   "List describing all operators, along with their precedence and
 associativity.  The order in the list corresponds to the precedence of
@@ -686,11 +695,7 @@
       (right-assoc-sequence "?" ":")
 
       ;; Assignment.
-      (right-assoc "=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" "&=" "^=" "|="
-		   ,@(when (c-major-mode-is 'java-mode)
-		       '(">>>="))
-		   ,@(when (c-major-mode-is 'c++-mode)
-		       '("and_eq" "or_eq" "xor_eq")))
+      (right-assoc ,@(c-lang-const c-assignment-operators))
 
       ;; Exception.
       ,@(when (c-major-mode-is 'c++-mode)
@@ -788,6 +793,23 @@
 (c-lang-defvar c-nonsymbol-token-regexp
   (c-lang-const c-nonsymbol-token-regexp))
 
+(c-lang-defconst c-assignment-op-regexp
+  ;; Regexp matching all assignment operators and only them.  The
+  ;; beginning of the first submatch is used to detect the end of the
+  ;; token, along with the end of the whole match.
+  t (if (c-lang-const c-assignment-operators)
+	(concat
+	 ;; Need special case for "=" since it's a prefix of "==".
+	 "=\\([^=]\\|$\\)"
+	 "\\|"
+	 (c-make-keywords-re nil
+	   (set-difference (c-lang-const c-assignment-operators)
+			   '("=")
+			   :test 'string-equal)))
+      "\\<\\>"))
+(c-lang-defvar c-assignment-op-regexp
+  (c-lang-const c-assignment-op-regexp))
+
 (c-lang-defconst c-<-op-cont-regexp
   ;; Regexp matching the second and subsequent characters of all
   ;; multicharacter tokens that begin with "<".
@@ -1441,7 +1463,7 @@
 
 (c-lang-defconst c-opt-<>-sexp-key
   ;; Adorned regexp matching keywords that can be followed by an angle
-  ;; bracket sexp.
+  ;; bracket sexp.  Always set when `c-recognize-<>-arglists' is.
   t (if (c-lang-const c-recognize-<>-arglists)
 	(c-make-keywords-re t (c-lang-const c-<>-sexp-kwds))))
 (c-lang-defvar c-opt-<>-sexp-key (c-lang-const c-opt-<>-sexp-key))