1
0
mirror of https://github.com/chylex/IntelliJ-IdeaVim.git synced 2025-08-04 15:59:04 +02:00
olegshpynov 2010-03-25 16:34:16 +00:00
parent 392d173ace
commit 47094cef2b
2 changed files with 76 additions and 6 deletions
src/com/maddyhome/idea/vim

View File

@ -1,7 +1,8 @@
package com.maddyhome.idea.vim.common;
/*
* IdeaVim - A Vim emulator plugin for IntelliJ Idea
* Copyright (C) 2003-2004 Rick Maddy
* Copyright (C) 2003-2005 Rick Maddy
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -41,6 +42,33 @@ public class TextRange
return getEndOffset() - getStartOffset();
}
public int getMaxLength()
{
int max = 0;
for (int i = 0; i < size(); i++)
{
max = Math.max(max, getEndOffsets()[i] - getStartOffsets()[i]);
}
return max;
}
public int getSelectionCount()
{
int res = 0;
for (int i = 0; i < size(); i++)
{
res += getEndOffsets()[i] - getStartOffsets()[i];
}
return res;
}
public int size()
{
return starts.length;
}
public int getStartOffset()
{
return starts[0];
@ -61,6 +89,50 @@ public class TextRange
return ends;
}
public TextRange normalize()
{
if (size() == 1 && getEndOffset() < getStartOffset())
{
int t = starts[0];
starts[0] = ends[0];
ends[0] = t;
}
return this;
}
public boolean normalize(final int fileSize)
{
if (size() == 1)
{
normalize();
starts[0] = Math.max(0, Math.min(starts[0], fileSize));
if (starts[0] == fileSize){
return false;
}
ends[0] = Math.max(0, Math.min(ends[0], fileSize));
}
return true;
}
public String toString()
{
final StringBuffer sb = new StringBuffer();
sb.append("TextRange");
sb.append("{starts=").append(starts == null ? "null" : "");
for (int i = 0; starts != null && i < starts .length; ++i)
{
sb.append(i == 0 ? "" : ", ").append(starts[i]);
}
sb.append(", ends=").append(ends == null ? "null" : "");
for (int i = 0; ends != null && i < ends .length; ++i)
{
sb.append(i == 0 ? "" : ", ").append(ends[i]);
}
sb.append('}');
return sb.toString();
}
private int[] starts;
private int[] ends;
}

View File

@ -1630,11 +1630,9 @@ public class ChangeGroup extends AbstractActionGroup
*/
private boolean deleteText(Editor editor, DataContext context, TextRange range, int type)
{
if (range.size() == 1 && range.getStartOffset() > range.getEndOffset())
{
int start = Math.max(0, Math.min(range.getStartOffset(), EditorHelper.getFileSize(editor, true)));
int end = Math.max(0, Math.min(range.getEndOffset(), EditorHelper.getFileSize(editor, true)));
range = new TextRange(end, start);
// Fix for http://youtrack.jetbrains.net/issue/VIM-35
if (!range.normalize(EditorHelper.getFileSize(editor, true))){
return false;
}
if (type == 0 || CommandGroups.getInstance().getRegister().storeText(editor, context, range, type, true, false))