package com.hipipal.texteditor.undo; import com.hipipal.texteditor.BuildConfig; import android.text.Editable; import android.util.Log; public class TextChangeInsert implements TextChange { protected StringBuffer mSequence; protected int mStart; /** * @param seq * the initial sequence * @param start * the start index for this sequence * */ public TextChangeInsert(CharSequence seq, int start) { mSequence = new StringBuffer(); mSequence.append(seq); mStart = start; } /** * @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 + mSequence.length(); } /** * @see com.hipipal.texteditor.undo.TextChange#append(java.lang.CharSequence) */ @Override public void append(CharSequence seq) { mSequence.append(seq); } /** * @see com.hipipal.texteditor.undo.TextChange#canMergeChangeBefore(java.lang.CharSequence, * int, int, int) */ @Override public boolean canMergeChangeBefore(CharSequence s, int start, int count, int after) { CharSequence sub; boolean append, replace; if (mSequence.toString().contains(" ")) return false; if (mSequence.toString().contains("\n")) return false; sub = s.subSequence(start, start + count); append = (start == mStart + mSequence.length()); replace = (start == mStart) && (after >= mSequence.length()) && (sub.toString().startsWith(mSequence.toString())); if (append) { // mSequence.append(sub); return true; } if (replace) { // mSequence = new StringBuffer(); // mSequence.append(sub); return true; } return false; } /** * @see com.hipipal.texteditor.undo.TextChange#canMergeChangeAfter(java.lang.CharSequence, * int, int, int) */ @Override public boolean canMergeChangeAfter(CharSequence s, int start, int before, int count) { CharSequence sub; boolean append, replace; if (mSequence.toString().contains(" ")) return false; if (mSequence.toString().contains("\n")) return false; sub = s.subSequence(start, start + count); append = (start == mStart + mSequence.length()); replace = (start == mStart) && (count >= mSequence.length()) && (sub.toString().startsWith(mSequence.toString())); if (append) { mSequence.append(sub); return true; } if (replace) { mSequence = new StringBuffer(); mSequence.append(sub); return true; } return false; } /** * @see com.hipipal.texteditor.undo.TextChange#undo(java.lang.String) */ @Override public int undo(Editable s) { if (BuildConfig.DEBUG) Log.i(TAG, "Undo Insert : deleting " + mStart + " to " + (mStart + mSequence.length())); s.replace(mStart, mStart + mSequence.length(), ""); return mStart; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "+\"" + mSequence.toString().replaceAll("\n", "~") + "\" @" + mStart; } }