void ToggleModifier(int letterPos, char c, SequenceDisposition disposition) { string curLetter = GetLetterWithModifiers(letterPos); int i = curLetter.IndexOf(c); if (i > 0) { ToggleModifier(letterPos, c, disposition, false); } else { ToggleModifier(letterPos, c, disposition, true); } }
void CycleModifiers(char[] modifiers, char[][] exclusivityGroup, SequenceDisposition disposition, bool emptyStep) { string curLetter = CurLetterWithModifiers(); int i = curLetter.IndexOfAny(modifiers); if (i < 0) { int sel = CurLetterPos() + curLetter.Length; foreach (char[] arr in exclusivityGroup) { if (arr == modifiers) { continue; } foreach (char toDelete in arr) { if (curLetter.IndexOf(toDelete) > -1) { ToggleModifier(toDelete); ModifierRemoved(CurLetterPos(), toDelete, exclusivityGroup); } } } ToggleModifier(modifiers[0], disposition); ModifierAdded(CurLetterPos(), modifiers[0], exclusivityGroup); } else { char c = curLetter[i]; int j = Array.IndexOf(modifiers, c); ToggleModifier(c); ModifierRemoved(CurLetterPos(), c, exclusivityGroup); j++; if ((!emptyStep) && (j >= modifiers.Length)) { j = 0; } if (j < modifiers.Length) { ToggleModifier(modifiers[j], disposition); ModifierAdded(CurLetterPos(), modifiers[j], exclusivityGroup); } } }
void ToggleModifier(int letterPos, char c, SequenceDisposition disposition, bool toggleOn) { string letter = GetLetterWithModifiers(letterPos); string curLetter = CurLetterWithModifiers(); int sel = CurLetterPos() + curLetter.Length; int i = letter.IndexOf(c); if ((i > 0) && (!toggleOn)) { for (; i > 0; i = letter.IndexOf(c)) { letter = letter.Remove(i); sel--; } } else if (toggleOn) { int pos; switch (disposition) { case SequenceDisposition.Last: pos = letter.Length; break; case SequenceDisposition.Second: pos = Math.Min(2, letter.Length); break; case SequenceDisposition.First: default: pos = 1; break; } letter = letter.Insert(pos, c.ToString()); sel++; } ReplaceLetter(letterPos, letter); this.SelectionStart = sel; }
void ToggleModifier(char c, SequenceDisposition disposition) { ToggleModifier(CurLetterPos(), c, disposition); }