/** deletes the selected text */ public void delete(final TextSelection selection) { final CursorPosition from = selection.from(); final CursorPosition to = selection.to(); final BlockToLineMapping fromMapping = findBlockFor(from.getLine()); final int fromBlock = fromMapping.index; final int fromLine = fromMapping.line; final int fromCharacter = from.getCharacter(); final BlockToLineMapping toMapping = findBlockFor(to.getLine()); final int toBlock = toMapping.index; final int toLine = toMapping.line; final int toCharacter = to.getCharacter(); if (fromBlock == toBlock) { final TextBlock block = (TextBlock) blocks.elementAt(fromBlock); block.delete(fromLine, fromCharacter, toLine, toCharacter); } else { TextBlock block = (TextBlock) blocks.elementAt(toBlock); block.deleteTo(toLine, toCharacter); block = (TextBlock) blocks.elementAt(fromBlock); block.deleteFrom(fromLine, fromCharacter); fromMapping.textBlock.join(toMapping.textBlock); blocks.removeElementAt(toMapping.index); for (int i = fromBlock + 1; i < toBlock; i++) { blocks.removeElementAt(i); } } }