Exemplo n.º 1
0
        /// <summary>
        /// 如果转换失败,返回 null.
        /// </summary>
        public static string ToFeng(string yngping)
        {
            var parsed = Yngping0_4_0Validator.ParseHukziuSyllable(yngping);

            if (parsed.HasValue)
            {
                return(ToFeng(parsed.Value.Item1, parsed.Value.Item2, parsed.Value.Item3));
            }
            return(null);
        }
Exemplo n.º 2
0
        private static string FindAudioWithFallback(string yngpingSyllable)
        {
            var fallbacks = new HashSet <string>();

            fallbacks.Add(yngpingSyllable);
            while (fallbacks.Count < MaxFallbackCount)
            {
                var foundNew = false;
                foreach (var rule in ReplacementRules)
                {
                    var newSyllables = new List <string>();
                    foreach (var syllable in fallbacks)
                    {
                        var parseResult = Yngping0_4_0Validator.ParseHukziuSyllable(syllable);
                        if (parseResult == null)
                        {
                            continue;
                        }
                        var(initial, final, tone) = parseResult.Value;

                        var output = rule.GenerateFallbacks(initial, final, tone);
                        foreach (var newSyllable in output)
                        {
                            if (!fallbacks.Contains(newSyllable))
                            {
                                if (SyllableMappings.ContainsKey(newSyllable))
                                {
                                    return(SyllableMappings[newSyllable]);
                                }
                                foundNew = true;
                                newSyllables.Add(newSyllable);
                            }
                        }
                    }
                    foreach (var newSyllable in newSyllables)
                    {
                        fallbacks.Add(newSyllable);
                    }
                    if (fallbacks.Count >= MaxFallbackCount)
                    {
                        break;
                    }
                }
                if (!foundNew)
                {
                    break;
                }
            }
            return(string.Empty);
        }
Exemplo n.º 3
0
 public void ParseHukziuSyllable(string syllable, string initial, string final, string tone)
 {
     Assert.Equal((initial, final, tone),
                  Yngping0_4_0Validator.TryParseHukziuSyllable(syllable));
 }
Exemplo n.º 4
0
 public void InvalidCoda_ShouldFail(string syllable)
 {
     Assert.False(Yngping0_4_0Validator.CheckHukziuSyllable(syllable));
 }
Exemplo n.º 5
0
 public void ValidSyllables_ShouldPass(string syllable)
 {
     Assert.True(Yngping0_4_0Validator.CheckHukziuSyllable(syllable));
 }