Ejemplo n.º 1
0
 public static Rule Rule3e()
 {
     return(R.Rule(c => c
                   .Id("p1c12r3e")
                   .From(1100).To(1200)
                   .Query(q => q
                          .Scope("syllable")
                          .Match(m => m.Phon("e").With("accent", "initial"))
                          .After(a => a.Phon(p => !IPA.IsVowel(p))))
                   .Rules(r => r
                          .Named("Ouverture de /e/ initial entravé")
                          .Phono(px => new[] { "ɛ" }))));
 }
Ejemplo n.º 2
0
 public static Rule Rule2g()
 {
     return(R.Rule(c => c
                   .Id("p1c14r2g")
                   .From(1450).To(1500)
                   .Query(q => q
                          .Scope("syllable")
                          .Match(m => m.Phon("ø̃"))
                          .After(a => a.Phon(p => !IPA.IsVowel(p))))
                   .Rules(r => r
                          .Named("Ouverture de /ø̃/ en syllabe fermée")
                          .Phono(px => new[] { "œ̃" }))));
 }
Ejemplo n.º 3
0
 public static Rule Rule1c()
 {
     return(R.Rule(c => c
                   .Id("p1c10r1c")
                   .From(200).To(300)
                   .Query(q => q
                          .Before(b => b.Phon(p => IPA.IsVowel(p) && !IPA.IsPalatalVowel(p)))
                          .Match(m => m.Phon("β"))
                          .After(b => b.Phon(IPA.IsVelarVowel)))
                   .Rules(r => r
                          .Named("Vélarisation de /β/ entre voyelles vélaires")
                          .Phono(px => new[] { "w" })
                          .Rewrite(_ => "w"))));
 }
Ejemplo n.º 4
0
 public static Rule Rule1b()
 {
     return(R.Rule(c => c
                   .Id("p1c10r1b")
                   .From(200).To(300)
                   .Query(q => q
                          .Before(b => b.Phon(p => IPA.IsVowel(p) && !IPA.IsVelarVowel(p)))
                          .Match(m => m.Phon("β"))
                          .After(b => b.Phon(IPA.IsPalatalVowel)))
                   .Rules(r => r
                          .Named("Renforcement de /β/ entre voyelles palatales")
                          .Phono(px => new[] { "v" })
                          .Rewrite(_ => "v"))));
 }
Ejemplo n.º 5
0
 public static Rule Rule3a()
 {
     return(R.Rule(c => c
                   .Id("p1c14r3a")
                   .From(1550).To(1650)
                   .Query(q => q
                          .Match(m => m.Phon(IPA.IsNasalVowel))
                          .After(a => a.Seq(
                                     s => s.Phon(p => !IPA.IsVowel(p)),
                                     s => s.Phon(IPA.IsVowel))))
                   .Rules(r => r
                          .Named("Dénasalisation de la voyelle en syllabe ouverte")
                          .Phono(px => new[] { px[0].Replace("\u0303", "") }))));
 }
Ejemplo n.º 6
0
 public static Rule Rule2i()
 {
     return(R.Rule(c => c
                   .Id("p1c14r2i")
                   .From(1200).To(1300)
                   .Query(q => q
                          .Match(m => m.Phon("õ"))
                          .After(a => a.Seq(
                                     s => s.Phon(p => !IPA.IsVowel(p)),
                                     s => s.Phon(IPA.IsVowel))))
                   .Rules(r => r
                          .Named("Ouverture de /õ/ en syllabe ouverte")
                          .Phono(px => new[] { "ɔ̃" }))));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Syncope des voyelles pré-toniques autres que /a/ en syllabe ouvert,
 /// non supportées par un groupe consonantique en précession
 /// [G. Zink, Phonétique historique du français, p. 41]
 /// @interaction [?]
 /// </summary>
 public static Rule Rule8()
 {
     return(R.Rule(c => c
                   .From(400).To(600)
                   .Query(q => q
                          .Scope("syllable")
                          .Match(m => m.Phon(p => IPA.IsVowel(p) && p[0] != 'a')
                                 .With("accent", "pre-tonic"))
                          .Before(b => b.Seq(Q.Start, s2 => s2.Maybe(m => m.Phon(IPA.IsConsonant))))
                          .After(Q.End))
                   .Rules(r => r
                          .Named("Syncope des voyelles pré-toniques autres que /a/ en syllable ouverte")
                          .Phono(P.Erase).Rewrite(G.Erase))));
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Centralisation des voyelles pré-toniques autres que /a/ en syllabe ouverte,
 /// précédées d'un groupe consonantique (explosif)
 /// [G. Zink, Phonétique historique du français, p. 41]
 /// @interaction [?]
 /// </summary>
 public static Rule Rule7()
 {
     return(R.Rule(c => c
                   .From(400).To(600)
                   .Query(q => q
                          .Scope("syllable")
                          .Match(m => m.Phon(p => IPA.IsVowel(p) && p[0] != 'a')
                                 .With("accent", "pre-tonic"))
                          .Before(b => b.Seq(q1 => q1.Phon(IPA.IsConsonant), q2 => q2.Phon(IPA.IsConsonant)))
                          .After(Q.End))
                   .Rules(r => r
                          .Named("Centralisation des voyelles pré-toniques autres que /a/ en syllable ouverte, précédées d'un groupe consonantique")
                          .Phono(_ => new[] { "ə" }).Rewrite(G.Erase))));
 }
Ejemplo n.º 9
0
 public static Rule Rule1b()
 {
     return(R.Rule(c => c
                   .Id("p1c7r1b")
                   .Group("")
                   .From(1600).To(1700)
                   .Query(q => q
                          .Before(b => b.Phon(p => !IPA.IsVowel(p)))
                          .Match(m => m.Phon("œ"))
                          .After(Q.End))
                   .Rules(r => r
                          .Named("Effacement de /œ/ après consonne")
                          .Phono(P.Erase))));
 }
Ejemplo n.º 10
0
 public static Rule Rule3b()
 {
     return(R.Rule(c => c
                   .Id("p1c14r3b")
                   .From(1550).To(1650)
                   .Query(q => q
                          .Scope("syllable")
                          .Match(m => m.Seq(
                                     s => s.Phon(IPA.IsNasalVowel),
                                     s => s.Phon(IPA.IsNasalConsonant)))
                          .After(a => a.Seq(
                                     s => s.Maybe(m => m.Phon(p => !IPA.IsVowel(p))),
                                     Q.End)))
                   .Rules(r => r
                          .Named("Amuïssement de la consonne nasale en syllabe fermée")
                          .Phono(px => new[] { px[0] }))));
 }
Ejemplo n.º 11
0
 public static Rule Rule1e()
 {
     return(R.Rule(c => c
                   .Id("p1c10r1e")
                   .From(0).To(100)
                   .Query(
                       q => q
                       .Before(b => b.Phon(p => IPA.IsVowel(p) && !IPA.IsVelarVowel(p)))
                       .Match(m => m.Phon("w"))
                       .After(b => b.Phon(IPA.IsPalatalVowel)),
                       q => q
                       .Before(b => b.Phon(IPA.IsPalatalVowel))
                       .Match(m => m.Phon("w"))
                       .After(a => a.Phon(p => IPA.IsVowel(p) && !IPA.IsVelarVowel(p))))
                   .Rules(r => r
                          .Named("Renforcement de /w/ intervocalique avec entourage palatal")
                          .Phono(px => new[] { "β" })
                          .Rewrite(_ => "b"))));
 }
Ejemplo n.º 12
0
 public static Rule Rule2d()
 {
     return(R.Rule(c => c
                   .Id("p1c10r2d")
                   .From(350).To(400)
                   .Query(
                       q => q
                       .Before(b => b.Phon(p => IPA.IsVowel(p) && !IPA.IsVelarVowel(p)))
                       .Match(m => m.Phon("ɸ"))
                       .After(b => b.Phon(IPA.IsPalatalVowel)),
                       q => q
                       .Before(b => b.Phon(IPA.IsPalatalVowel))
                       .Match(m => m.Phon("ɸ"))
                       .After(a => a.Phon(p => IPA.IsVowel(p) && !IPA.IsVelarVowel(p))))
                   .Rules(r => r
                          .Named("Sonorisation de /ɸ/ intervocalique avec entourage palatal")
                          .Phono(_ => new[] { "β" })
                          .Rewrite(_ => "b"))));
 }
Ejemplo n.º 13
0
        public IEnumerable <Interval <string> > GetSyllables(string[] phonemicWord)
        {
            var start            = 0;
            var syllablePhonemes = new List <string>();

            var lastPosition = SyllabicPosition.CODA;

            string current = null;

            for (int i = 0; i < phonemicWord.Length; i++)
            {
                current = phonemicWord[i];

                if (i == 0)
                {
                    if (IPA.IsVowel(current))
                    {
                        syllablePhonemes.Add(current);
                        lastPosition = SyllabicPosition.NUCLEUS;
                    }
                    else
                    {
                        syllablePhonemes.Add(current);
                        lastPosition = SyllabicPosition.ONSET;
                    }
                }
                else
                {
                    var last = phonemicWord[i - 1];
                    var next = i < phonemicWord.Length - 1 ? phonemicWord[i + 1] : null;

                    if (next == null)
                    {  // Last phoneme of the word
                        if (IPA.IsVowel(current) && IPA.IsVowel(last))
                        {
                            yield return(new Interval <string>(start,
                                                               syllablePhonemes.Count,
                                                               IPA.IsLong(current) ? "long" : "short"));

                            start += syllablePhonemes.Count;
                            syllablePhonemes.Clear();
                        }
                        syllablePhonemes.Add(current);
                        yield return(new Interval <string>(start,
                                                           syllablePhonemes.Count,
                                                           !IPA.IsVowel(current) || IPA.IsLong(current) ? "long" : "short"));
                    }
                    else if (IPA.IsVowel(current))
                    {
                        if (IPA.IsVowel(last))
                        {
                            yield return(new Interval <string>(start,
                                                               syllablePhonemes.Count,
                                                               IPA.IsLong(last) ? "long" : "short"));

                            start += syllablePhonemes.Count;
                            syllablePhonemes.Clear();
                        }

                        syllablePhonemes.Add(current);
                        lastPosition = SyllabicPosition.NUCLEUS;
                    }
                    else
                    {
                        if (IPA.IsVowel(last))
                        {
                            if (IPA.IsVowel(next))
                            {
                                yield return(new Interval <string>(start,
                                                                   syllablePhonemes.Count,
                                                                   IPA.IsLong(last) ? "long" : "short"));

                                start += syllablePhonemes.Count;
                                syllablePhonemes.Clear();

                                syllablePhonemes.Add(current);
                                lastPosition = SyllabicPosition.ONSET;
                            }
                            else if (IsOnsetCluster(current, next))
                            {
                                yield return(new Interval <string>(start,
                                                                   syllablePhonemes.Count,
                                                                   IPA.IsLong(last) ? "long" : "short"));

                                start += syllablePhonemes.Count;
                                syllablePhonemes.Clear();

                                syllablePhonemes.Add(current);
                                lastPosition = SyllabicPosition.ONSET;
                            }
                            else
                            {
                                syllablePhonemes.Add(current);
                                lastPosition = SyllabicPosition.CODA;
                            }
                        }
                        else
                        {
                            if (IPA.IsVowel(next))
                            {
                                if (lastPosition == SyllabicPosition.CODA)
                                {
                                    yield return(new Interval <string>(start,
                                                                       syllablePhonemes.Count,
                                                                       "long"));

                                    start += syllablePhonemes.Count;
                                    syllablePhonemes.Clear();
                                }

                                syllablePhonemes.Add(current);
                                lastPosition = SyllabicPosition.ONSET;
                            }
                            else
                            {
                                if (current == Phonemes.s)
                                {
                                    syllablePhonemes.Add(current);
                                    lastPosition = SyllabicPosition.CODA;
                                }
                                else
                                {
                                    yield return(new Interval <string>(start,
                                                                       syllablePhonemes.Count,
                                                                       "long"));

                                    start += syllablePhonemes.Count;
                                    syllablePhonemes.Clear();
                                    syllablePhonemes.Add(current);
                                    lastPosition = SyllabicPosition.ONSET;
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 14
0
 public bool IsOnsetCluster(string fst, string snd)
 {
     return((!IPA.IsVowel(fst) && !IPA.IsGlide(fst) && IPA.IsGlide(snd)) ||
            ((IPA.IsOcclusive(fst) || IPA.IsFricative(fst)) && IPA.IsLiquide(snd)));
 }