anchor.diff:         tabStops: result.tabStops})))
   
   (function indentMode (text options)
  -  (var result (processText text options INDENT_MODE))
  +  (set options (parseOptions options))
  +  (var result)
  +  (when options.pressedEnter
  +    (set options.stabilizeNewline true)
  +    (set result (processText text options PAREN_MODE))
  +    (set options.stabilizeNewline false)
  +    (set options.cursorX result.cursorX)
  +    (set text result.text))
  +  (set result (processText text options INDENT_MODE))
     (publicResult result))
   
   (function parenMode (text options)
  +  (set options (parseOptions options))
     (var result (processText text options PAREN_MODE))
  -  (publicResult result))
  -
  -(function newlineMode (text options)
  -  (set options.isNewlineMode true)
  -  (set result (processText text options PAREN_MODE))
     (publicResult result))
   
   (var API
  
positive.code:       (correctParenTrail result result.x))
  
      (= result.mode PAREN_MODE)
      (when (&& result.isNewlineMode (= result.cursorLine result.lineNo))
        (splitLineForStability result))
      (correctIndent result)))
  
  (function onLeadingCloseParen (result)
    (set result.skipChar true)
  
negative.code:   (|| (= c "}") (= c ")") (= c "]")))
  
  ;;------------------------------------------------------------------------------
  ;; Options Structure
  ;;------------------------------------------------------------------------------
  
  (function parseOptions (options)
    (object
      cursorX options.cursorX
      cursorLine options.cursorLine
      cursorDx options.cursorDx
      previewCursorScope options.previewCursorScope
      pressedEnter options.pressedEnter))
  
  ;;------------------------------------------------------------------------------
  ;; Result Structure
  ;;------------------------------------------------------------------------------
  
  