package com.hipipal.texteditor.undo;
import com.hipipal.texteditor.BuildConfig;
import android.text.Editable;
import android.util.Log;
public class TextChangeDelete implements TextChange {
protected StringBuffer mSequence;
protected int mStart;
/**
* @param seq
* the sequence being deleted
* @param start
* the start index
*/
public TextChangeDelete(CharSequence seq, int start) {
mSequence = new StringBuffer();
mSequence.append(seq);
mStart = start;
}
/**
* @see com.hipipal.texteditor.undo.TextChange#undo(android.text.Editable)
*/
@Override
public int undo(Editable s) {
s.insert(mStart, mSequence);
return mStart + mSequence.length();
}
/**
* @see com.hipipal.texteditor.undo.TextChange#getCaret()
*/
@Override
public int getCaret() {
if (mSequence.toString().contains(" "))
return -1;
if (mSequence.toString().contains("\n"))
return -1;
return mStart;
}
/**
* @see com.hipipal.texteditor.undo.TextChange#append(java.lang.CharSequence)
*/
@Override
public void append(CharSequence seq) {
mSequence.insert(0, seq);
if (BuildConfig.DEBUG)
Log.d(TAG, mSequence.toString());
mStart -= seq.length();
}
/**
* @see com.hipipal.texteditor.undo.TextChange#canMergeChangeAfter(java.lang.CharSequence,
* int, int, int)
*/
@Override
public boolean canMergeChangeBefore(CharSequence s, int start, int count, int after) {
CharSequence sub;
if (mSequence.toString().contains(" "))
return false;
if (mSequence.toString().contains("\n"))
return false;
if ((count != 1) || (start + count != mStart))
return false;
sub = s.subSequence(start, start + count);
append(sub);
return true;
}
/**
* @see com.hipipal.texteditor.undo.TextChange#canMergeChangeBefore(java.lang.CharSequence,
* int, int, int)
*/
@Override
public boolean canMergeChangeAfter(CharSequence s, int start, int before, int count) {
return false;
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "-\"" + mSequence.toString().replaceAll("\n", "~") + "\" @" + mStart;
}
}