'Calculate format decision state information and move onto the next token.
Before moving onto the next token, we first calculate the format decision
state given the current token and its formatting decisions. Then the format
decision state is set up so that the next token can be added.
Returns:
The penalty for the number of characters over the column limit.'

def MoveStateToNextToken(self):

    current = self.next_token
    if ((not current.OpensScope()) and (not current.ClosesScope())):
        self.lowest_level_on_line = min(self.lowest_level_on_line, self.paren_level)
    if current.OpensScope():
        last = self.stack[(-1)]
        new_indent = (style.Get('CONTINUATION_INDENT_WIDTH') + last.last_space)
        self.stack.append(_ParenState(new_indent, self.stack[(-1)].last_space))
        self.paren_level += 1
    if ((len(self.stack) > 1) and current.ClosesScope()):
        self.stack[(-2)].last_space = self.stack[(-1)].last_space
        self.stack.pop()
        self.paren_level -= 1
    is_multiline_string = (current.is_string and ('\n' in current.value))
    if is_multiline_string:
        self.column += len(current.value.split('\n')[0])
    elif (not current.is_pseudo_paren):
        self.column += len(current.value)
    self.next_token = self.next_token.next_token
    penalty = 0
    if ((not current.is_pylint_comment) and (self.column > self.column_limit)):
        excess_characters = (self.column - self.column_limit)
        penalty += (style.Get('SPLIT_PENALTY_EXCESS_CHARACTER') * excess_characters)
    if is_multiline_string:
        self.column = len(current.value.split('\n')[(-1)])
    return penalty
