/// <summary> /// Compare the PhonemePair, used by List.Sort() method. /// </summary> /// <param name="firstPair">Source PhonemePair.</param> /// <param name="secondPair">Destination PhonemPair.</param> /// <returns>Compare result.</returns> private static int Compare(PhonemePair firstPair, PhonemePair secondPair) { return string.CompareOrdinal(firstPair.ThirdPartyPhoneme, secondPair.ThirdPartyPhoneme); }
/// <summary> /// Read phoneme mapping file. /// </summary> /// <param name="mapFileName">Mapping file name.</param> public void LoadXml(string mapFileName) { _pairs = new List<PhonemePair>(); XmlDocument dom = new XmlDocument(); dom.Load(mapFileName); if (dom.DocumentElement.HasAttribute("sourceLanguage")) { _sourceLanguage = Localor.StringToLanguage(dom.DocumentElement.GetAttribute("sourceLanguage")); } else { _sourceLanguage = Language.Neutral; } if (dom.DocumentElement.HasAttribute("targetLanguage")) { _targetLanguage = Localor.StringToLanguage(dom.DocumentElement.GetAttribute("targetLanguage")); } else { _targetLanguage = Language.Neutral; } foreach (XmlNode node in dom.DocumentElement.SelectNodes("map")) { XmlElement phonemeEle = (XmlElement)node.SelectSingleNode("phoneme"); string thirdPartyPhoneme = phonemeEle.InnerText; if (string.IsNullOrEmpty(thirdPartyPhoneme)) { string message = string.Format(CultureInfo.InvariantCulture, "Phoneme can't be empty!"); throw new InvalidDataException(message); } XmlElement idEle = (XmlElement)node.SelectSingleNode("id"); string enginePhoneme = idEle.InnerText; if (string.IsNullOrEmpty(enginePhoneme)) { string message = string.Format(CultureInfo.InvariantCulture, "Id can't be empty!"); throw new InvalidDataException(message); } PhonemePair pair = new PhonemePair(); pair.ThirdPartyPhoneme = thirdPartyPhoneme; pair.EnginePhoneme = enginePhoneme; _pairs.Add(pair); } }