         # Now that we've done that, we can annul stuff.
         @endDrag()
 
-  Editor::reparseRawReplace = (oldBlock) ->
+  Editor::reparseRawReplace = (oldBlock, originalTrigger = oldBlock) ->
+    # Get the parent in case we need to bubble
+    # up later
+    parent = oldBlock.visParent()
+
+    # Attempt to parse the block we are given out-of-context
     try
       newParse = @mode.parse(oldBlock.stringify(@mode), wrapAtRoot: true)
       newBlock = newParse.start.next.container

          newBlock.rawReplace oldBlock

    catch e
      throw e
      return false

  Editor::findForReal = (token) ->
    head = @tree.start; i = 0

        cursorPosition = @getRecoverableCursorPosition()

      # The second of these is a reparse attempt.
      #
      # If we can, try to reparse the focus
      # value.
      #
      # When reparsing occurs, we first try to treat the socket
      # as a separate block (inserting parentheses, etc), then fall
      # back on reparsing it with original text before giving up.
      #
      # For instance:
      #
      # (a * b)
      #   -> edits [b] to [b + c]
      #   -> reparse to b + c
      #   -> inserts with parens to (a * (b + c))
      #   -> finished.
      #
      # OR
      #
      # function (a) {}
      #   -> edits [a] to [a, b]
      #   -> reparse to a, b
      #   -> inserts with parens to function((a, b)) {}
      #   -> FAILS.
      #   -> Fall back to raw reparsing the parent with unparenthesized text
      #   -> Reparses function(a, b) {} with two paremeters.
      #   -> Finsihed.
      unless @textFocus.handwritten
        newParse = null
        string = @textFocus.stringify(@mode).trim()
