bool AtWordStart()
 {
     if (SelectionStart == 0)
     {
         return(true);
     }
     return(!(HebrewChar.IsNikud(Text[SelectionStart - 1]) || HebrewChar.IsLetter(Text[SelectionStart - 1])));
 }
        int PrevLetterPos(int cur)
        {
            int i   = Math.Min(Math.Max(0, cur - 1), 20);
            int res = Math.Max(0, this.Text.LastIndexOfAny(letters, Math.Max(0, CurLetterPos() - 1), i));

            for (i = res; i < cur; i++)
            {
                char c = this.Text[i];
                if (!(HebrewChar.IsLetter(c) || HebrewChar.IsModifier(c) || HebrewChar.IsCantillation(c)))
                {
                    return(-1);
                }
            }
            return(res);
        }
 public MBROLAElement TranslateElement(SpeechElement e, Word w)
 {
     if (e is Phoneme)
     {
         return(new MBROLAElement(TranslatePhoneme((Phoneme)e, w), 100, 100));
     }
     else if ((e is Separator) && HebrewChar.IsPunctuation(e.Latin[0]))
     {
         return(new MBROLAElement("_", 120));
     }
     else
     {
         return(new MBROLAElement("_", 100));
     }
 }
        string GetLetterWithModifiers(int letterPos)
        {
            if (letterPos < 0)
            {
                return("");
            }
            if (letterPos >= Text.Length)
            {
                return("");
            }
            if (!HebrewChar.IsLetter(Text[letterPos]))
            {
                return("");
            }
            StringBuilder sb = new StringBuilder(20);
            int           i  = letterPos;

            do
            {
                sb.Append(this.Text[i]);
                i++;
            }while ((i < this.Text.Length) && HebrewChar.IsModifier(this.Text[i]));
            return(sb.ToString());
        }
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if ((CtrlEnter != null) && ctrl && (e.KeyChar == (char)10))
            {
                e.Handled = true;
                CtrlEnter(this, new EventArgs());
                return;
            }
            if (UseNikudMethod)
            {
                bool hebrew = false, dagesh = false;
                if (shift)
                {
                    if (engToHeb.ContainsKey(e.KeyChar))
                    {
                        dagesh    = true;
                        e.KeyChar = engToHeb[e.KeyChar];
                    }
                    else if (e.KeyChar == '_')
                    {
                        CycleModifiers(VowelsA, VowelCycles);
                        e.Handled = true;
                        return;
                    }
                    else if (e.KeyChar == '+')
                    {
                        CycleModifiers(VowelsE, VowelCycles);
                        e.Handled = true;
                        return;
                    }

                    /*                else if (e.KeyChar == '|')
                     *              {
                     *                  CycleModifiers(VowelsI, VowelCycles);
                     *                  e.Handled = true;
                     *                  return;
                     *              }*/
                    else if (e.KeyChar == '}')
                    {
                        CycleModifiers(VowelsO, VowelCycles);
                        e.Handled = true;
                        return;
                    }
                    else if (e.KeyChar == '{')
                    {
                        CycleModifiers(VowelsUI, VowelCycles);
                        e.Handled = true;
                        return;
                    }
                    else if (e.KeyChar == '~')
                    {
                        string ltr = CurLetterWithModifiers();
                        if ((ltr != null) && (ltr[0] == 'ù'))
                        {
                            CycleModifiers(ShinDots, ShinCycle, SequenceDisposition.First, false);
                            e.Handled = true;
                            return;
                        }
                    }
                }
                if (HebrewChar.IsLetter(e.KeyChar))
                {
                    hebrew = true;
                }
                if (hebrew)
                {
                    e.Handled = true;
                    if (!IsInTag(SelectionStart))
                    {
                        if (!AtWordStart())
                        {
                            bool   addSchwa = false;
                            int    prev0 = CurLetterPos(), prev1 = PrevLetterPos(prev0);
                            string lPrev0 = GetLetterWithModifiers(prev0), lPrev1 = GetLetterWithModifiers(prev1);
                            if (lPrev0.Length > 0)
                            {
                                if (HebrewChar.IsEhevi(lPrev0[0]))
                                {
                                    if (lPrev0[0] == 'å')
                                    {
                                        addSchwa = lPrev0.IndexOfAny(new char[] { HebrewChar.Shuruk, HebrewChar.Holam }) < 0;
                                    }
                                    else
                                    {
                                        addSchwa = (lPrev0.IndexOfAny(HebrewChar.Vowels) < 0) && ((lPrev1 == "") || (lPrev1.IndexOfAny(HebrewChar.Vowels) < 0));
                                    }
                                }
                                else
                                {
                                    addSchwa = (lPrev0.IndexOfAny(HebrewChar.Vowels) < 0);
                                }
                            }
                            if (addSchwa && (e.KeyChar != 'å'))
                            {
                                InsertText(HebrewChar.Schwa.ToString());
                            }
                        }
                        else
                        if (HebrewChar.IsBegedKefet(e.KeyChar))
                        {
                            dagesh = true;
                        }
                    }
                    if (dagesh)
                    {
                        InsertText(e.KeyChar + HebrewChar.Dagesh.ToString());
                    }
                    else
                    {
                        InsertText(e.KeyChar.ToString());
                    }
                }
                else
                {
                    base.OnKeyPress(e);
                }
            }
            else
            {
                base.OnKeyPress(e);
            }
        }