Implement backspace in the current cluster for Myanmar

Bug: 13945569
Change-Id: I738b01ede25fd731a2e10c4775f5511ce9bb54c8
main
Jean Chalard 2014-05-13 14:22:26 +09:00
parent 61ddac28de
commit d23d1970b0
1 changed files with 27 additions and 3 deletions

View File

@ -207,9 +207,33 @@ public class MyanmarReordering implements Combiner {
return clearAndGetResultingEvent(newEvent); return clearAndGetResultingEvent(newEvent);
} }
} else if (Constants.CODE_DELETE == newEvent.mKeyCode) { } else if (Constants.CODE_DELETE == newEvent.mKeyCode) {
if (mCurrentEvents.size() > 0) { final Event lastEvent = getLastEvent();
mCurrentEvents.remove(mCurrentEvents.size() - 1); final int eventSize = mCurrentEvents.size();
return null; if (null != lastEvent) {
if (VOWEL_E == lastEvent.mCodePoint) {
// We have a VOWEL_E at the end. There are four cases.
// - The vowel is the only code point in the buffer. Remove it.
// - The vowel is preceded by a ZWNJ. Remove both vowel E and ZWNJ.
// - The vowel is preceded by a consonant/medial, remove the consonant/medial.
// - In all other cases, it's strange, so just remove the last code point.
if (eventSize <= 1) {
mCurrentEvents.clear();
} else { // eventSize >= 2
final int previousCodePoint = mCurrentEvents.get(eventSize - 2).mCodePoint;
if (previousCodePoint == ZERO_WIDTH_NON_JOINER) {
mCurrentEvents.remove(eventSize - 1);
mCurrentEvents.remove(eventSize - 2);
} else if (isConsonantOrMedial(previousCodePoint)) {
mCurrentEvents.remove(eventSize - 2);
} else {
mCurrentEvents.remove(eventSize - 1);
}
}
return null;
} else if (eventSize > 0) {
mCurrentEvents.remove(eventSize - 1);
return null;
}
} }
} }
// This character is not part of the combining scheme, so we should reset everything. // This character is not part of the combining scheme, so we should reset everything.