public SyllablePattern(Word.Stress result, SyllablePatternAnchor anchor)
 {
     Result    = result;
     Syllables = new List <SyllableMask>();
     Comment   = null;
     Anchor    = anchor;
 }
        public SyllablePattern?PlaceStress(List <SyllablePattern> StressHeuristics, Word.Stress DefaultStress)
        {
            /*            HebrewParser.Log.Analyzer.Write("/" + TranslitSyllables + "/");
             *          if (Tag != TagTypes.Unrecognized)
             *              HebrewParser.Log.Analyzer.WriteLine(" (tagged " + Tag.ToString() + ")");*/
            if (CantillationMarks.Count > 0)
            {
                StressPosition = Stress.None;
                for (int i = Syllables.Count - 1; (i >= 0) && (i > Syllables.Count - 3); i--)
                {
                    if (Syllables[i].CantillationMarks.Count > 0)
                    {
                        StressPosition = (Stress)(Syllables.Count - i);
                        if (!(Syllables[i].CantillationMarks.Contains(HebrewChar.Pashta) && (CantillationMarks.Count > 1)))
                        {
                            break;
                        }
                    }
                }
                //(" set to " + StressPosition.ToString() + " by cantillation mark");
            }
            else if ((Tag & TagTypes.Stress) != TagTypes.Unrecognized)
            {
                switch (Tag & TagTypes.Stress)
                {
                case TagTypes.Unstressed:
                    StressPosition = Stress.None;
                    break;

                case TagTypes.Milra:
                    StressPosition = Stress.Milra;
                    break;

                case TagTypes.Milel:
                    StressPosition = Stress.Milel;
                    break;

                case TagTypes.MilelDMilel:
                    StressPosition = Stress.MilelDMilel;
                    break;
                }
            }
            else
            {
                foreach (SyllablePattern p in StressHeuristics)
                {
                    if (p.Match(this))
                    {
                        StressPosition = p.Result;
                        return(p);
                    }
                }
                StressPosition = DefaultStress;
                //                HebrewParser.Log.Analyzer.WriteLine(" defaulted to " + StressPosition.ToString());
            }
            if ((int)StressPosition > Syllables.Count)
            {
                StressPosition = (Stress)Syllables.Count;
                //                HebrewParser.Log.Analyzer.WriteLine("\t^--- Falling back to " + StressPosition.ToString());
            }
            return(null);
        }