]> code.delx.au - gnu-emacs/blobdiff - lisp/progmodes/cc-align.el
* progmodes/python.el: Enhancements to navigation commands.
[gnu-emacs] / lisp / progmodes / cc-align.el
index df0f9883877dc078122f7f94ff303ccae7a591b3..b12020b26be3e3ab707fe29f44f3d3d3b81a23f4 100644 (file)
@@ -1,18 +1,17 @@
 ;;; cc-align.el --- custom indentation functions for CC Mode
 
-;; Copyright (C) 1985, 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-;;   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1987, 1992-2012  Free Software Foundation, Inc.
 
 ;; Authors:    2004- Alan Mackenzie
 ;;             1998- Martin Stjernholm
 ;;             1992-1999 Barry A. Warsaw
-;;             1987 Dave Detlefs and Stewart Clamen
+;;             1987 Dave Detlefs
+;;             1987 Stewart Clamen
 ;;             1985 Richard M. Stallman
 ;; Maintainer: bug-cc-mode@gnu.org
 ;; Created:    22-Apr-1997 (split from cc-mode.el)
-;; Version:    See cc-mode.el
-;; Keywords:   c languages oop
+;; Keywords:   c languages
+;; Package:    cc-mode
 
 ;; This file is part of GNU Emacs.
 
@@ -906,8 +905,48 @@ Works with: objc-method-call-cont."
           )
       (- target-col open-bracket-col extra))))
 
+(defun c-lineup-ObjC-method-call-colons (langelem)
+  "Line up selector args as Project Builder / XCode: colons of first
+   selector portions on successive lines are aligned.  If no decision can
+   be made return NIL, so that other lineup methods can be tried.  This is
+   typically chained with `c-lineup-ObjC-method-call'.
+
+Works with: objc-method-call-cont."
+  (save-excursion
+    (catch 'no-idea
+      (let* ((method-arg-len (progn
+                              (back-to-indentation)
+                              (if (search-forward ":" (c-point 'eol) 'move)
+                                  (- (point) (c-point 'boi))
+                                ; no complete argument to indent yet
+                                (throw 'no-idea nil))))
+
+            (extra (save-excursion 
+                      ; indent parameter to argument if needed
+                     (back-to-indentation)
+                     (c-backward-syntactic-ws (c-langelem-pos langelem))
+                     (if (eq ?: (char-before))
+                         c-objc-method-parameter-offset 0)))
+
+            (open-bracket-col (c-langelem-col langelem))
+
+            (arg-ralign-colon-ofs (progn
+                       (forward-char) ; skip over '['
+                       ; skip over object/class name
+                       ; and first argument
+                       (c-forward-sexp 2)
+                       (if (search-forward ":" (c-point 'eol) 'move)
+                           (- (current-column) open-bracket-col
+                              method-arg-len extra)
+                         ; previous arg has no param
+                         c-objc-method-arg-unfinished-offset))))
+
+       (if (>= arg-ralign-colon-ofs c-objc-method-arg-min-delta-to-bracket)
+           (+ arg-ralign-colon-ofs extra)
+         (throw 'no-idea nil))))))
+
 (defun c-lineup-ObjC-method-args (langelem)
-  "Line up the colons that separate args.
+  "Line up the colons that separate args in a method declaration.
 The colon on the current line is aligned with the one on the first
 line.
 
@@ -931,7 +970,7 @@ Works with: objc-method-args-cont."
          c-basic-offset)))))
 
 (defun c-lineup-ObjC-method-args-2 (langelem)
-  "Line up the colons that separate args.
+  "Line up the colons that separate args in a method declaration.
 The colon on the current line is aligned with the one on the previous
 line.
 
@@ -1292,5 +1331,4 @@ For other semicolon contexts, no determination is made."
 \f
 (cc-provide 'cc-align)
 
-;; arch-tag: 4d71ed28-bf51-4509-a148-f39669669a2e
 ;;; cc-align.el ends here