ccmode: Operator Line-Up

 
 11.3.3 Operator Line-Up Functions
 ---------------------------------
 
 The line-up functions here calculate the indentation for lines which
 start with an operator, by lining it up with something on the previous
 line.
 
  -- Function: c-lineup-argcont
      Line up a continued argument.  E.g.:
 
           foo (xyz, aaa + bbb + ccc
                     + ddd + eee + fff);  <- c-lineup-argcont
 
      Only continuation lines like this are touched, ‘nil’ is returned on
      lines which are the start of an argument.
 
      Within a gcc ‘asm’ block, ‘:’ is recognized as an argument
      separator, but of course only between operand specifications, not
      in the expressions for the operands.
 
      Works with: ‘arglist-cont’, ‘arglist-cont-nonempty’.
 
  -- Function: c-lineup-arglist-operators
      Line up lines starting with an infix operator under the open paren.
      Return ‘nil’ on lines that don’t start with an operator, to leave
      those cases to other line-up functions.  Example:
 
           if (  x < 10
              || at_limit (x,     <- c-lineup-arglist-operators                list)  <- c-lineup-arglist-operators returns nil   )
 
      Since this function doesn’t do anything for lines without an infix
      operator you typically want to use it together with some other
      lineup settings, e.g., as follows (the ‘arglist-close’ setting is
      just a suggestion to get a consistent style):
 
           (c-set-offset 'arglist-cont
                         '(c-lineup-arglist-operators 0))
           (c-set-offset 'arglist-cont-nonempty
                         '(c-lineup-arglist-operators c-lineup-arglist))
           (c-set-offset 'arglist-close
                         '(c-lineup-arglist-close-under-paren))
 
      Works with: ‘arglist-cont’, ‘arglist-cont-nonempty’.
 
  -- Function: c-lineup-assignments
      Line up the current line after the assignment operator on the first
      line in the statement.  If there isn’t any, return ‘nil’ to allow
      stacking with other line-up functions.  If the current line
      contains an assignment operator too, try to align it with the first
      one.
 
      Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
      ‘arglist-cont-nonempty’.
 
  -- Function: c-lineup-math
      Like ‘c-lineup-assignments’ but indent with ‘c-basic-offset’ if no
      assignment operator was found on the first line.  I.e., this
      function is the same as specifying a list ‘(c-lineup-assignments
      +)’.  It’s provided for compatibility with old configurations.
 
      Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
      ‘arglist-cont-nonempty’.
 
  -- Function: c-lineup-cascaded-calls
      Line up “cascaded calls” under each other.  If the line begins with
      ‘->’ or ‘.’ and the preceding line ends with one or more function
      calls preceded by the same token, then the arrow is lined up with
      the first of those tokens.  E.g.:
 
           r = proc->add(17)->add(18)
                   ->add(19) +         <- c-lineup-cascaded-calls  offset;                   <- c-lineup-cascaded-calls (inactive)
 
      In any other situation ‘nil’ is returned to allow use in list
      expressions.
 
      Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
      ‘arglist-cont-nonempty’.
 
  -- Function: c-lineup-streamop
      Line up C++ stream operators (i.e., ‘<<’ and ‘>>’).
 
      Works with: ‘stream-op’.
 
  -- Function: c-lineup-string-cont
      Line up a continued string under the one it continues.  A continued
      string in this sense is where a string literal follows directly
      after another one.  E.g.:
 
           result = prefix + "A message "
                             "string.";    <- c-lineup-string-cont
 
      ‘nil’ is returned in other situations, to allow stacking with other
      lineup functions.
 
      Works with: ‘topmost-intro-cont’, ‘statement-cont’, ‘arglist-cont’,
      ‘arglist-cont-nonempty’.