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); }