public static bool IsConsonantComb(FrenchCharComb cc) { var c = cc.Comb; return(cc.PronSet && IsConsonantPron(cc) || c.Length == 1 && ConsonantChars.Contains(c[0]) || ConsonantMultiCharCombs.Contains(c)); }
public static bool IsVowelComb(FrenchCharComb cc) { var c = cc.Comb; return(cc.PronSet && IsVowelPron(cc) || c.Length == 1 && VowelChars.Contains(c[0]) || VowelMultiCharCombs.Contains(c) || c.Length > 1 && IsNasalizable(c.Substring(0, c.Length - 1)) && (c[c.Length - 1] == 'm' || c[c.Length - 1] == 'n')); }
public static bool IsVowelPron(FrenchCharComb cc) { foreach (var p in cc.GetPron()) { if (SingleCharVowelPhenomene.Contains(p)) { return(true); } } return(false); }
public static LinkedListNode <FrenchCharComb> MergeNext(LinkedListNode <FrenchCharComb> cc) { var a = cc.Value.Comb + cc.Next.Value.Comb; var b = new FrenchCharComb(a, cc.Value.StartPos); var l = cc.List; var p = cc.Previous; l.Remove(cc.Next); l.Remove(cc); return(p == null?l.AddAfter(p, b) : l.AddFirst(b)); }
public UnrecognizedComb(FrenchCharComb comb) : this($"Char comb {comb.Comb} unrecognized") { }
public bool HasTailClosedSyllable_Contains(FrenchCharComb cc) => cc.Syll == SyllableList.Last.Value && cc.Syll.VowelComb == cc.Syll.LastComb;
public string GetPreviousChars(FrenchCharComb cc, int n) => Content.Substring(cc.StartPos - n, n);
public bool HasPreviousChars(FrenchCharComb cc, int n) => cc.StartPos - n >= 0;
public string GetNextChars(FrenchCharComb cc, int n) { return(Content.Substring(cc.StartPos + cc.Comb.Length, n)); }
public bool HasNextChars(FrenchCharComb cc, int n) { return(cc.StartPos + cc.Comb.Length + n <= Content.Length); }
public static bool IsConsonantPron(FrenchCharComb cc) { return(!IsVowelPron(cc)); }
public static bool IsSemiVowelComb(FrenchCharComb cc) => SemiVowelComb.Contains(cc.Comb);