From 3abd05f6b3a687e73fc9e6ab0f09ec2af2f6c06a Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 18 Nov 2023 14:58:16 +0800 Subject: [PATCH 01/33] Implement double pinyin --- .../DoublePinAlphabet.cs | 193 ++++++++++++++++++ .../UserSettings/Settings.cs | 2 + 2 files changed, 195 insertions(+) create mode 100644 Flow.Launcher.Infrastructure/DoublePinAlphabet.cs diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs new file mode 100644 index 00000000000..607582097f9 --- /dev/null +++ b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs @@ -0,0 +1,193 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using Flow.Launcher.Infrastructure.UserSettings; +using ToolGood.Words.Pinyin; + +namespace Flow.Launcher.Infrastructure +{ + public class DoublePinAlphabet : IAlphabet + { + private ConcurrentDictionary _doublePinCache = + new ConcurrentDictionary(); + + private Settings _settings; + + public void Initialize([NotNull] Settings settings) + { + _settings = settings ?? throw new ArgumentNullException(nameof(settings)); + } + + public bool CanBeTranslated(string stringToTranslate) + { + return WordsHelper.HasChinese(stringToTranslate); + } + + public (string translation, TranslationMapping map) Translate(string content) + { + if (_settings.ShouldUseDoublePin) + { + if (!_doublePinCache.ContainsKey(content)) + { + return BuildCacheFromContent(content); + } + else + { + return _doublePinCache[content]; + } + } + return (content, null); + } + + private (string translation, TranslationMapping map) BuildCacheFromContent(string content) + { + if (WordsHelper.HasChinese(content)) + { + var resultList = WordsHelper.GetPinyinList(content).Select(ToDoublePin).ToArray(); + StringBuilder resultBuilder = new StringBuilder(); + TranslationMapping map = new TranslationMapping(); + + bool pre = false; + + for (int i = 0; i < resultList.Length; i++) + { + if (content[i] >= 0x3400 && content[i] <= 0x9FD5) + { + map.AddNewIndex(i, resultBuilder.Length, resultList[i].Length + 1); + resultBuilder.Append(' '); + resultBuilder.Append(resultList[i]); + pre = true; + } + else + { + if (pre) + { + pre = false; + resultBuilder.Append(' '); + } + + resultBuilder.Append(resultList[i]); + } + } + + map.endConstruct(); + + var key = resultBuilder.ToString(); + map.setKey(key); + + return _doublePinCache[content] = (key, map); + } + else + { + return (content, null); + } + } + + private static readonly ReadOnlyDictionary special = new(new Dictionary(){ + {"a", "aa"}, + {"ai", "ai"}, + {"an", "an"}, + {"ang", "ah"}, + {"ao", "ao"}, + {"e", "ee"}, + {"ei", "ei"}, + {"en", "en"}, + {"er", "er"}, + {"o", "oo"}, + {"ou", "ou"} + }); + + + private static readonly ReadOnlyDictionary first = new(new Dictionary(){ + {"ch", "i"}, + {"sh", "u"}, + {"zh", "v"} + }); + + + private static readonly ReadOnlyDictionary second = new(new Dictionary() + { + {"ua", "x"}, + {"ei", "w"}, + {"e", "e"}, + {"ou", "z"}, + {"iu", "q"}, + {"ve", "t"}, + {"ue", "t"}, + {"u", "u"}, + {"i", "i"}, + {"o", "o"}, + {"uo", "o"}, + {"ie", "p"}, + {"a", "a"}, + {"ong", "s"}, + {"iong", "s"}, + {"ai", "d"}, + {"ing", "k"}, + {"uai", "k"}, + {"ang", "h"}, + {"uan", "r"}, + {"an", "j"}, + {"en", "f"}, + {"ia", "x"}, + {"iang", "l"}, + {"uang", "l"}, + {"eng", "g"}, + {"in", "b"}, + {"ao", "c"}, + {"v", "v"}, + {"ui", "v"}, + {"un", "y"}, + {"iao", "n"}, + {"ian", "m"} + }); + + private static string ToDoublePin(string fullPinyin) + { + // Assuming s is valid + StringBuilder doublePin = new StringBuilder(); + + if (fullPinyin.Length <= 3 && (fullPinyin[0] == 'a' || fullPinyin[0] == 'e' || fullPinyin[0] == 'o')) + { + if (special.ContainsKey(fullPinyin)) + { + return special[fullPinyin]; + } + } + + // zh, ch, sh + if (fullPinyin.Length >= 2 && first.ContainsKey(fullPinyin[..2])) + { + doublePin.Append(first[fullPinyin[..2]]); + + if (second.TryGetValue(fullPinyin[2..], out string tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(fullPinyin[2..]); + } + } + else + { + doublePin.Append(fullPinyin[0]); + + if (second.TryGetValue(fullPinyin[1..], out string tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(fullPinyin[1..]); + } + } + + return doublePin.ToString(); + } + } +} diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 4588466652e..8d94cdba56a 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -185,6 +185,8 @@ public CustomBrowserViewModel CustomBrowser /// when false Alphabet static service will always return empty results /// public bool ShouldUsePinyin { get; set; } = false; + + public bool ShouldUseDoublePin { get; set; } = false; public bool AlwaysPreview { get; set; } = false; public bool AlwaysStartEn { get; set; } = false; From fb6635344b8e5ecae06aadd31a3b112471b48ae2 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 18 Nov 2023 14:58:23 +0800 Subject: [PATCH 02/33] Test double pinyin --- Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/PublicAPIInstance.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 765a1a5593a..d74ea62fb1b 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -30,7 +30,7 @@ public partial class App : IDisposable, ISingleInstanceApp private SettingWindowViewModel _settingsVM; private readonly Updater _updater = new Updater(Flow.Launcher.Properties.Settings.Default.GithubRepo); private readonly Portable _portable = new Portable(); - private readonly PinyinAlphabet _alphabet = new PinyinAlphabet(); + private readonly DoublePinAlphabet _alphabet = new DoublePinAlphabet(); private StringMatcher _stringMatcher; [STAThread] diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index b49bf39d3c5..952ce0edb9b 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -32,11 +32,11 @@ public class PublicAPIInstance : IPublicAPI { private readonly SettingWindowViewModel _settingsVM; private readonly MainViewModel _mainVM; - private readonly PinyinAlphabet _alphabet; + private readonly DoublePinAlphabet _alphabet; #region Constructor - public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM, PinyinAlphabet alphabet) + public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM, DoublePinAlphabet alphabet) { _settingsVM = settingsVM; _mainVM = mainVM; From f6ae71a99f838b2237c14c62c6daff5e97e6eec0 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 18 Nov 2023 20:24:13 +0800 Subject: [PATCH 03/33] Only convert to double pinyin when meeting Chinese --- Flow.Launcher.Infrastructure/DoublePinAlphabet.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs index 607582097f9..e09046410aa 100644 --- a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs @@ -47,7 +47,7 @@ public bool CanBeTranslated(string stringToTranslate) { if (WordsHelper.HasChinese(content)) { - var resultList = WordsHelper.GetPinyinList(content).Select(ToDoublePin).ToArray(); + var resultList = WordsHelper.GetPinyinList(content); StringBuilder resultBuilder = new StringBuilder(); TranslationMapping map = new TranslationMapping(); @@ -57,9 +57,10 @@ public bool CanBeTranslated(string stringToTranslate) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - map.AddNewIndex(i, resultBuilder.Length, resultList[i].Length + 1); + string dp = ToDoublePin(resultList[i].ToLower()); + map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); resultBuilder.Append(' '); - resultBuilder.Append(resultList[i]); + resultBuilder.Append(dp); pre = true; } else From e5285b19921ae2cc49b6f55ebe5772a77f05cd54 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 19 Nov 2023 12:30:17 +0800 Subject: [PATCH 04/33] Temp: compatibility with full pinyin option --- Flow.Launcher.Infrastructure/DoublePinAlphabet.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs index e09046410aa..e6930ad931a 100644 --- a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs @@ -29,7 +29,7 @@ public bool CanBeTranslated(string stringToTranslate) public (string translation, TranslationMapping map) Translate(string content) { - if (_settings.ShouldUseDoublePin) + if (_settings.ShouldUsePinyin) { if (!_doublePinCache.ContainsKey(content)) { @@ -57,7 +57,7 @@ public bool CanBeTranslated(string stringToTranslate) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - string dp = ToDoublePin(resultList[i].ToLower()); + string dp = _settings.ShouldUseDoublePin ? resultList[i] : ToDoublePin(resultList[i].ToLower()); map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); resultBuilder.Append(' '); resultBuilder.Append(dp); From 99ff3b2ec5c9a4d8b4f136735a866f52914c246e Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Mon, 20 Nov 2023 22:49:39 +0800 Subject: [PATCH 05/33] Fix wrong condition --- Flow.Launcher.Infrastructure/DoublePinAlphabet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs index e6930ad931a..a1eb788d730 100644 --- a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs @@ -57,7 +57,7 @@ public bool CanBeTranslated(string stringToTranslate) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - string dp = _settings.ShouldUseDoublePin ? resultList[i] : ToDoublePin(resultList[i].ToLower()); + string dp = _settings.ShouldUseDoublePin ? ToDoublePin(resultList[i].ToLower()) : resultList[i]; map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); resultBuilder.Append(' '); resultBuilder.Append(dp); From 46d49d8fdf373e020481b111cbd23bf8ee09538d Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 25 May 2024 15:02:37 +0800 Subject: [PATCH 06/33] Only translate when string is double pinyin --- Flow.Launcher.Infrastructure/DoublePinAlphabet.cs | 4 ++-- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 4 ++-- Flow.Launcher.Infrastructure/StringMatcher.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs index a1eb788d730..945f47a56b0 100644 --- a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs @@ -22,9 +22,9 @@ public void Initialize([NotNull] Settings settings) _settings = settings ?? throw new ArgumentNullException(nameof(settings)); } - public bool CanBeTranslated(string stringToTranslate) + public bool ShouldTranslate(string stringToTranslate) { - return WordsHelper.HasChinese(stringToTranslate); + return stringToTranslate.Length % 2 == 0 && !WordsHelper.HasChinese(stringToTranslate); } public (string translation, TranslationMapping map) Translate(string content) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 7d72359684d..961af1d322f 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -119,7 +119,7 @@ public interface IAlphabet /// /// String to translate. /// - public bool CanBeTranslated(string stringToTranslate); + public bool ShouldTranslate(string stringToTranslate); } public class PinyinAlphabet : IAlphabet @@ -134,7 +134,7 @@ public void Initialize([NotNull] Settings settings) _settings = settings ?? throw new ArgumentNullException(nameof(settings)); } - public bool CanBeTranslated(string stringToTranslate) + public bool ShouldTranslate(string stringToTranslate) { return WordsHelper.HasChinese(stringToTranslate); } diff --git a/Flow.Launcher.Infrastructure/StringMatcher.cs b/Flow.Launcher.Infrastructure/StringMatcher.cs index bd5dbdda9be..4929e4cd2cf 100644 --- a/Flow.Launcher.Infrastructure/StringMatcher.cs +++ b/Flow.Launcher.Infrastructure/StringMatcher.cs @@ -61,7 +61,7 @@ public MatchResult FuzzyMatch(string query, string stringToCompare, MatchOption query = query.Trim(); TranslationMapping translationMapping = null; - if (_alphabet is not null && !_alphabet.CanBeTranslated(query)) + if (_alphabet is not null && _alphabet.ShouldTranslate(query)) { // We assume that if a query can be translated (containing characters of a language, like Chinese) // it actually means user doesn't want it to be translated to English letters. From b1cb852673005e955b1d4bd0bb2ed692e44308c9 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:18:57 +0800 Subject: [PATCH 07/33] Extract classes --- Flow.Launcher.Infrastructure/IAlphabet.cs | 22 ++++ .../PinyinAlphabet.cs | 113 ------------------ .../TranslationMapping.cs | 99 +++++++++++++++ 3 files changed, 121 insertions(+), 113 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/IAlphabet.cs create mode 100644 Flow.Launcher.Infrastructure/TranslationMapping.cs diff --git a/Flow.Launcher.Infrastructure/IAlphabet.cs b/Flow.Launcher.Infrastructure/IAlphabet.cs new file mode 100644 index 00000000000..e79ec0c6d6f --- /dev/null +++ b/Flow.Launcher.Infrastructure/IAlphabet.cs @@ -0,0 +1,22 @@ +namespace Flow.Launcher.Infrastructure +{ + /// + /// Translate a language to English letters using a given rule. + /// + public interface IAlphabet + { + /// + /// Translate a string to English letters, using a given rule. + /// + /// String to translate. + /// + public (string translation, TranslationMapping map) Translate(string stringToTranslate); + + /// + /// Determine if a string can be translated to English letter with this Alphabet. + /// + /// String to translate. + /// + public bool ShouldTranslate(string stringToTranslate); + } +} diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 961af1d322f..d98d823d7b9 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -9,119 +9,6 @@ namespace Flow.Launcher.Infrastructure { - public class TranslationMapping - { - private bool constructed; - - private List originalIndexs = new List(); - private List translatedIndexs = new List(); - private int translatedLength = 0; - - public string key { get; private set; } - - public void setKey(string key) - { - this.key = key; - } - - public void AddNewIndex(int originalIndex, int translatedIndex, int length) - { - if (constructed) - throw new InvalidOperationException("Mapping shouldn't be changed after constructed"); - - originalIndexs.Add(originalIndex); - translatedIndexs.Add(translatedIndex); - translatedIndexs.Add(translatedIndex + length); - translatedLength += length - 1; - } - - public int MapToOriginalIndex(int translatedIndex) - { - if (translatedIndex > translatedIndexs.Last()) - return translatedIndex - translatedLength - 1; - - int lowerBound = 0; - int upperBound = originalIndexs.Count - 1; - - int count = 0; - - // Corner case handle - if (translatedIndex < translatedIndexs[0]) - return translatedIndex; - if (translatedIndex > translatedIndexs.Last()) - { - int indexDef = 0; - for (int k = 0; k < originalIndexs.Count; k++) - { - indexDef += translatedIndexs[k * 2 + 1] - translatedIndexs[k * 2]; - } - - return translatedIndex - indexDef - 1; - } - - // Binary Search with Range - for (int i = originalIndexs.Count / 2;; count++) - { - if (translatedIndex < translatedIndexs[i * 2]) - { - // move to lower middle - upperBound = i; - i = (i + lowerBound) / 2; - } - else if (translatedIndex > translatedIndexs[i * 2 + 1] - 1) - { - lowerBound = i; - // move to upper middle - // due to floor of integer division, move one up on corner case - i = (i + upperBound + 1) / 2; - } - else - return originalIndexs[i]; - - if (upperBound - lowerBound <= 1 && - translatedIndex > translatedIndexs[lowerBound * 2 + 1] && - translatedIndex < translatedIndexs[upperBound * 2]) - { - int indexDef = 0; - - for (int j = 0; j < upperBound; j++) - { - indexDef += translatedIndexs[j * 2 + 1] - translatedIndexs[j * 2]; - } - - return translatedIndex - indexDef - 1; - } - } - } - - public void endConstruct() - { - if (constructed) - throw new InvalidOperationException("Mapping has already been constructed"); - constructed = true; - } - } - - /// - /// Translate a language to English letters using a given rule. - /// - public interface IAlphabet - { - /// - /// Translate a string to English letters, using a given rule. - /// - /// String to translate. - /// - public (string translation, TranslationMapping map) Translate(string stringToTranslate); - - /// - /// Determine if a string can be translated to English letter with this Alphabet. - /// - /// String to translate. - /// - public bool ShouldTranslate(string stringToTranslate); - } - public class PinyinAlphabet : IAlphabet { private ConcurrentDictionary _pinyinCache = diff --git a/Flow.Launcher.Infrastructure/TranslationMapping.cs b/Flow.Launcher.Infrastructure/TranslationMapping.cs new file mode 100644 index 00000000000..f288c816a64 --- /dev/null +++ b/Flow.Launcher.Infrastructure/TranslationMapping.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Flow.Launcher.Infrastructure +{ + public class TranslationMapping + { + private bool constructed; + + private List originalIndexs = new List(); + private List translatedIndexs = new List(); + private int translatedLength = 0; + + public string key { get; private set; } + + public void setKey(string key) + { + this.key = key; + } + + public void AddNewIndex(int originalIndex, int translatedIndex, int length) + { + if (constructed) + throw new InvalidOperationException("Mapping shouldn't be changed after constructed"); + + originalIndexs.Add(originalIndex); + translatedIndexs.Add(translatedIndex); + translatedIndexs.Add(translatedIndex + length); + translatedLength += length - 1; + } + + public int MapToOriginalIndex(int translatedIndex) + { + if (translatedIndex > translatedIndexs.Last()) + return translatedIndex - translatedLength - 1; + + int lowerBound = 0; + int upperBound = originalIndexs.Count - 1; + + int count = 0; + + // Corner case handle + if (translatedIndex < translatedIndexs[0]) + return translatedIndex; + if (translatedIndex > translatedIndexs.Last()) + { + int indexDef = 0; + for (int k = 0; k < originalIndexs.Count; k++) + { + indexDef += translatedIndexs[k * 2 + 1] - translatedIndexs[k * 2]; + } + + return translatedIndex - indexDef - 1; + } + + // Binary Search with Range + for (int i = originalIndexs.Count / 2;; count++) + { + if (translatedIndex < translatedIndexs[i * 2]) + { + // move to lower middle + upperBound = i; + i = (i + lowerBound) / 2; + } + else if (translatedIndex > translatedIndexs[i * 2 + 1] - 1) + { + lowerBound = i; + // move to upper middle + // due to floor of integer division, move one up on corner case + i = (i + upperBound + 1) / 2; + } + else + return originalIndexs[i]; + + if (upperBound - lowerBound <= 1 && + translatedIndex > translatedIndexs[lowerBound * 2 + 1] && + translatedIndex < translatedIndexs[upperBound * 2]) + { + int indexDef = 0; + + for (int j = 0; j < upperBound; j++) + { + indexDef += translatedIndexs[j * 2 + 1] - translatedIndexs[j * 2]; + } + + return translatedIndex - indexDef - 1; + } + } + } + + public void endConstruct() + { + if (constructed) + throw new InvalidOperationException("Mapping has already been constructed"); + constructed = true; + } + } +} From 6807afbe6d753eed6984e1b1ab6019e2864767cd Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:03:00 +0800 Subject: [PATCH 08/33] Remove unused alphabet arg in PublicAPIInstance --- Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/PublicAPIInstance.cs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index d74ea62fb1b..560bb052b19 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -74,7 +74,7 @@ await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () => PluginManager.LoadPlugins(_settings.PluginSettings); _mainVM = new MainViewModel(_settings); - API = new PublicAPIInstance(_settingsVM, _mainVM, _alphabet); + API = new PublicAPIInstance(_settingsVM, _mainVM); Http.API = API; Http.Proxy = _settings.Proxy; diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 952ce0edb9b..e14d692cd65 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -32,15 +32,13 @@ public class PublicAPIInstance : IPublicAPI { private readonly SettingWindowViewModel _settingsVM; private readonly MainViewModel _mainVM; - private readonly DoublePinAlphabet _alphabet; #region Constructor - public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM, DoublePinAlphabet alphabet) + public PublicAPIInstance(SettingWindowViewModel settingsVM, MainViewModel mainVM) { _settingsVM = settingsVM; _mainVM = mainVM; - _alphabet = alphabet; GlobalHotkey.hookedKeyboardCallback = KListener_hookedKeyboardCallback; WebRequest.RegisterPrefix("data", new DataWebRequestFactory()); } From a2efa11699fed4b3aac21bdff26555ce57b274aa Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:19:27 +0800 Subject: [PATCH 09/33] Merge DoublePinAlphabet logic --- .../DoublePinAlphabet.cs | 194 ------------------ .../PinyinAlphabet.cs | 127 +++++++++++- .../UserSettings/Settings.cs | 3 +- Flow.Launcher/App.xaml.cs | 2 +- 4 files changed, 121 insertions(+), 205 deletions(-) delete mode 100644 Flow.Launcher.Infrastructure/DoublePinAlphabet.cs diff --git a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs b/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs deleted file mode 100644 index 945f47a56b0..00000000000 --- a/Flow.Launcher.Infrastructure/DoublePinAlphabet.cs +++ /dev/null @@ -1,194 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Text; -using Flow.Launcher.Infrastructure.UserSettings; -using ToolGood.Words.Pinyin; - -namespace Flow.Launcher.Infrastructure -{ - public class DoublePinAlphabet : IAlphabet - { - private ConcurrentDictionary _doublePinCache = - new ConcurrentDictionary(); - - private Settings _settings; - - public void Initialize([NotNull] Settings settings) - { - _settings = settings ?? throw new ArgumentNullException(nameof(settings)); - } - - public bool ShouldTranslate(string stringToTranslate) - { - return stringToTranslate.Length % 2 == 0 && !WordsHelper.HasChinese(stringToTranslate); - } - - public (string translation, TranslationMapping map) Translate(string content) - { - if (_settings.ShouldUsePinyin) - { - if (!_doublePinCache.ContainsKey(content)) - { - return BuildCacheFromContent(content); - } - else - { - return _doublePinCache[content]; - } - } - return (content, null); - } - - private (string translation, TranslationMapping map) BuildCacheFromContent(string content) - { - if (WordsHelper.HasChinese(content)) - { - var resultList = WordsHelper.GetPinyinList(content); - StringBuilder resultBuilder = new StringBuilder(); - TranslationMapping map = new TranslationMapping(); - - bool pre = false; - - for (int i = 0; i < resultList.Length; i++) - { - if (content[i] >= 0x3400 && content[i] <= 0x9FD5) - { - string dp = _settings.ShouldUseDoublePin ? ToDoublePin(resultList[i].ToLower()) : resultList[i]; - map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); - resultBuilder.Append(' '); - resultBuilder.Append(dp); - pre = true; - } - else - { - if (pre) - { - pre = false; - resultBuilder.Append(' '); - } - - resultBuilder.Append(resultList[i]); - } - } - - map.endConstruct(); - - var key = resultBuilder.ToString(); - map.setKey(key); - - return _doublePinCache[content] = (key, map); - } - else - { - return (content, null); - } - } - - private static readonly ReadOnlyDictionary special = new(new Dictionary(){ - {"a", "aa"}, - {"ai", "ai"}, - {"an", "an"}, - {"ang", "ah"}, - {"ao", "ao"}, - {"e", "ee"}, - {"ei", "ei"}, - {"en", "en"}, - {"er", "er"}, - {"o", "oo"}, - {"ou", "ou"} - }); - - - private static readonly ReadOnlyDictionary first = new(new Dictionary(){ - {"ch", "i"}, - {"sh", "u"}, - {"zh", "v"} - }); - - - private static readonly ReadOnlyDictionary second = new(new Dictionary() - { - {"ua", "x"}, - {"ei", "w"}, - {"e", "e"}, - {"ou", "z"}, - {"iu", "q"}, - {"ve", "t"}, - {"ue", "t"}, - {"u", "u"}, - {"i", "i"}, - {"o", "o"}, - {"uo", "o"}, - {"ie", "p"}, - {"a", "a"}, - {"ong", "s"}, - {"iong", "s"}, - {"ai", "d"}, - {"ing", "k"}, - {"uai", "k"}, - {"ang", "h"}, - {"uan", "r"}, - {"an", "j"}, - {"en", "f"}, - {"ia", "x"}, - {"iang", "l"}, - {"uang", "l"}, - {"eng", "g"}, - {"in", "b"}, - {"ao", "c"}, - {"v", "v"}, - {"ui", "v"}, - {"un", "y"}, - {"iao", "n"}, - {"ian", "m"} - }); - - private static string ToDoublePin(string fullPinyin) - { - // Assuming s is valid - StringBuilder doublePin = new StringBuilder(); - - if (fullPinyin.Length <= 3 && (fullPinyin[0] == 'a' || fullPinyin[0] == 'e' || fullPinyin[0] == 'o')) - { - if (special.ContainsKey(fullPinyin)) - { - return special[fullPinyin]; - } - } - - // zh, ch, sh - if (fullPinyin.Length >= 2 && first.ContainsKey(fullPinyin[..2])) - { - doublePin.Append(first[fullPinyin[..2]]); - - if (second.TryGetValue(fullPinyin[2..], out string tmp)) - { - doublePin.Append(tmp); - } - else - { - doublePin.Append(fullPinyin[2..]); - } - } - else - { - doublePin.Append(fullPinyin[0]); - - if (second.TryGetValue(fullPinyin[1..], out string tmp)) - { - doublePin.Append(tmp); - } - else - { - doublePin.Append(fullPinyin[1..]); - } - } - - return doublePin.ToString(); - } - } -} diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index d98d823d7b9..37e4f93d292 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -1,18 +1,18 @@ using System; using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; using System.Text; using JetBrains.Annotations; using Flow.Launcher.Infrastructure.UserSettings; using ToolGood.Words.Pinyin; +using System.Collections.Generic; +using System.Collections.ObjectModel; namespace Flow.Launcher.Infrastructure { public class PinyinAlphabet : IAlphabet { - private ConcurrentDictionary _pinyinCache = - new ConcurrentDictionary(); + private readonly ConcurrentDictionary _pinyinCache = + new(); private Settings _settings; @@ -23,20 +23,22 @@ public void Initialize([NotNull] Settings settings) public bool ShouldTranslate(string stringToTranslate) { - return WordsHelper.HasChinese(stringToTranslate); + return _settings.UseDoublePinyin ? + (WordsHelper.HasChinese(stringToTranslate) && stringToTranslate.Length % 2 == 0) : + WordsHelper.HasChinese(stringToTranslate); } public (string translation, TranslationMapping map) Translate(string content) { if (_settings.ShouldUsePinyin) { - if (!_pinyinCache.ContainsKey(content)) + if (!_pinyinCache.TryGetValue(content, out var value)) { return BuildCacheFromContent(content); } else { - return _pinyinCache[content]; + return value; } } return (content, null); @@ -57,9 +59,10 @@ public bool ShouldTranslate(string stringToTranslate) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - map.AddNewIndex(i, resultBuilder.Length, resultList[i].Length + 1); + string dp = _settings.UseDoublePinyin ? ToDoublePin(resultList[i].ToLower()) : resultList[i]; + map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); resultBuilder.Append(' '); - resultBuilder.Append(resultList[i]); + resultBuilder.Append(dp); pre = true; } else @@ -86,5 +89,111 @@ public bool ShouldTranslate(string stringToTranslate) return (content, null); } } + + #region Double Pinyin + + private static readonly ReadOnlyDictionary special = new(new Dictionary(){ + {"a", "aa"}, + {"ai", "ai"}, + {"an", "an"}, + {"ang", "ah"}, + {"ao", "ao"}, + {"e", "ee"}, + {"ei", "ei"}, + {"en", "en"}, + {"er", "er"}, + {"o", "oo"}, + {"ou", "ou"} + }); + + + private static readonly ReadOnlyDictionary first = new(new Dictionary(){ + {"ch", "i"}, + {"sh", "u"}, + {"zh", "v"} + }); + + + private static readonly ReadOnlyDictionary second = new(new Dictionary() + { + {"ua", "x"}, + {"ei", "w"}, + {"e", "e"}, + {"ou", "z"}, + {"iu", "q"}, + {"ve", "t"}, + {"ue", "t"}, + {"u", "u"}, + {"i", "i"}, + {"o", "o"}, + {"uo", "o"}, + {"ie", "p"}, + {"a", "a"}, + {"ong", "s"}, + {"iong", "s"}, + {"ai", "d"}, + {"ing", "k"}, + {"uai", "k"}, + {"ang", "h"}, + {"uan", "r"}, + {"an", "j"}, + {"en", "f"}, + {"ia", "x"}, + {"iang", "l"}, + {"uang", "l"}, + {"eng", "g"}, + {"in", "b"}, + {"ao", "c"}, + {"v", "v"}, + {"ui", "v"}, + {"un", "y"}, + {"iao", "n"}, + {"ian", "m"} + }); + + private static string ToDoublePin(string fullPinyin) + { + // Assuming s is valid + StringBuilder doublePin = new StringBuilder(); + + if (fullPinyin.Length <= 3 && (fullPinyin[0] == 'a' || fullPinyin[0] == 'e' || fullPinyin[0] == 'o')) + { + if (special.TryGetValue(fullPinyin, out var value)) + { + return value; + } + } + + // zh, ch, sh + if (fullPinyin.Length >= 2 && first.ContainsKey(fullPinyin[..2])) + { + doublePin.Append(first[fullPinyin[..2]]); + + if (second.TryGetValue(fullPinyin[2..], out string tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(fullPinyin[2..]); + } + } + else + { + doublePin.Append(fullPinyin[0]); + + if (second.TryGetValue(fullPinyin[1..], out string tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(fullPinyin[1..]); + } + } + + return doublePin.ToString(); + } + #endregion } } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 8d94cdba56a..e79c3f52d4d 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -186,7 +186,8 @@ public CustomBrowserViewModel CustomBrowser /// public bool ShouldUsePinyin { get; set; } = false; - public bool ShouldUseDoublePin { get; set; } = false; + public bool UseDoublePinyin { get; set; } = false; + public bool AlwaysPreview { get; set; } = false; public bool AlwaysStartEn { get; set; } = false; diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 560bb052b19..83870837a0b 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -30,7 +30,7 @@ public partial class App : IDisposable, ISingleInstanceApp private SettingWindowViewModel _settingsVM; private readonly Updater _updater = new Updater(Flow.Launcher.Properties.Settings.Default.GithubRepo); private readonly Portable _portable = new Portable(); - private readonly DoublePinAlphabet _alphabet = new DoublePinAlphabet(); + private readonly PinyinAlphabet _alphabet = new PinyinAlphabet(); private StringMatcher _stringMatcher; [STAThread] From 12c4e37a95df44fc968a6459e7a3cbf6de4063e6 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:33:49 +0800 Subject: [PATCH 10/33] Developing --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index e79c3f52d4d..30e3b77beee 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -186,7 +186,7 @@ public CustomBrowserViewModel CustomBrowser /// public bool ShouldUsePinyin { get; set; } = false; - public bool UseDoublePinyin { get; set; } = false; + public bool UseDoublePinyin { get; set; } = true; //For developing public bool AlwaysPreview { get; set; } = false; public bool AlwaysStartEn { get; set; } = false; From f673000d67e4ff1180e6d2856bf85f1640433a7c Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 14:37:15 +0800 Subject: [PATCH 11/33] Fix ShouldTranslate() --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 37e4f93d292..b48a6109042 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -23,9 +23,9 @@ public void Initialize([NotNull] Settings settings) public bool ShouldTranslate(string stringToTranslate) { - return _settings.UseDoublePinyin ? - (WordsHelper.HasChinese(stringToTranslate) && stringToTranslate.Length % 2 == 0) : - WordsHelper.HasChinese(stringToTranslate); + return _settings.UseDoublePinyin ? + (!WordsHelper.HasChinese(stringToTranslate) && stringToTranslate.Length % 2 == 0) : + !WordsHelper.HasChinese(stringToTranslate); } public (string translation, TranslationMapping map) Translate(string content) From b10a6e19df5afcbd13ca612f6e6952f19a3b9dde Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 15:18:24 +0800 Subject: [PATCH 12/33] Capitalize first letter --- .../PinyinAlphabet.cs | 84 +++++++++---------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index b48a6109042..cbec7feae04 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -46,71 +46,69 @@ public bool ShouldTranslate(string stringToTranslate) private (string translation, TranslationMapping map) BuildCacheFromContent(string content) { - if (WordsHelper.HasChinese(content)) + if (!WordsHelper.HasChinese(content)) { - var resultList = WordsHelper.GetPinyinList(content); + return (content, null); + } - StringBuilder resultBuilder = new StringBuilder(); - TranslationMapping map = new TranslationMapping(); + var resultList = WordsHelper.GetPinyinList(content); - bool pre = false; + StringBuilder resultBuilder = new StringBuilder(); + TranslationMapping map = new TranslationMapping(); - for (int i = 0; i < resultList.Length; i++) + bool pre = false; + + for (int i = 0; i < resultList.Length; i++) + { + if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - if (content[i] >= 0x3400 && content[i] <= 0x9FD5) + string dp = _settings.UseDoublePinyin ? ToDoublePin(resultList[i]) : resultList[i]; + map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); + resultBuilder.Append(' '); + resultBuilder.Append(dp); + pre = true; + } + else + { + if (pre) { - string dp = _settings.UseDoublePinyin ? ToDoublePin(resultList[i].ToLower()) : resultList[i]; - map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); + pre = false; resultBuilder.Append(' '); - resultBuilder.Append(dp); - pre = true; } - else - { - if (pre) - { - pre = false; - resultBuilder.Append(' '); - } - resultBuilder.Append(resultList[i]); - } + resultBuilder.Append(resultList[i]); } + } - map.endConstruct(); + map.endConstruct(); - var key = resultBuilder.ToString(); - map.setKey(key); + var key = resultBuilder.ToString(); + map.setKey(key); - return _pinyinCache[content] = (key, map); - } - else - { - return (content, null); - } + return _pinyinCache[content] = (key, map); } #region Double Pinyin private static readonly ReadOnlyDictionary special = new(new Dictionary(){ - {"a", "aa"}, - {"ai", "ai"}, - {"an", "an"}, - {"ang", "ah"}, - {"ao", "ao"}, - {"e", "ee"}, - {"ei", "ei"}, - {"en", "en"}, - {"er", "er"}, - {"o", "oo"}, - {"ou", "ou"} + {"A", "aa"}, + {"Ai", "ai"}, + {"An", "an"}, + {"Ang", "ah"}, + {"Ao", "ao"}, + {"E", "ee"}, + {"Ei", "ei"}, + {"En", "en"}, + {"Er", "er"}, + {"O", "oo"}, + {"Ou", "ou"} }); private static readonly ReadOnlyDictionary first = new(new Dictionary(){ - {"ch", "i"}, - {"sh", "u"}, - {"zh", "v"} + {"Ch", "i"}, + {"Sh", "u"}, + {"Zh", "v"} }); From b816d1b866aa93b6d8f2da9f5cef334bda64748b Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sun, 2 Jun 2024 15:21:04 +0800 Subject: [PATCH 13/33] Remove unused key in pinyin alphabet --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 1 - Flow.Launcher.Infrastructure/TranslationMapping.cs | 7 ------- 2 files changed, 8 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index cbec7feae04..10799c676f1 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -83,7 +83,6 @@ public bool ShouldTranslate(string stringToTranslate) map.endConstruct(); var key = resultBuilder.ToString(); - map.setKey(key); return _pinyinCache[content] = (key, map); } diff --git a/Flow.Launcher.Infrastructure/TranslationMapping.cs b/Flow.Launcher.Infrastructure/TranslationMapping.cs index f288c816a64..c976fc522d6 100644 --- a/Flow.Launcher.Infrastructure/TranslationMapping.cs +++ b/Flow.Launcher.Infrastructure/TranslationMapping.cs @@ -12,13 +12,6 @@ public class TranslationMapping private List translatedIndexs = new List(); private int translatedLength = 0; - public string key { get; private set; } - - public void setKey(string key) - { - this.key = key; - } - public void AddNewIndex(int originalIndex, int translatedIndex, int length) { if (constructed) From 9e8a950580becfb5f232df40c2a73e65a5e30200 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 5 Apr 2025 23:01:09 +0800 Subject: [PATCH 14/33] Fix build issue & Improve code quality --- .../PinyinAlphabet.cs | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index e12764ed37b..a63dd99d9aa 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Concurrent; +using System.Collections.Concurrent; using System.Text; -using JetBrains.Annotations; using Flow.Launcher.Infrastructure.UserSettings; using ToolGood.Words.Pinyin; using System.Collections.Generic; @@ -15,11 +13,11 @@ public class PinyinAlphabet : IAlphabet private readonly ConcurrentDictionary _pinyinCache = new(); - private Settings _settings; + private readonly Settings _settings; - public void Initialize([NotNull] Settings settings) + public PinyinAlphabet() { - _settings = settings ?? throw new ArgumentNullException(nameof(settings)); + _settings = Ioc.Default.GetRequiredService(); } public bool ShouldTranslate(string stringToTranslate) @@ -109,16 +107,6 @@ public bool ShouldTranslate(string stringToTranslate) {"Sh", "u"}, {"Zh", "v"} }); - - public PinyinAlphabet() - { - Initialize(Ioc.Default.GetRequiredService()); - } - - private void Initialize([NotNull] Settings settings) - { - _settings = settings ?? throw new ArgumentNullException(nameof(settings)); - } private static readonly ReadOnlyDictionary second = new(new Dictionary() { @@ -200,6 +188,7 @@ private static string ToDoublePin(string fullPinyin) return doublePin.ToString(); } + #endregion } } From a8a305fce08c19f9e64fd450c94974d5cca17e4d Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 5 Apr 2025 23:02:28 +0800 Subject: [PATCH 15/33] Improve code quality --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index a63dd99d9aa..3b24ecc2b89 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -1,10 +1,10 @@ using System.Collections.Concurrent; -using System.Text; -using Flow.Launcher.Infrastructure.UserSettings; -using ToolGood.Words.Pinyin; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Text; using CommunityToolkit.Mvvm.DependencyInjection; +using Flow.Launcher.Infrastructure.UserSettings; +using ToolGood.Words.Pinyin; namespace Flow.Launcher.Infrastructure { @@ -52,12 +52,12 @@ public bool ShouldTranslate(string stringToTranslate) var resultList = WordsHelper.GetPinyinList(content); - StringBuilder resultBuilder = new StringBuilder(); - TranslationMapping map = new TranslationMapping(); + var resultBuilder = new StringBuilder(); + var map = new TranslationMapping(); - bool pre = false; + var pre = false; - for (int i = 0; i < resultList.Length; i++) + for (var i = 0; i < resultList.Length; i++) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { @@ -148,7 +148,7 @@ public bool ShouldTranslate(string stringToTranslate) private static string ToDoublePin(string fullPinyin) { // Assuming s is valid - StringBuilder doublePin = new StringBuilder(); + var doublePin = new StringBuilder(); if (fullPinyin.Length <= 3 && (fullPinyin[0] == 'a' || fullPinyin[0] == 'e' || fullPinyin[0] == 'o')) { From 5be732d533278ab7ce897fd69c3cd6245741af84 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 5 Apr 2025 23:04:12 +0800 Subject: [PATCH 16/33] Use var when neccessary --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 3b24ecc2b89..7bcc7025187 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -163,7 +163,7 @@ private static string ToDoublePin(string fullPinyin) { doublePin.Append(first[fullPinyin[..2]]); - if (second.TryGetValue(fullPinyin[2..], out string tmp)) + if (second.TryGetValue(fullPinyin[2..], out var tmp)) { doublePin.Append(tmp); } @@ -176,7 +176,7 @@ private static string ToDoublePin(string fullPinyin) { doublePin.Append(fullPinyin[0]); - if (second.TryGetValue(fullPinyin[1..], out string tmp)) + if (second.TryGetValue(fullPinyin[1..], out var tmp)) { doublePin.Append(tmp); } From 1f458d3b564a37944a7a10183fc9be5696cf2e95 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 9 Apr 2025 20:06:17 +0800 Subject: [PATCH 17/33] Fix typos & Code quality --- .../TranslationMapping.cs | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Flow.Launcher.Infrastructure/TranslationMapping.cs b/Flow.Launcher.Infrastructure/TranslationMapping.cs index c976fc522d6..b33a094db89 100644 --- a/Flow.Launcher.Infrastructure/TranslationMapping.cs +++ b/Flow.Launcher.Infrastructure/TranslationMapping.cs @@ -8,8 +8,9 @@ public class TranslationMapping { private bool constructed; - private List originalIndexs = new List(); - private List translatedIndexs = new List(); + private readonly List originalIndexes = new(); + private readonly List translatedIndexes = new(); + private int translatedLength = 0; public void AddNewIndex(int originalIndex, int translatedIndex, int length) @@ -17,46 +18,47 @@ public void AddNewIndex(int originalIndex, int translatedIndex, int length) if (constructed) throw new InvalidOperationException("Mapping shouldn't be changed after constructed"); - originalIndexs.Add(originalIndex); - translatedIndexs.Add(translatedIndex); - translatedIndexs.Add(translatedIndex + length); + originalIndexes.Add(originalIndex); + translatedIndexes.Add(translatedIndex); + translatedIndexes.Add(translatedIndex + length); translatedLength += length - 1; } public int MapToOriginalIndex(int translatedIndex) { - if (translatedIndex > translatedIndexs.Last()) + if (translatedIndex > translatedIndexes.Last()) return translatedIndex - translatedLength - 1; int lowerBound = 0; - int upperBound = originalIndexs.Count - 1; + int upperBound = originalIndexes.Count - 1; int count = 0; // Corner case handle - if (translatedIndex < translatedIndexs[0]) + if (translatedIndex < translatedIndexes[0]) return translatedIndex; - if (translatedIndex > translatedIndexs.Last()) + + if (translatedIndex > translatedIndexes.Last()) { int indexDef = 0; - for (int k = 0; k < originalIndexs.Count; k++) + for (int k = 0; k < originalIndexes.Count; k++) { - indexDef += translatedIndexs[k * 2 + 1] - translatedIndexs[k * 2]; + indexDef += translatedIndexes[k * 2 + 1] - translatedIndexes[k * 2]; } return translatedIndex - indexDef - 1; } // Binary Search with Range - for (int i = originalIndexs.Count / 2;; count++) + for (int i = originalIndexes.Count / 2;; count++) { - if (translatedIndex < translatedIndexs[i * 2]) + if (translatedIndex < translatedIndexes[i * 2]) { // move to lower middle upperBound = i; i = (i + lowerBound) / 2; } - else if (translatedIndex > translatedIndexs[i * 2 + 1] - 1) + else if (translatedIndex > translatedIndexes[i * 2 + 1] - 1) { lowerBound = i; // move to upper middle @@ -64,17 +66,19 @@ public int MapToOriginalIndex(int translatedIndex) i = (i + upperBound + 1) / 2; } else - return originalIndexs[i]; + { + return originalIndexes[i]; + } if (upperBound - lowerBound <= 1 && - translatedIndex > translatedIndexs[lowerBound * 2 + 1] && - translatedIndex < translatedIndexs[upperBound * 2]) + translatedIndex > translatedIndexes[lowerBound * 2 + 1] && + translatedIndex < translatedIndexes[upperBound * 2]) { int indexDef = 0; for (int j = 0; j < upperBound; j++) { - indexDef += translatedIndexs[j * 2 + 1] - translatedIndexs[j * 2]; + indexDef += translatedIndexes[j * 2 + 1] - translatedIndexes[j * 2]; } return translatedIndex - indexDef - 1; From 4b7db3cbd62233323bccfdd2188f28e8b6434a43 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 10 Apr 2025 09:36:47 +0800 Subject: [PATCH 18/33] Make function static --- Flow.Launcher.Infrastructure/StringMatcher.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/StringMatcher.cs b/Flow.Launcher.Infrastructure/StringMatcher.cs index 7045517f585..2882cb8f03e 100644 --- a/Flow.Launcher.Infrastructure/StringMatcher.cs +++ b/Flow.Launcher.Infrastructure/StringMatcher.cs @@ -228,7 +228,7 @@ public MatchResult FuzzyMatch(string query, string stringToCompare, MatchOption return new MatchResult(false, UserSettingSearchPrecision); } - private bool IsAcronym(string stringToCompare, int compareStringIndex) + private static bool IsAcronym(string stringToCompare, int compareStringIndex) { if (IsAcronymChar(stringToCompare, compareStringIndex) || IsAcronymNumber(stringToCompare, compareStringIndex)) return true; @@ -237,7 +237,7 @@ private bool IsAcronym(string stringToCompare, int compareStringIndex) } // When counting acronyms, treat a set of numbers as one acronym ie. Visual 2019 as 2 acronyms instead of 5 - private bool IsAcronymCount(string stringToCompare, int compareStringIndex) + private static bool IsAcronymCount(string stringToCompare, int compareStringIndex) { if (IsAcronymChar(stringToCompare, compareStringIndex)) return true; From f5fd6b569ca8466fe4922aa1bd975622217c81ee Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 10 Apr 2025 09:56:27 +0800 Subject: [PATCH 19/33] Use ReadOnlySpan instead --- .../PinyinAlphabet.cs | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 7bcc7025187..1637a285c3f 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -1,4 +1,5 @@ -using System.Collections.Concurrent; +using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; @@ -148,9 +149,11 @@ public bool ShouldTranslate(string stringToTranslate) private static string ToDoublePin(string fullPinyin) { // Assuming s is valid + var fullPinyinSpan = fullPinyin.AsSpan(); var doublePin = new StringBuilder(); - if (fullPinyin.Length <= 3 && (fullPinyin[0] == 'a' || fullPinyin[0] == 'e' || fullPinyin[0] == 'o')) + // Handle special cases (a, o, e) + if (fullPinyin.Length <= 3 && (fullPinyinSpan[0] == 'a' || fullPinyinSpan[0] == 'e' || fullPinyinSpan[0] == 'o')) { if (special.TryGetValue(fullPinyin, out var value)) { @@ -158,31 +161,41 @@ private static string ToDoublePin(string fullPinyin) } } - // zh, ch, sh - if (fullPinyin.Length >= 2 && first.ContainsKey(fullPinyin[..2])) + // Check for initials that are two characters long (zh, ch, sh) + if (fullPinyin.Length >= 2) { - doublePin.Append(first[fullPinyin[..2]]); - - if (second.TryGetValue(fullPinyin[2..], out var tmp)) - { - doublePin.Append(tmp); - } - else + var firstTwo = fullPinyinSpan[..2]; + var firstTwoString = firstTwo.ToString(); + if (first.ContainsKey(firstTwoString)) { - doublePin.Append(fullPinyin[2..]); + doublePin.Append(firstTwoString); + + var lastTwo = fullPinyinSpan[2..]; + var lastTwoString = lastTwo.ToString(); + if (second.TryGetValue(lastTwoString, out var tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(lastTwo); + } } } + // Handle single-character initials else { - doublePin.Append(fullPinyin[0]); + doublePin.Append(fullPinyinSpan[0]); - if (second.TryGetValue(fullPinyin[1..], out var tmp)) + var lastOne = fullPinyinSpan[1..]; + var lastOneString = lastOne.ToString(); + if (second.TryGetValue(lastOneString, out var tmp)) { doublePin.Append(tmp); } else { - doublePin.Append(fullPinyin[1..]); + doublePin.Append(lastOne); } } From 74d54990c913cb6ebfaf07cec97fa1128a09812b Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Fri, 13 Jun 2025 00:21:49 +0800 Subject: [PATCH 20/33] Delete Flow.Launcher/Properties/Resources.fr-FR.resx --- Flow.Launcher/Properties/Resources.fr-FR.resx | 130 ------------------ 1 file changed, 130 deletions(-) delete mode 100644 Flow.Launcher/Properties/Resources.fr-FR.resx diff --git a/Flow.Launcher/Properties/Resources.fr-FR.resx b/Flow.Launcher/Properties/Resources.fr-FR.resx deleted file mode 100644 index ca0f66f533b..00000000000 --- a/Flow.Launcher/Properties/Resources.fr-FR.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Images\dev.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Images\gamemode.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file From 78ffeb8cf2508c56eb40bb027ca3ce73c551fe24 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Fri, 13 Jun 2025 00:24:40 +0800 Subject: [PATCH 21/33] Delete Flow.Launcher/Properties/Resources.he-IL.resx --- Flow.Launcher/Properties/Resources.he-IL.resx | 130 ------------------ 1 file changed, 130 deletions(-) delete mode 100644 Flow.Launcher/Properties/Resources.he-IL.resx diff --git a/Flow.Launcher/Properties/Resources.he-IL.resx b/Flow.Launcher/Properties/Resources.he-IL.resx deleted file mode 100644 index ca0f66f533b..00000000000 --- a/Flow.Launcher/Properties/Resources.he-IL.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\app.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Images\dev.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Images\gamemode.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file From 3eb5fead1f790120729f740a97cf9959a39a417a Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 11 Jun 2025 21:10:56 +1000 Subject: [PATCH 22/33] remove on tag deployment & change NuGet publish to on master push --- appveyor.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index fa0b5956b37..8fba05252cc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -62,7 +62,7 @@ deploy: api_key: secure: sCSd5JWgdzJWDa9kpqECut5ACPKZqcoxKU8ERKC00k7VIjig3/+nFV5zzTcGb0w3 on: - APPVEYOR_REPO_TAG: true + branch: master - provider: GitHub repository: Flow-Launcher/Prereleases @@ -84,12 +84,3 @@ deploy: force_update: true on: branch: master - - - provider: GitHub - release: v$(flowVersion) - auth_token: - secure: ij4UeXUYQBDJxn2YRAAhUOjklOGVKDB87Hn5J8tKIzj13yatoI7sLM666QDQFEgv - artifact: Squirrel Installer, Portable Version, Squirrel nupkg, Squirrel RELEASES - force_update: true - on: - APPVEYOR_REPO_TAG: true From 8f43de696731c7bb535d77a96e9f843de16e20b4 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 6 Jun 2025 13:12:40 +0800 Subject: [PATCH 23/33] Support Msix FireFox bookmarks --- .../FirefoxBookmarkLoader.cs | 133 +++++++++++------- 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index acace2506d4..42a288e3a97 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -264,83 +264,114 @@ public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase /// public override List GetBookmarks() { - return GetBookmarksFromPath(PlacesPath); + var bookmarks1 = GetBookmarksFromPath(PlacesPath); + var bookmarks2 = GetBookmarksFromPath(MsixPlacesPath); + return bookmarks1.Concat(bookmarks2).ToList(); } /// - /// Path to places.sqlite + /// Path to places.sqlite of Msi installer + /// E.g. C:\Users\{UserName}\AppData\Roaming\Mozilla\Firefox + /// /// - /// private static string PlacesPath { get { var profileFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Mozilla\Firefox"); - var profileIni = Path.Combine(profileFolderPath, @"profiles.ini"); - - if (!File.Exists(profileIni)) - return string.Empty; + return GetProfileIniPath(profileFolderPath); + } + } - // get firefox default profile directory from profiles.ini - using var sReader = new StreamReader(profileIni); - var ini = sReader.ReadToEnd(); + /// + /// Path to places.sqlite of MSIX installer + /// E.g. C:\Users\{UserName}\AppData\Local\Packages\Mozilla.Firefox_n80bbvh6b1yt2\LocalCache\Roaming\Mozilla\Firefox + /// + /// + public static string MsixPlacesPath + { + get + { + var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + var packagesPath = Path.Combine(platformPath, "Packages"); + + // Search for folder with Mozilla.Firefox prefix + var firefoxPackageFolder = Directory.EnumerateDirectories(packagesPath, "Mozilla.Firefox*", + SearchOption.TopDirectoryOnly).FirstOrDefault(); + + // Msix FireFox not installed + if (firefoxPackageFolder == null) return string.Empty; + + var profileFolderPath = Path.Combine(firefoxPackageFolder, @"LocalCache\Roaming\Mozilla\Firefox"); + return GetProfileIniPath(profileFolderPath); + } + } - var lines = ini.Split("\r\n").ToList(); + private static string GetProfileIniPath(string profileFolderPath) + { + var profileIni = Path.Combine(profileFolderPath, @"profiles.ini"); + if (!File.Exists(profileIni)) + return string.Empty; - var defaultProfileFolderNameRaw = lines.FirstOrDefault(x => x.Contains("Default=") && x != "Default=1") ?? string.Empty; + // get firefox default profile directory from profiles.ini + using var sReader = new StreamReader(profileIni); + var ini = sReader.ReadToEnd(); - if (string.IsNullOrEmpty(defaultProfileFolderNameRaw)) - return string.Empty; + var lines = ini.Split("\r\n").ToList(); - var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); + var defaultProfileFolderNameRaw = lines.FirstOrDefault(x => x.Contains("Default=") && x != "Default=1") ?? string.Empty; - var indexOfDefaultProfileAttributePath = lines.IndexOf("Path=" + defaultProfileFolderName); + if (string.IsNullOrEmpty(defaultProfileFolderNameRaw)) + return string.Empty; - /* - Current profiles.ini structure example as of Firefox version 69.0.1 + var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); - [Install736426B0AF4A39CB] - Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile - Locked=1 + var indexOfDefaultProfileAttributePath = lines.IndexOf("Path=" + defaultProfileFolderName); - [Profile2] - Name=newblahprofile - IsRelative=0 - Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. + /* + Current profiles.ini structure example as of Firefox version 69.0.1 - [Profile1] - Name=default - IsRelative=1 - Path=Profiles/cydum7q4.default - Default=1 + [Install736426B0AF4A39CB] + Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile + Locked=1 - [Profile0] - Name=default-release - IsRelative=1 - Path=Profiles/7789f565.default-release + [Profile2] + Name=newblahprofile + IsRelative=0 + Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. - [General] - StartWithLastProfile=1 - Version=2 - */ - // Seen in the example above, the IsRelative attribute is always above the Path attribute + [Profile1] + Name=default + IsRelative=1 + Path=Profiles/cydum7q4.default + Default=1 - var relativePath = Path.Combine(defaultProfileFolderName, "places.sqlite"); - var absoluePath = Path.Combine(profileFolderPath, relativePath); + [Profile0] + Name=default-release + IsRelative=1 + Path=Profiles/7789f565.default-release - // If the index is out of range, it means that the default profile is in a custom location or the file is malformed - // If the profile is in a custom location, we need to check - if (indexOfDefaultProfileAttributePath - 1 < 0 || - indexOfDefaultProfileAttributePath - 1 >= lines.Count) - { - return Directory.Exists(absoluePath) ? absoluePath : relativePath; - } + [General] + StartWithLastProfile=1 + Version=2 + */ + // Seen in the example above, the IsRelative attribute is always above the Path attribute - var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1]; + var relativePath = Path.Combine(defaultProfileFolderName, "places.sqlite"); + var absoluePath = Path.Combine(profileFolderPath, relativePath); - return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 - ? relativePath : absoluePath; + // If the index is out of range, it means that the default profile is in a custom location or the file is malformed + // If the profile is in a custom location, we need to check + if (indexOfDefaultProfileAttributePath - 1 < 0 || + indexOfDefaultProfileAttributePath - 1 >= lines.Count) + { + return Directory.Exists(absoluePath) ? absoluePath : relativePath; } + + var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1]; + + return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 + ? relativePath : absoluePath; } } From 281e042ab7016621c649defcca942cf854cd6129 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 6 Jun 2025 13:21:51 +0800 Subject: [PATCH 24/33] Fix IsRelative logic. --- .../FirefoxBookmarkLoader.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index 42a288e3a97..61fd0507350 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -370,7 +370,8 @@ Current profiles.ini structure example as of Firefox version 69.0.1 var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1]; - return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 + // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 + return (relativeAttribute == "0" || relativeAttribute == "IsRelative=0") ? relativePath : absoluePath; } } From ceb05e8651f847cddf9e2fa00d15a1ef741f56b4 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 6 Jun 2025 13:25:43 +0800 Subject: [PATCH 25/33] Add error handling for directory operation --- .../FirefoxBookmarkLoader.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index 61fd0507350..ac382275fc6 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -294,16 +294,22 @@ public static string MsixPlacesPath { var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var packagesPath = Path.Combine(platformPath, "Packages"); - - // Search for folder with Mozilla.Firefox prefix - var firefoxPackageFolder = Directory.EnumerateDirectories(packagesPath, "Mozilla.Firefox*", - SearchOption.TopDirectoryOnly).FirstOrDefault(); + try + { + // Search for folder with Mozilla.Firefox prefix + var firefoxPackageFolder = Directory.EnumerateDirectories(packagesPath, "Mozilla.Firefox*", + SearchOption.TopDirectoryOnly).FirstOrDefault(); - // Msix FireFox not installed - if (firefoxPackageFolder == null) return string.Empty; + // Msix FireFox not installed + if (firefoxPackageFolder == null) return string.Empty; - var profileFolderPath = Path.Combine(firefoxPackageFolder, @"LocalCache\Roaming\Mozilla\Firefox"); - return GetProfileIniPath(profileFolderPath); + var profileFolderPath = Path.Combine(firefoxPackageFolder, @"LocalCache\Roaming\Mozilla\Firefox"); + return GetProfileIniPath(profileFolderPath); + } + catch + { + return string.Empty; + } } } From aaa8e4dc780900ce721555dba06c22fb6dd3de13 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 8 Jun 2025 12:09:07 +0800 Subject: [PATCH 26/33] Use AddRange --- .../FirefoxBookmarkLoader.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index ac382275fc6..dcf7763c354 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -264,9 +264,10 @@ public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase /// public override List GetBookmarks() { - var bookmarks1 = GetBookmarksFromPath(PlacesPath); - var bookmarks2 = GetBookmarksFromPath(MsixPlacesPath); - return bookmarks1.Concat(bookmarks2).ToList(); + var bookmarks = new List(); + bookmarks.AddRange(GetBookmarksFromPath(PlacesPath)); + bookmarks.AddRange(GetBookmarksFromPath(MsixPlacesPath)); + return bookmarks; } /// From 44304f25d68de8dd53b9a1ac414cffbffa07f2fb Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 11 Jun 2025 21:14:05 +0800 Subject: [PATCH 27/33] Change code comments --- .../FirefoxBookmarkLoader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index dcf7763c354..f214997c330 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -343,9 +343,9 @@ Current profiles.ini structure example as of Firefox version 69.0.1 Locked=1 [Profile2] - Name=newblahprofile + Name=dummyprofile IsRelative=0 - Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. + Path=C:\t6h2yuq8.dummyprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. [Profile1] Name=default From 16fd256fd61873320691acd774c87cf7df4ee8be Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Thu, 12 Jun 2025 16:27:48 +0800 Subject: [PATCH 28/33] Fix typos --- .../FirefoxBookmarkLoader.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index f214997c330..8dffeecdc66 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -365,21 +365,21 @@ Current profiles.ini structure example as of Firefox version 69.0.1 // Seen in the example above, the IsRelative attribute is always above the Path attribute var relativePath = Path.Combine(defaultProfileFolderName, "places.sqlite"); - var absoluePath = Path.Combine(profileFolderPath, relativePath); + var absolutePath = Path.Combine(profileFolderPath, relativePath); // If the index is out of range, it means that the default profile is in a custom location or the file is malformed // If the profile is in a custom location, we need to check if (indexOfDefaultProfileAttributePath - 1 < 0 || indexOfDefaultProfileAttributePath - 1 >= lines.Count) { - return Directory.Exists(absoluePath) ? absoluePath : relativePath; + return Directory.Exists(absolutePath) ? absolutePath : relativePath; } var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1]; // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 return (relativeAttribute == "0" || relativeAttribute == "IsRelative=0") - ? relativePath : absoluePath; + ? relativePath : absolutePath; } } From fba42fff1799f8a2c9e9e68e7ab067a17a4690a2 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Fri, 13 Jun 2025 22:31:28 +0800 Subject: [PATCH 29/33] Fix transaltion logic --- .../PinyinAlphabet.cs | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 1637a285c3f..090abb490a8 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -32,14 +32,14 @@ public bool ShouldTranslate(string stringToTranslate) { if (_settings.ShouldUsePinyin) { - if (!_pinyinCache.TryGetValue(content, out var value)) + if (true) { return BuildCacheFromContent(content); } - else - { - return value; - } + //else + //{ + // return value; + //} } return (content, null); } @@ -164,11 +164,10 @@ private static string ToDoublePin(string fullPinyin) // Check for initials that are two characters long (zh, ch, sh) if (fullPinyin.Length >= 2) { - var firstTwo = fullPinyinSpan[..2]; - var firstTwoString = firstTwo.ToString(); - if (first.ContainsKey(firstTwoString)) + var firstTwoString = fullPinyinSpan[..2].ToString(); + if (first.TryGetValue(firstTwoString, out var firstTwoDoublePin)) { - doublePin.Append(firstTwoString); + doublePin.Append(firstTwoDoublePin); var lastTwo = fullPinyinSpan[2..]; var lastTwoString = lastTwo.ToString(); @@ -178,27 +177,26 @@ private static string ToDoublePin(string fullPinyin) } else { - doublePin.Append(lastTwo); + doublePin.Append(lastTwo); // Todo: original pinyin, remove this line if not needed } } - } - // Handle single-character initials - else - { - doublePin.Append(fullPinyinSpan[0]); - - var lastOne = fullPinyinSpan[1..]; - var lastOneString = lastOne.ToString(); - if (second.TryGetValue(lastOneString, out var tmp)) - { - doublePin.Append(tmp); - } else { - doublePin.Append(lastOne); + // Handle single-character initials + doublePin.Append(fullPinyinSpan[0]); + + var lastOne = fullPinyinSpan[1..]; + var lastOneString = lastOne.ToString(); + if (second.TryGetValue(lastOneString, out var tmp)) + { + doublePin.Append(tmp); + } + else + { + doublePin.Append(lastOne); + } } } - return doublePin.ToString(); } From b31a7408d3c279e92480530fc6a8cd8167b435c2 Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Fri, 13 Jun 2025 23:39:14 +0800 Subject: [PATCH 30/33] Simple refactor --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 090abb490a8..2c548e0a362 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -30,18 +30,12 @@ public bool ShouldTranslate(string stringToTranslate) public (string translation, TranslationMapping map) Translate(string content) { - if (_settings.ShouldUsePinyin) - { - if (true) - { - return BuildCacheFromContent(content); - } - //else - //{ - // return value; - //} - } - return (content, null); + if (!_settings.ShouldUsePinyin) + return (content, null); + + return _pinyinCache.TryGetValue(content, out var value) + ? value + : BuildCacheFromContent(content); } private (string translation, TranslationMapping map) BuildCacheFromContent(string content) From 818aac715e47aa0bcda35b2431dbeda4219bb88d Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 14 Jun 2025 14:32:00 +0800 Subject: [PATCH 31/33] Use lookup table to translate full pinyin to double pinyin --- .../PinyinAlphabet.cs | 166 +- .../UserSettings/Settings.cs | 2 + Flow.Launcher/Flow.Launcher.csproj | 3 + Flow.Launcher/Resources/double_pinyin.json | 3746 +++++++++++++++++ 4 files changed, 3805 insertions(+), 112 deletions(-) create mode 100644 Flow.Launcher/Resources/double_pinyin.json diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 2c548e0a362..6a2cd1e6681 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -2,10 +2,13 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Text; +using System.Text.Json; using CommunityToolkit.Mvvm.DependencyInjection; using Flow.Launcher.Infrastructure.UserSettings; using ToolGood.Words.Pinyin; +using Flow.Launcher.Infrastructure.Logger; namespace Flow.Launcher.Infrastructure { @@ -16,9 +19,49 @@ public class PinyinAlphabet : IAlphabet private readonly Settings _settings; + private ReadOnlyDictionary currentDoublePinyinTable; + public PinyinAlphabet() { _settings = Ioc.Default.GetRequiredService(); + LoadDoublePinyinTable(); + + _settings.PropertyChanged += (sender, e) => + { + if (e.PropertyName == nameof(Settings.UseDoublePinyin) || + e.PropertyName == nameof(Settings.DoublePinyinSchema)) + { + LoadDoublePinyinTable(); + _pinyinCache.Clear(); + } + }; + } + + private void LoadDoublePinyinTable() + { + if (_settings.UseDoublePinyin) + { + var tablePath = Path.Join(AppContext.BaseDirectory, "Resources", "double_pinyin.json"); + try + { + using var fs = File.OpenRead(tablePath); + Dictionary> table = JsonSerializer.Deserialize>>(fs); + if (!table.TryGetValue(_settings.DoublePinyinSchema, out var value)) + { + throw new InvalidOperationException("DoublePinyinSchema is invalid."); + } + currentDoublePinyinTable = new ReadOnlyDictionary(value); + } + catch (System.Exception e) + { + Log.Exception(nameof(PinyinAlphabet), "Failed to load double pinyin table from file: " + tablePath, e); + currentDoublePinyinTable = new ReadOnlyDictionary(new Dictionary()); + } + } + else + { + currentDoublePinyinTable = new ReadOnlyDictionary(new Dictionary()); + } } public bool ShouldTranslate(string stringToTranslate) @@ -50,7 +93,7 @@ public bool ShouldTranslate(string stringToTranslate) var resultBuilder = new StringBuilder(); var map = new TranslationMapping(); - var pre = false; + var previousIsChinese = false; for (var i = 0; i < resultList.Length; i++) { @@ -58,18 +101,19 @@ public bool ShouldTranslate(string stringToTranslate) { string dp = _settings.UseDoublePinyin ? ToDoublePin(resultList[i]) : resultList[i]; map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); - resultBuilder.Append(' '); + if (previousIsChinese) + { + resultBuilder.Append(' '); + } resultBuilder.Append(dp); - pre = true; } else { - if (pre) + if (previousIsChinese) { - pre = false; + previousIsChinese = false; resultBuilder.Append(' '); } - resultBuilder.Append(resultList[i]); } } @@ -83,115 +127,13 @@ public bool ShouldTranslate(string stringToTranslate) #region Double Pinyin - private static readonly ReadOnlyDictionary special = new(new Dictionary(){ - {"A", "aa"}, - {"Ai", "ai"}, - {"An", "an"}, - {"Ang", "ah"}, - {"Ao", "ao"}, - {"E", "ee"}, - {"Ei", "ei"}, - {"En", "en"}, - {"Er", "er"}, - {"O", "oo"}, - {"Ou", "ou"} - }); - - private static readonly ReadOnlyDictionary first = new(new Dictionary(){ - {"Ch", "i"}, - {"Sh", "u"}, - {"Zh", "v"} - }); - - private static readonly ReadOnlyDictionary second = new(new Dictionary() + private string ToDoublePin(string fullPinyin) { - {"ua", "x"}, - {"ei", "w"}, - {"e", "e"}, - {"ou", "z"}, - {"iu", "q"}, - {"ve", "t"}, - {"ue", "t"}, - {"u", "u"}, - {"i", "i"}, - {"o", "o"}, - {"uo", "o"}, - {"ie", "p"}, - {"a", "a"}, - {"ong", "s"}, - {"iong", "s"}, - {"ai", "d"}, - {"ing", "k"}, - {"uai", "k"}, - {"ang", "h"}, - {"uan", "r"}, - {"an", "j"}, - {"en", "f"}, - {"ia", "x"}, - {"iang", "l"}, - {"uang", "l"}, - {"eng", "g"}, - {"in", "b"}, - {"ao", "c"}, - {"v", "v"}, - {"ui", "v"}, - {"un", "y"}, - {"iao", "n"}, - {"ian", "m"} - }); - - private static string ToDoublePin(string fullPinyin) - { - // Assuming s is valid - var fullPinyinSpan = fullPinyin.AsSpan(); - var doublePin = new StringBuilder(); - - // Handle special cases (a, o, e) - if (fullPinyin.Length <= 3 && (fullPinyinSpan[0] == 'a' || fullPinyinSpan[0] == 'e' || fullPinyinSpan[0] == 'o')) + if (currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)) { - if (special.TryGetValue(fullPinyin, out var value)) - { - return value; - } - } - - // Check for initials that are two characters long (zh, ch, sh) - if (fullPinyin.Length >= 2) - { - var firstTwoString = fullPinyinSpan[..2].ToString(); - if (first.TryGetValue(firstTwoString, out var firstTwoDoublePin)) - { - doublePin.Append(firstTwoDoublePin); - - var lastTwo = fullPinyinSpan[2..]; - var lastTwoString = lastTwo.ToString(); - if (second.TryGetValue(lastTwoString, out var tmp)) - { - doublePin.Append(tmp); - } - else - { - doublePin.Append(lastTwo); // Todo: original pinyin, remove this line if not needed - } - } - else - { - // Handle single-character initials - doublePin.Append(fullPinyinSpan[0]); - - var lastOne = fullPinyinSpan[1..]; - var lastOneString = lastOne.ToString(); - if (second.TryGetValue(lastOneString, out var tmp)) - { - doublePin.Append(tmp); - } - else - { - doublePin.Append(lastOne); - } - } + return doublePinyinValue; } - return doublePin.ToString(); + return fullPinyin; } #endregion diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index b10f9502e0b..e7306e3dd9b 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -292,6 +292,8 @@ public CustomBrowserViewModel CustomBrowser public bool UseDoublePinyin { get; set; } = true; //For developing + public string DoublePinyinSchema { get; set; } = "XiaoHe"; //For developing + public bool AlwaysPreview { get; set; } = false; public bool AlwaysStartEn { get; set; } = false; diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index d75d15a217e..37e1f6bcfd5 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -127,6 +127,9 @@ PreserveNewest + + PreserveNewest + diff --git a/Flow.Launcher/Resources/double_pinyin.json b/Flow.Launcher/Resources/double_pinyin.json new file mode 100644 index 00000000000..6b8ae06c0ba --- /dev/null +++ b/Flow.Launcher/Resources/double_pinyin.json @@ -0,0 +1,3746 @@ +{ + "XiaoHe": { + "Lv": "lv", + "Lve": "lt", + "Lue": "lt", + "Nv": "nv", + "Nve": "nt", + "Nue": "nt", + "A": "aa", + "O": "oo", + "E": "ee", + "Ai": "ai", + "Ei": "ei", + "Ao": "ao", + "Ou": "ou", + "An": "an", + "En": "en", + "Ang": "ah", + "Eng": "eg", + "Er": "er", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yc", + "You": "yz", + "Yan": "yj", + "Yin": "yb", + "Yang": "yh", + "Ying": "yk", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wd", + "Wei": "ww", + "Wan": "wj", + "Wen": "wf", + "Wang": "wh", + "Weng": "wg", + "Yu": "yu", + "Yue": "yt", + "Yuan": "yr", + "Yun": "yy", + "Yong": "ys", + "Ba": "ba", + "Bai": "bd", + "Ban": "bj", + "Bang": "bh", + "Bao": "bc", + "Bei": "bw", + "Ben": "bf", + "Beng": "bg", + "Bi": "bi", + "Bian": "bm", + "Biang": "bl", + "Biao": "bn", + "Bie": "bp", + "Bin": "bb", + "Bing": "bk", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cd", + "Can": "cj", + "Cang": "ch", + "Cao": "cc", + "Ce": "ce", + "Cen": "cf", + "Ceng": "cg", + "Cha": "ia", + "Chai": "id", + "Chan": "ij", + "Chang": "ih", + "Chao": "ic", + "Che": "ie", + "Chen": "if", + "Cheng": "ig", + "Chi": "ii", + "Chong": "is", + "Chou": "iz", + "Chu": "iu", + "Chua": "ix", + "Chuai": "ik", + "Chuan": "ir", + "Chuang": "il", + "Chui": "iv", + "Chun": "iy", + "Chuo": "io", + "Ci": "ci", + "Cong": "cs", + "Cou": "cz", + "Cu": "cu", + "Cuan": "cr", + "Cui": "cv", + "Cun": "cy", + "Cuo": "co", + "Da": "da", + "Dai": "dd", + "Dan": "dj", + "Dang": "dh", + "Dao": "dc", + "De": "de", + "Dei": "dw", + "Den": "df", + "Deng": "dg", + "Di": "di", + "Dia": "dx", + "Dian": "dm", + "Diao": "dn", + "Die": "dp", + "Ding": "dk", + "Diu": "dq", + "Dong": "ds", + "Dou": "dz", + "Du": "du", + "Duan": "dr", + "Dui": "dv", + "Dun": "dy", + "Duo": "do", + "Fa": "fa", + "Fan": "fj", + "Fang": "fh", + "Fei": "fw", + "Fen": "ff", + "Feng": "fg", + "Fiao": "fn", + "Fo": "fo", + "Fou": "fz", + "Fu": "fu", + "Ga": "ga", + "Gai": "gd", + "Gan": "gj", + "Gang": "gh", + "Gao": "gc", + "Ge": "ge", + "Gei": "gw", + "Gen": "gf", + "Geng": "gg", + "Gong": "gs", + "Gou": "gz", + "Gu": "gu", + "Gua": "gx", + "Guai": "gk", + "Guan": "gr", + "Guang": "gl", + "Gui": "gv", + "Gun": "gy", + "Guo": "go", + "Ha": "ha", + "Hai": "hd", + "Han": "hj", + "Hang": "hh", + "Hao": "hc", + "He": "he", + "Hei": "hw", + "Hen": "hf", + "Heng": "hg", + "Hong": "hs", + "Hou": "hz", + "Hu": "hu", + "Hua": "hx", + "Huai": "hk", + "Huan": "hr", + "Huang": "hl", + "Hui": "hv", + "Hun": "hy", + "Huo": "ho", + "Ji": "ji", + "Jia": "jx", + "Jian": "jm", + "Jiang": "jl", + "Jiao": "jn", + "Jie": "jp", + "Jin": "jb", + "Jing": "jk", + "Jiong": "js", + "Jiu": "jq", + "Ju": "ju", + "Juan": "jr", + "Jue": "jt", + "Jun": "jy", + "Ka": "ka", + "Kai": "kd", + "Kan": "kj", + "Kang": "kh", + "Kao": "kc", + "Ke": "ke", + "Ken": "kf", + "Keng": "kg", + "Kong": "ks", + "Kou": "kz", + "Ku": "ku", + "Kua": "kx", + "Kuai": "kk", + "Kuan": "kr", + "Kuang": "kl", + "Kui": "kv", + "Kun": "ky", + "Kuo": "ko", + "La": "la", + "Lai": "ld", + "Lan": "lj", + "Lang": "lh", + "Lao": "lc", + "Le": "le", + "Lei": "lw", + "Leng": "lg", + "Li": "li", + "Lia": "lx", + "Lian": "lm", + "Liang": "ll", + "Liao": "ln", + "Lie": "lp", + "Lin": "lb", + "Ling": "lk", + "Liu": "lq", + "Lo": "lo", + "Long": "ls", + "Lou": "lz", + "Lu": "lu", + "Luan": "lr", + "Lun": "ly", + "Luo": "lo", + "Ma": "ma", + "Mai": "md", + "Man": "mj", + "Mang": "mh", + "Mao": "mc", + "Me": "me", + "Mei": "mw", + "Men": "mf", + "Meng": "mg", + "Mi": "mi", + "Mian": "mm", + "Miao": "mn", + "Mie": "mp", + "Min": "mb", + "Ming": "mk", + "Miu": "mq", + "Mo": "mo", + "Mou": "mz", + "Mu": "mu", + "Na": "na", + "Nai": "nd", + "Nan": "nj", + "Nang": "nh", + "Nao": "nc", + "Ne": "ne", + "Nei": "nw", + "Nen": "nf", + "Neng": "ng", + "Ni": "ni", + "Nian": "nm", + "Niang": "nl", + "Niao": "nn", + "Nie": "np", + "Nin": "nb", + "Ning": "nk", + "Niu": "nq", + "Nong": "ns", + "Nou": "nz", + "Nu": "nu", + "Nuan": "nr", + "Nun": "ny", + "Nuo": "no", + "Pa": "pa", + "Pai": "pd", + "Pan": "pj", + "Pang": "ph", + "Pao": "pc", + "Pei": "pw", + "Pen": "pf", + "Peng": "pg", + "Pi": "pi", + "Pian": "pm", + "Piao": "pn", + "Pie": "pp", + "Pin": "pb", + "Ping": "pk", + "Po": "po", + "Pou": "pz", + "Pu": "pu", + "Qi": "qi", + "Qia": "qx", + "Qian": "qm", + "Qiang": "ql", + "Qiao": "qn", + "Qie": "qp", + "Qin": "qb", + "Qing": "qk", + "Qiong": "qs", + "Qiu": "qq", + "Qu": "qu", + "Quan": "qr", + "Que": "qt", + "Qun": "qy", + "Ran": "rj", + "Rang": "rh", + "Rao": "rc", + "Re": "re", + "Ren": "rf", + "Reng": "rg", + "Ri": "ri", + "Rong": "rs", + "Rou": "rz", + "Ru": "ru", + "Rua": "rx", + "Ruan": "rr", + "Rui": "rv", + "Run": "ry", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sd", + "San": "sj", + "Sang": "sh", + "Sao": "sc", + "Se": "se", + "Sen": "sf", + "Seng": "sg", + "Sha": "ua", + "Shai": "ud", + "Shan": "uj", + "Shang": "uh", + "Shao": "uc", + "She": "ue", + "Shei": "uw", + "Shen": "uf", + "Sheng": "ug", + "Shi": "ui", + "Shou": "uz", + "Shu": "uu", + "Shua": "ux", + "Shuai": "uk", + "Shuan": "ur", + "Shuang": "ul", + "Shui": "uv", + "Shun": "uy", + "Shuo": "uo", + "Si": "si", + "Song": "ss", + "Sou": "sz", + "Su": "su", + "Suan": "sr", + "Sui": "sv", + "Sun": "sy", + "Suo": "so", + "Ta": "ta", + "Tai": "td", + "Tan": "tj", + "Tang": "th", + "Tao": "tc", + "Te": "te", + "Tei": "tw", + "Teng": "tg", + "Ti": "ti", + "Tian": "tm", + "Tiao": "tn", + "Tie": "tp", + "Ting": "tk", + "Tong": "ts", + "Tou": "tz", + "Tu": "tu", + "Tuan": "tr", + "Tui": "tv", + "Tun": "ty", + "Tuo": "to", + "Xi": "xi", + "Xia": "xx", + "Xian": "xm", + "Xiang": "xl", + "Xiao": "xn", + "Xie": "xp", + "Xin": "xb", + "Xing": "xk", + "Xiong": "xs", + "Xiu": "xq", + "Xu": "xu", + "Xuan": "xr", + "Xue": "xt", + "Xun": "xy", + "Za": "za", + "Zai": "zd", + "Zan": "zj", + "Zang": "zh", + "Zao": "zc", + "Ze": "ze", + "Zei": "zw", + "Zen": "zf", + "Zeng": "zg", + "Zha": "va", + "Zhai": "vd", + "Zhan": "vj", + "Zhang": "vh", + "Zhao": "vc", + "Zhe": "ve", + "Zhen": "vf", + "Zheng": "vg", + "Zhi": "vi", + "Zhong": "vs", + "Zhou": "vz", + "Zhu": "vu", + "Zhua": "vx", + "Zhuai": "vk", + "Zhuan": "vr", + "Zhuang": "vl", + "Zhui": "vv", + "Zhun": "vy", + "Zhuo": "vo", + "Zi": "zi", + "Zong": "zs", + "Zou": "zz", + "Zu": "zu", + "Zuan": "zr", + "Zui": "zv", + "Zun": "zy", + "Zuo": "zo" + }, + "ZiRanMa": { + "Lv": "lv", + "Lve": "lt", + "Lue": "lt", + "Nv": "nv", + "Nve": "nt", + "Nue": "nt", + "A": "aa", + "O": "oo", + "E": "ee", + "Ai": "ai", + "Ei": "ei", + "Ao": "ao", + "Ou": "ou", + "An": "an", + "En": "en", + "Ang": "ah", + "Eng": "eg", + "Er": "er", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yk", + "You": "yb", + "Yan": "yj", + "Yin": "yn", + "Yang": "yh", + "Ying": "yy", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wl", + "Wei": "wz", + "Wan": "wj", + "Wen": "wf", + "Wang": "wh", + "Weng": "wg", + "Yu": "yu", + "Yue": "yt", + "Yuan": "yr", + "Yun": "yp", + "Yong": "ys", + "Ba": "ba", + "Bai": "bl", + "Ban": "bj", + "Bang": "bh", + "Bao": "bk", + "Bei": "bz", + "Ben": "bf", + "Beng": "bg", + "Bi": "bi", + "Bian": "bm", + "Biang": "bd", + "Biao": "bc", + "Bie": "bx", + "Bin": "bn", + "Bing": "by", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cl", + "Can": "cj", + "Cang": "ch", + "Cao": "ck", + "Ce": "ce", + "Cen": "cf", + "Ceng": "cg", + "Cha": "ia", + "Chai": "il", + "Chan": "ij", + "Chang": "ih", + "Chao": "ik", + "Che": "ie", + "Chen": "if", + "Cheng": "ig", + "Chi": "ii", + "Chong": "is", + "Chou": "ib", + "Chu": "iu", + "Chua": "iw", + "Chuai": "iy", + "Chuan": "ir", + "Chuang": "id", + "Chui": "iv", + "Chun": "ip", + "Chuo": "io", + "Ci": "ci", + "Cong": "cs", + "Cou": "cb", + "Cu": "cu", + "Cuan": "cr", + "Cui": "cv", + "Cun": "cp", + "Cuo": "co", + "Da": "da", + "Dai": "dl", + "Dan": "dj", + "Dang": "dh", + "Dao": "dk", + "De": "de", + "Dei": "dz", + "Den": "df", + "Deng": "dg", + "Di": "di", + "Dia": "dw", + "Dian": "dm", + "Diao": "dc", + "Die": "dx", + "Ding": "dy", + "Diu": "dq", + "Dong": "ds", + "Dou": "db", + "Du": "du", + "Duan": "dr", + "Dui": "dv", + "Dun": "dp", + "Duo": "do", + "Fa": "fa", + "Fan": "fj", + "Fang": "fh", + "Fei": "fz", + "Fen": "ff", + "Feng": "fg", + "Fiao": "fc", + "Fo": "fo", + "Fou": "fb", + "Fu": "fu", + "Ga": "ga", + "Gai": "gl", + "Gan": "gj", + "Gang": "gh", + "Gao": "gk", + "Ge": "ge", + "Gei": "gz", + "Gen": "gf", + "Geng": "gg", + "Gong": "gs", + "Gou": "gb", + "Gu": "gu", + "Gua": "gw", + "Guai": "gy", + "Guan": "gr", + "Guang": "gd", + "Gui": "gv", + "Gun": "gp", + "Guo": "go", + "Ha": "ha", + "Hai": "hl", + "Han": "hj", + "Hang": "hh", + "Hao": "hk", + "He": "he", + "Hei": "hz", + "Hen": "hf", + "Heng": "hg", + "Hong": "hs", + "Hou": "hb", + "Hu": "hu", + "Hua": "hw", + "Huai": "hy", + "Huan": "hr", + "Huang": "hd", + "Hui": "hv", + "Hun": "hp", + "Huo": "ho", + "Ji": "ji", + "Jia": "jw", + "Jian": "jm", + "Jiang": "jd", + "Jiao": "jc", + "Jie": "jx", + "Jin": "jn", + "Jing": "jy", + "Jiong": "js", + "Jiu": "jq", + "Ju": "ju", + "Juan": "jr", + "Jue": "jt", + "Jun": "jp", + "Ka": "ka", + "Kai": "kl", + "Kan": "kj", + "Kang": "kh", + "Kao": "kk", + "Ke": "ke", + "Ken": "kf", + "Keng": "kg", + "Kong": "ks", + "Kou": "kb", + "Ku": "ku", + "Kua": "kw", + "Kuai": "ky", + "Kuan": "kr", + "Kuang": "kd", + "Kui": "kv", + "Kun": "kp", + "Kuo": "ko", + "La": "la", + "Lai": "ll", + "Lan": "lj", + "Lang": "lh", + "Lao": "lk", + "Le": "le", + "Lei": "lz", + "Leng": "lg", + "Li": "li", + "Lia": "lw", + "Lian": "lm", + "Liang": "ld", + "Liao": "lc", + "Lie": "lx", + "Lin": "ln", + "Ling": "ly", + "Liu": "lq", + "Lo": "lo", + "Long": "ls", + "Lou": "lb", + "Lu": "lu", + "Luan": "lr", + "Lun": "lp", + "Luo": "lo", + "Ma": "ma", + "Mai": "ml", + "Man": "mj", + "Mang": "mh", + "Mao": "mk", + "Me": "me", + "Mei": "mz", + "Men": "mf", + "Meng": "mg", + "Mi": "mi", + "Mian": "mm", + "Miao": "mc", + "Mie": "mx", + "Min": "mn", + "Ming": "my", + "Miu": "mq", + "Mo": "mo", + "Mou": "mb", + "Mu": "mu", + "Na": "na", + "Nai": "nl", + "Nan": "nj", + "Nang": "nh", + "Nao": "nk", + "Ne": "ne", + "Nei": "nz", + "Nen": "nf", + "Neng": "ng", + "Ni": "ni", + "Nian": "nm", + "Niang": "nd", + "Niao": "nc", + "Nie": "nx", + "Nin": "nn", + "Ning": "ny", + "Niu": "nq", + "Nong": "ns", + "Nou": "nb", + "Nu": "nu", + "Nuan": "nr", + "Nun": "np", + "Nuo": "no", + "Pa": "pa", + "Pai": "pl", + "Pan": "pj", + "Pang": "ph", + "Pao": "pk", + "Pei": "pz", + "Pen": "pf", + "Peng": "pg", + "Pi": "pi", + "Pian": "pm", + "Piao": "pc", + "Pie": "px", + "Pin": "pn", + "Ping": "py", + "Po": "po", + "Pou": "pb", + "Pu": "pu", + "Qi": "qi", + "Qia": "qw", + "Qian": "qm", + "Qiang": "qd", + "Qiao": "qc", + "Qie": "qx", + "Qin": "qn", + "Qing": "qy", + "Qiong": "qs", + "Qiu": "qq", + "Qu": "qu", + "Quan": "qr", + "Que": "qt", + "Qun": "qp", + "Ran": "rj", + "Rang": "rh", + "Rao": "rk", + "Re": "re", + "Ren": "rf", + "Reng": "rg", + "Ri": "ri", + "Rong": "rs", + "Rou": "rb", + "Ru": "ru", + "Rua": "rw", + "Ruan": "rr", + "Rui": "rv", + "Run": "rp", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sl", + "San": "sj", + "Sang": "sh", + "Sao": "sk", + "Se": "se", + "Sen": "sf", + "Seng": "sg", + "Sha": "ua", + "Shai": "ul", + "Shan": "uj", + "Shang": "uh", + "Shao": "uk", + "She": "ue", + "Shei": "uz", + "Shen": "uf", + "Sheng": "ug", + "Shi": "ui", + "Shou": "ub", + "Shu": "uu", + "Shua": "uw", + "Shuai": "uy", + "Shuan": "ur", + "Shuang": "ud", + "Shui": "uv", + "Shun": "up", + "Shuo": "uo", + "Si": "si", + "Song": "ss", + "Sou": "sb", + "Su": "su", + "Suan": "sr", + "Sui": "sv", + "Sun": "sp", + "Suo": "so", + "Ta": "ta", + "Tai": "tl", + "Tan": "tj", + "Tang": "th", + "Tao": "tk", + "Te": "te", + "Tei": "tz", + "Teng": "tg", + "Ti": "ti", + "Tian": "tm", + "Tiao": "tc", + "Tie": "tx", + "Ting": "ty", + "Tong": "ts", + "Tou": "tb", + "Tu": "tu", + "Tuan": "tr", + "Tui": "tv", + "Tun": "tp", + "Tuo": "to", + "Xi": "xi", + "Xia": "xw", + "Xian": "xm", + "Xiang": "xd", + "Xiao": "xc", + "Xie": "xx", + "Xin": "xn", + "Xing": "xy", + "Xiong": "xs", + "Xiu": "xq", + "Xu": "xu", + "Xuan": "xr", + "Xue": "xt", + "Xun": "xp", + "Za": "za", + "Zai": "zl", + "Zan": "zj", + "Zang": "zh", + "Zao": "zk", + "Ze": "ze", + "Zei": "zz", + "Zen": "zf", + "Zeng": "zg", + "Zha": "va", + "Zhai": "vl", + "Zhan": "vj", + "Zhang": "vh", + "Zhao": "vk", + "Zhe": "ve", + "Zhen": "vf", + "Zheng": "vg", + "Zhi": "vi", + "Zhong": "vs", + "Zhou": "vb", + "Zhu": "vu", + "Zhua": "vw", + "Zhuai": "vy", + "Zhuan": "vr", + "Zhuang": "vd", + "Zhui": "vv", + "Zhun": "vp", + "Zhuo": "vo", + "Zi": "zi", + "Zong": "zs", + "Zou": "zb", + "Zu": "zu", + "Zuan": "zr", + "Zui": "zv", + "Zun": "zp", + "Zuo": "zo" + }, + "WeiRuan": { + "Lv": "ly", + "Lve": "lt", + "Lue": "lt", + "Nv": "ny", + "Nve": "nt", + "Nue": "nt", + "A": "oa", + "O": "oo", + "E": "oe", + "Ai": "ol", + "Ei": "oz", + "Ao": "ok", + "Ou": "ob", + "An": "oj", + "En": "of", + "Ang": "oh", + "Eng": "og", + "Er": "or", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yk", + "You": "yb", + "Yan": "yj", + "Yin": "yn", + "Yang": "yh", + "Ying": "y;", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wl", + "Wei": "wz", + "Wan": "wj", + "Wen": "wf", + "Wang": "wh", + "Weng": "wg", + "Yu": "yu", + "Yue": "yt", + "Yuan": "yr", + "Yun": "yp", + "Yong": "ys", + "Ba": "ba", + "Bai": "bl", + "Ban": "bj", + "Bang": "bh", + "Bao": "bk", + "Bei": "bz", + "Ben": "bf", + "Beng": "bg", + "Bi": "bi", + "Bian": "bm", + "Biang": "bd", + "Biao": "bc", + "Bie": "bx", + "Bin": "bn", + "Bing": "b;", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cl", + "Can": "cj", + "Cang": "ch", + "Cao": "ck", + "Ce": "ce", + "Cen": "cf", + "Ceng": "cg", + "Cha": "ia", + "Chai": "il", + "Chan": "ij", + "Chang": "ih", + "Chao": "ik", + "Che": "ie", + "Chen": "if", + "Cheng": "ig", + "Chi": "ii", + "Chong": "is", + "Chou": "ib", + "Chu": "iu", + "Chua": "iw", + "Chuai": "iy", + "Chuan": "ir", + "Chuang": "id", + "Chui": "iv", + "Chun": "ip", + "Chuo": "io", + "Ci": "ci", + "Cong": "cs", + "Cou": "cb", + "Cu": "cu", + "Cuan": "cr", + "Cui": "cv", + "Cun": "cp", + "Cuo": "co", + "Da": "da", + "Dai": "dl", + "Dan": "dj", + "Dang": "dh", + "Dao": "dk", + "De": "de", + "Dei": "dz", + "Den": "df", + "Deng": "dg", + "Di": "di", + "Dia": "dw", + "Dian": "dm", + "Diao": "dc", + "Die": "dx", + "Ding": "d;", + "Diu": "dq", + "Dong": "ds", + "Dou": "db", + "Du": "du", + "Duan": "dr", + "Dui": "dv", + "Dun": "dp", + "Duo": "do", + "Fa": "fa", + "Fan": "fj", + "Fang": "fh", + "Fei": "fz", + "Fen": "ff", + "Feng": "fg", + "Fiao": "fc", + "Fo": "fo", + "Fou": "fb", + "Fu": "fu", + "Ga": "ga", + "Gai": "gl", + "Gan": "gj", + "Gang": "gh", + "Gao": "gk", + "Ge": "ge", + "Gei": "gz", + "Gen": "gf", + "Geng": "gg", + "Gong": "gs", + "Gou": "gb", + "Gu": "gu", + "Gua": "gw", + "Guai": "gy", + "Guan": "gr", + "Guang": "gd", + "Gui": "gv", + "Gun": "gp", + "Guo": "go", + "Ha": "ha", + "Hai": "hl", + "Han": "hj", + "Hang": "hh", + "Hao": "hk", + "He": "he", + "Hei": "hz", + "Hen": "hf", + "Heng": "hg", + "Hong": "hs", + "Hou": "hb", + "Hu": "hu", + "Hua": "hw", + "Huai": "hy", + "Huan": "hr", + "Huang": "hd", + "Hui": "hv", + "Hun": "hp", + "Huo": "ho", + "Ji": "ji", + "Jia": "jw", + "Jian": "jm", + "Jiang": "jd", + "Jiao": "jc", + "Jie": "jx", + "Jin": "jn", + "Jing": "j;", + "Jiong": "js", + "Jiu": "jq", + "Ju": "ju", + "Juan": "jr", + "Jue": "jt", + "Jun": "jp", + "Ka": "ka", + "Kai": "kl", + "Kan": "kj", + "Kang": "kh", + "Kao": "kk", + "Ke": "ke", + "Ken": "kf", + "Keng": "kg", + "Kong": "ks", + "Kou": "kb", + "Ku": "ku", + "Kua": "kw", + "Kuai": "ky", + "Kuan": "kr", + "Kuang": "kd", + "Kui": "kv", + "Kun": "kp", + "Kuo": "ko", + "La": "la", + "Lai": "ll", + "Lan": "lj", + "Lang": "lh", + "Lao": "lk", + "Le": "le", + "Lei": "lz", + "Leng": "lg", + "Li": "li", + "Lia": "lw", + "Lian": "lm", + "Liang": "ld", + "Liao": "lc", + "Lie": "lx", + "Lin": "ln", + "Ling": "l;", + "Liu": "lq", + "Lo": "lo", + "Long": "ls", + "Lou": "lb", + "Lu": "lu", + "Luan": "lr", + "Lun": "lp", + "Luo": "lo", + "Ma": "ma", + "Mai": "ml", + "Man": "mj", + "Mang": "mh", + "Mao": "mk", + "Me": "me", + "Mei": "mz", + "Men": "mf", + "Meng": "mg", + "Mi": "mi", + "Mian": "mm", + "Miao": "mc", + "Mie": "mx", + "Min": "mn", + "Ming": "m;", + "Miu": "mq", + "Mo": "mo", + "Mou": "mb", + "Mu": "mu", + "Na": "na", + "Nai": "nl", + "Nan": "nj", + "Nang": "nh", + "Nao": "nk", + "Ne": "ne", + "Nei": "nz", + "Nen": "nf", + "Neng": "ng", + "Ni": "ni", + "Nian": "nm", + "Niang": "nd", + "Niao": "nc", + "Nie": "nx", + "Nin": "nn", + "Ning": "n;", + "Niu": "nq", + "Nong": "ns", + "Nou": "nb", + "Nu": "nu", + "Nuan": "nr", + "Nun": "np", + "Nuo": "no", + "Pa": "pa", + "Pai": "pl", + "Pan": "pj", + "Pang": "ph", + "Pao": "pk", + "Pei": "pz", + "Pen": "pf", + "Peng": "pg", + "Pi": "pi", + "Pian": "pm", + "Piao": "pc", + "Pie": "px", + "Pin": "pn", + "Ping": "p;", + "Po": "po", + "Pou": "pb", + "Pu": "pu", + "Qi": "qi", + "Qia": "qw", + "Qian": "qm", + "Qiang": "qd", + "Qiao": "qc", + "Qie": "qx", + "Qin": "qn", + "Qing": "q;", + "Qiong": "qs", + "Qiu": "qq", + "Qu": "qu", + "Quan": "qr", + "Que": "qt", + "Qun": "qp", + "Ran": "rj", + "Rang": "rh", + "Rao": "rk", + "Re": "re", + "Ren": "rf", + "Reng": "rg", + "Ri": "ri", + "Rong": "rs", + "Rou": "rb", + "Ru": "ru", + "Rua": "rw", + "Ruan": "rr", + "Rui": "rv", + "Run": "rp", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sl", + "San": "sj", + "Sang": "sh", + "Sao": "sk", + "Se": "se", + "Sen": "sf", + "Seng": "sg", + "Sha": "ua", + "Shai": "ul", + "Shan": "uj", + "Shang": "uh", + "Shao": "uk", + "She": "ue", + "Shei": "uz", + "Shen": "uf", + "Sheng": "ug", + "Shi": "ui", + "Shou": "ub", + "Shu": "uu", + "Shua": "uw", + "Shuai": "uy", + "Shuan": "ur", + "Shuang": "ud", + "Shui": "uv", + "Shun": "up", + "Shuo": "uo", + "Si": "si", + "Song": "ss", + "Sou": "sb", + "Su": "su", + "Suan": "sr", + "Sui": "sv", + "Sun": "sp", + "Suo": "so", + "Ta": "ta", + "Tai": "tl", + "Tan": "tj", + "Tang": "th", + "Tao": "tk", + "Te": "te", + "Tei": "tz", + "Teng": "tg", + "Ti": "ti", + "Tian": "tm", + "Tiao": "tc", + "Tie": "tx", + "Ting": "t;", + "Tong": "ts", + "Tou": "tb", + "Tu": "tu", + "Tuan": "tr", + "Tui": "tv", + "Tun": "tp", + "Tuo": "to", + "Xi": "xi", + "Xia": "xw", + "Xian": "xm", + "Xiang": "xd", + "Xiao": "xc", + "Xie": "xx", + "Xin": "xn", + "Xing": "x;", + "Xiong": "xs", + "Xiu": "xq", + "Xu": "xu", + "Xuan": "xr", + "Xue": "xt", + "Xun": "xp", + "Za": "za", + "Zai": "zl", + "Zan": "zj", + "Zang": "zh", + "Zao": "zk", + "Ze": "ze", + "Zei": "zz", + "Zen": "zf", + "Zeng": "zg", + "Zha": "va", + "Zhai": "vl", + "Zhan": "vj", + "Zhang": "vh", + "Zhao": "vk", + "Zhe": "ve", + "Zhen": "vf", + "Zheng": "vg", + "Zhi": "vi", + "Zhong": "vs", + "Zhou": "vb", + "Zhu": "vu", + "Zhua": "vw", + "Zhuai": "vy", + "Zhuan": "vr", + "Zhuang": "vd", + "Zhui": "vv", + "Zhun": "vp", + "Zhuo": "vo", + "Zi": "zi", + "Zong": "zs", + "Zou": "zb", + "Zu": "zu", + "Zuan": "zr", + "Zui": "zv", + "Zun": "zp", + "Zuo": "zo" + }, + "ZhiNengABC": { + "Lv": "lv", + "Lve": "lm", + "Lue": "lm", + "Nv": "nv", + "Nve": "nm", + "Nue": "nm", + "A": "oa", + "O": "oo", + "E": "oe", + "Ai": "ol", + "Ei": "oq", + "Ao": "ok", + "Ou": "ob", + "An": "oj", + "En": "of", + "Ang": "oh", + "Eng": "og", + "Er": "or", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yk", + "You": "yb", + "Yan": "yj", + "Yin": "yc", + "Yang": "yh", + "Ying": "yy", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wl", + "Wei": "wq", + "Wan": "wj", + "Wen": "wf", + "Wang": "wh", + "Weng": "wg", + "Yu": "yu", + "Yue": "ym", + "Yuan": "yp", + "Yun": "yn", + "Yong": "ys", + "Ba": "ba", + "Bai": "bl", + "Ban": "bj", + "Bang": "bh", + "Bao": "bk", + "Bei": "bq", + "Ben": "bf", + "Beng": "bg", + "Bi": "bi", + "Bian": "bw", + "Biang": "bt", + "Biao": "bz", + "Bie": "bx", + "Bin": "bc", + "Bing": "by", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cl", + "Can": "cj", + "Cang": "ch", + "Cao": "ck", + "Ce": "ce", + "Cen": "cf", + "Ceng": "cg", + "Cha": "ea", + "Chai": "el", + "Chan": "ej", + "Chang": "eh", + "Chao": "ek", + "Che": "ee", + "Chen": "ef", + "Cheng": "eg", + "Chi": "ei", + "Chong": "es", + "Chou": "eb", + "Chu": "eu", + "Chua": "ed", + "Chuai": "ec", + "Chuan": "ep", + "Chuang": "et", + "Chui": "em", + "Chun": "en", + "Chuo": "eo", + "Ci": "ci", + "Cong": "cs", + "Cou": "cb", + "Cu": "cu", + "Cuan": "cp", + "Cui": "cm", + "Cun": "cn", + "Cuo": "co", + "Da": "da", + "Dai": "dl", + "Dan": "dj", + "Dang": "dh", + "Dao": "dk", + "De": "de", + "Dei": "dq", + "Den": "df", + "Deng": "dg", + "Di": "di", + "Dia": "dd", + "Dian": "dw", + "Diao": "dz", + "Die": "dx", + "Ding": "dy", + "Diu": "dr", + "Dong": "ds", + "Dou": "db", + "Du": "du", + "Duan": "dp", + "Dui": "dm", + "Dun": "dn", + "Duo": "do", + "Fa": "fa", + "Fan": "fj", + "Fang": "fh", + "Fei": "fq", + "Fen": "ff", + "Feng": "fg", + "Fiao": "fz", + "Fo": "fo", + "Fou": "fb", + "Fu": "fu", + "Ga": "ga", + "Gai": "gl", + "Gan": "gj", + "Gang": "gh", + "Gao": "gk", + "Ge": "ge", + "Gei": "gq", + "Gen": "gf", + "Geng": "gg", + "Gong": "gs", + "Gou": "gb", + "Gu": "gu", + "Gua": "gd", + "Guai": "gc", + "Guan": "gp", + "Guang": "gt", + "Gui": "gm", + "Gun": "gn", + "Guo": "go", + "Ha": "ha", + "Hai": "hl", + "Han": "hj", + "Hang": "hh", + "Hao": "hk", + "He": "he", + "Hei": "hq", + "Hen": "hf", + "Heng": "hg", + "Hong": "hs", + "Hou": "hb", + "Hu": "hu", + "Hua": "hd", + "Huai": "hc", + "Huan": "hp", + "Huang": "ht", + "Hui": "hm", + "Hun": "hn", + "Huo": "ho", + "Ji": "ji", + "Jia": "jd", + "Jian": "jw", + "Jiang": "jt", + "Jiao": "jz", + "Jie": "jx", + "Jin": "jc", + "Jing": "jy", + "Jiong": "js", + "Jiu": "jr", + "Ju": "ju", + "Juan": "jp", + "Jue": "jm", + "Jun": "jn", + "Ka": "ka", + "Kai": "kl", + "Kan": "kj", + "Kang": "kh", + "Kao": "kk", + "Ke": "ke", + "Ken": "kf", + "Keng": "kg", + "Kong": "ks", + "Kou": "kb", + "Ku": "ku", + "Kua": "kd", + "Kuai": "kc", + "Kuan": "kp", + "Kuang": "kt", + "Kui": "km", + "Kun": "kn", + "Kuo": "ko", + "La": "la", + "Lai": "ll", + "Lan": "lj", + "Lang": "lh", + "Lao": "lk", + "Le": "le", + "Lei": "lq", + "Leng": "lg", + "Li": "li", + "Lia": "ld", + "Lian": "lw", + "Liang": "lt", + "Liao": "lz", + "Lie": "lx", + "Lin": "lc", + "Ling": "ly", + "Liu": "lr", + "Lo": "lo", + "Long": "ls", + "Lou": "lb", + "Lu": "lu", + "Luan": "lp", + "Lun": "ln", + "Luo": "lo", + "Ma": "ma", + "Mai": "ml", + "Man": "mj", + "Mang": "mh", + "Mao": "mk", + "Me": "me", + "Mei": "mq", + "Men": "mf", + "Meng": "mg", + "Mi": "mi", + "Mian": "mw", + "Miao": "mz", + "Mie": "mx", + "Min": "mc", + "Ming": "my", + "Miu": "mr", + "Mo": "mo", + "Mou": "mb", + "Mu": "mu", + "Na": "na", + "Nai": "nl", + "Nan": "nj", + "Nang": "nh", + "Nao": "nk", + "Ne": "ne", + "Nei": "nq", + "Nen": "nf", + "Neng": "ng", + "Ni": "ni", + "Nian": "nw", + "Niang": "nt", + "Niao": "nz", + "Nie": "nx", + "Nin": "nc", + "Ning": "ny", + "Niu": "nr", + "Nong": "ns", + "Nou": "nb", + "Nu": "nu", + "Nuan": "np", + "Nun": "nn", + "Nuo": "no", + "Pa": "pa", + "Pai": "pl", + "Pan": "pj", + "Pang": "ph", + "Pao": "pk", + "Pei": "pq", + "Pen": "pf", + "Peng": "pg", + "Pi": "pi", + "Pian": "pw", + "Piao": "pz", + "Pie": "px", + "Pin": "pc", + "Ping": "py", + "Po": "po", + "Pou": "pb", + "Pu": "pu", + "Qi": "qi", + "Qia": "qd", + "Qian": "qw", + "Qiang": "qt", + "Qiao": "qz", + "Qie": "qx", + "Qin": "qc", + "Qing": "qy", + "Qiong": "qs", + "Qiu": "qr", + "Qu": "qu", + "Quan": "qp", + "Que": "qm", + "Qun": "qn", + "Ran": "rj", + "Rang": "rh", + "Rao": "rk", + "Re": "re", + "Ren": "rf", + "Reng": "rg", + "Ri": "ri", + "Rong": "rs", + "Rou": "rb", + "Ru": "ru", + "Rua": "rd", + "Ruan": "rp", + "Rui": "rm", + "Run": "rn", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sl", + "San": "sj", + "Sang": "sh", + "Sao": "sk", + "Se": "se", + "Sen": "sf", + "Seng": "sg", + "Sha": "va", + "Shai": "vl", + "Shan": "vj", + "Shang": "vh", + "Shao": "vk", + "She": "ve", + "Shei": "vq", + "Shen": "vf", + "Sheng": "vg", + "Shi": "vi", + "Shou": "vb", + "Shu": "vu", + "Shua": "vd", + "Shuai": "vc", + "Shuan": "vp", + "Shuang": "vt", + "Shui": "vm", + "Shun": "vn", + "Shuo": "vo", + "Si": "si", + "Song": "ss", + "Sou": "sb", + "Su": "su", + "Suan": "sp", + "Sui": "sm", + "Sun": "sn", + "Suo": "so", + "Ta": "ta", + "Tai": "tl", + "Tan": "tj", + "Tang": "th", + "Tao": "tk", + "Te": "te", + "Tei": "tq", + "Teng": "tg", + "Ti": "ti", + "Tian": "tw", + "Tiao": "tz", + "Tie": "tx", + "Ting": "ty", + "Tong": "ts", + "Tou": "tb", + "Tu": "tu", + "Tuan": "tp", + "Tui": "tm", + "Tun": "tn", + "Tuo": "to", + "Xi": "xi", + "Xia": "xd", + "Xian": "xw", + "Xiang": "xt", + "Xiao": "xz", + "Xie": "xx", + "Xin": "xc", + "Xing": "xy", + "Xiong": "xs", + "Xiu": "xr", + "Xu": "xu", + "Xuan": "xp", + "Xue": "xm", + "Xun": "xn", + "Za": "za", + "Zai": "zl", + "Zan": "zj", + "Zang": "zh", + "Zao": "zk", + "Ze": "ze", + "Zei": "zq", + "Zen": "zf", + "Zeng": "zg", + "Zha": "aa", + "Zhai": "al", + "Zhan": "aj", + "Zhang": "ah", + "Zhao": "ak", + "Zhe": "ae", + "Zhen": "af", + "Zheng": "ag", + "Zhi": "ai", + "Zhong": "as", + "Zhou": "ab", + "Zhu": "au", + "Zhua": "ad", + "Zhuai": "ac", + "Zhuan": "ap", + "Zhuang": "at", + "Zhui": "am", + "Zhun": "an", + "Zhuo": "ao", + "Zi": "zi", + "Zong": "zs", + "Zou": "zb", + "Zu": "zu", + "Zuan": "zp", + "Zui": "zm", + "Zun": "zn", + "Zuo": "zo" + }, + "ZiGuangPinYin": { + "Lv": "lv", + "Lve": "ln", + "Lue": "ln", + "Nv": "nv", + "Nve": "nn", + "Nue": "nn", + "A": "oa", + "O": "oo", + "E": "oe", + "Ai": "op", + "Ei": "ok", + "Ao": "oq", + "Ou": "oz", + "An": "or", + "En": "ow", + "Ang": "os", + "Eng": "ot", + "Er": "oj", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yq", + "You": "yz", + "Yan": "yr", + "Yin": "yy", + "Yang": "ys", + "Ying": "yc", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wp", + "Wei": "wk", + "Wan": "wr", + "Wen": "ww", + "Wang": "ws", + "Weng": "wt", + "Yu": "yu", + "Yue": "yn", + "Yuan": "yl", + "Yun": "ym", + "Yong": "yh", + "Ba": "ba", + "Bai": "bp", + "Ban": "br", + "Bang": "bs", + "Bao": "bq", + "Bei": "bk", + "Ben": "bw", + "Beng": "bt", + "Bi": "bi", + "Bian": "bf", + "Biang": "bg", + "Biao": "bb", + "Bie": "bd", + "Bin": "by", + "Bing": "bc", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cp", + "Can": "cr", + "Cang": "cs", + "Cao": "cq", + "Ce": "ce", + "Cen": "cw", + "Ceng": "ct", + "Cha": "aa", + "Chai": "ap", + "Chan": "ar", + "Chang": "as", + "Chao": "aq", + "Che": "ae", + "Chen": "aw", + "Cheng": "at", + "Chi": "ai", + "Chong": "ah", + "Chou": "az", + "Chu": "au", + "Chua": "ax", + "Chuai": "ay", + "Chuan": "al", + "Chuang": "ag", + "Chui": "an", + "Chun": "am", + "Chuo": "ao", + "Ci": "ci", + "Cong": "ch", + "Cou": "cz", + "Cu": "cu", + "Cuan": "cl", + "Cui": "cn", + "Cun": "cm", + "Cuo": "co", + "Da": "da", + "Dai": "dp", + "Dan": "dr", + "Dang": "ds", + "Dao": "dq", + "De": "de", + "Dei": "dk", + "Den": "dw", + "Deng": "dt", + "Di": "di", + "Dia": "dx", + "Dian": "df", + "Diao": "db", + "Die": "dd", + "Ding": "dc", + "Diu": "dj", + "Dong": "dh", + "Dou": "dz", + "Du": "du", + "Duan": "dl", + "Dui": "dn", + "Dun": "dm", + "Duo": "do", + "Fa": "fa", + "Fan": "fr", + "Fang": "fs", + "Fei": "fk", + "Fen": "fw", + "Feng": "ft", + "Fiao": "fb", + "Fo": "fo", + "Fou": "fz", + "Fu": "fu", + "Ga": "ga", + "Gai": "gp", + "Gan": "gr", + "Gang": "gs", + "Gao": "gq", + "Ge": "ge", + "Gei": "gk", + "Gen": "gw", + "Geng": "gt", + "Gong": "gh", + "Gou": "gz", + "Gu": "gu", + "Gua": "gx", + "Guai": "gy", + "Guan": "gl", + "Guang": "gg", + "Gui": "gn", + "Gun": "gm", + "Guo": "go", + "Ha": "ha", + "Hai": "hp", + "Han": "hr", + "Hang": "hs", + "Hao": "hq", + "He": "he", + "Hei": "hk", + "Hen": "hw", + "Heng": "ht", + "Hong": "hh", + "Hou": "hz", + "Hu": "hu", + "Hua": "hx", + "Huai": "hy", + "Huan": "hl", + "Huang": "hg", + "Hui": "hn", + "Hun": "hm", + "Huo": "ho", + "Ji": "ji", + "Jia": "jx", + "Jian": "jf", + "Jiang": "jg", + "Jiao": "jb", + "Jie": "jd", + "Jin": "jy", + "Jing": "jc", + "Jiong": "jh", + "Jiu": "jj", + "Ju": "ju", + "Juan": "jl", + "Jue": "jn", + "Jun": "jm", + "Ka": "ka", + "Kai": "kp", + "Kan": "kr", + "Kang": "ks", + "Kao": "kq", + "Ke": "ke", + "Ken": "kw", + "Keng": "kt", + "Kong": "kh", + "Kou": "kz", + "Ku": "ku", + "Kua": "kx", + "Kuai": "ky", + "Kuan": "kl", + "Kuang": "kg", + "Kui": "kn", + "Kun": "km", + "Kuo": "ko", + "La": "la", + "Lai": "lp", + "Lan": "lr", + "Lang": "ls", + "Lao": "lq", + "Le": "le", + "Lei": "lk", + "Leng": "lt", + "Li": "li", + "Lia": "lx", + "Lian": "lf", + "Liang": "lg", + "Liao": "lb", + "Lie": "ld", + "Lin": "ly", + "Ling": "lc", + "Liu": "lj", + "Lo": "lo", + "Long": "lh", + "Lou": "lz", + "Lu": "lu", + "Luan": "ll", + "Lun": "lm", + "Luo": "lo", + "Ma": "ma", + "Mai": "mp", + "Man": "mr", + "Mang": "ms", + "Mao": "mq", + "Me": "me", + "Mei": "mk", + "Men": "mw", + "Meng": "mt", + "Mi": "mi", + "Mian": "mf", + "Miao": "mb", + "Mie": "md", + "Min": "my", + "Ming": "mc", + "Miu": "mj", + "Mo": "mo", + "Mou": "mz", + "Mu": "mu", + "Na": "na", + "Nai": "np", + "Nan": "nr", + "Nang": "ns", + "Nao": "nq", + "Ne": "ne", + "Nei": "nk", + "Nen": "nw", + "Neng": "nt", + "Ni": "ni", + "Nian": "nf", + "Niang": "ng", + "Niao": "nb", + "Nie": "nd", + "Nin": "ny", + "Ning": "nc", + "Niu": "nj", + "Nong": "nh", + "Nou": "nz", + "Nu": "nu", + "Nuan": "nl", + "Nun": "nm", + "Nuo": "no", + "Pa": "pa", + "Pai": "pp", + "Pan": "pr", + "Pang": "ps", + "Pao": "pq", + "Pei": "pk", + "Pen": "pw", + "Peng": "pt", + "Pi": "pi", + "Pian": "pf", + "Piao": "pb", + "Pie": "pd", + "Pin": "py", + "Ping": "pc", + "Po": "po", + "Pou": "pz", + "Pu": "pu", + "Qi": "qi", + "Qia": "qx", + "Qian": "qf", + "Qiang": "qg", + "Qiao": "qb", + "Qie": "qd", + "Qin": "qy", + "Qing": "qc", + "Qiong": "qh", + "Qiu": "qj", + "Qu": "qu", + "Quan": "ql", + "Que": "qn", + "Qun": "qm", + "Ran": "rr", + "Rang": "rs", + "Rao": "rq", + "Re": "re", + "Ren": "rw", + "Reng": "rt", + "Ri": "ri", + "Rong": "rh", + "Rou": "rz", + "Ru": "ru", + "Rua": "rx", + "Ruan": "rl", + "Rui": "rn", + "Run": "rm", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sp", + "San": "sr", + "Sang": "ss", + "Sao": "sq", + "Se": "se", + "Sen": "sw", + "Seng": "st", + "Sha": "ia", + "Shai": "ip", + "Shan": "ir", + "Shang": "is", + "Shao": "iq", + "She": "ie", + "Shei": "ik", + "Shen": "iw", + "Sheng": "it", + "Shi": "ii", + "Shou": "iz", + "Shu": "iu", + "Shua": "ix", + "Shuai": "iy", + "Shuan": "il", + "Shuang": "ig", + "Shui": "in", + "Shun": "im", + "Shuo": "io", + "Si": "si", + "Song": "sh", + "Sou": "sz", + "Su": "su", + "Suan": "sl", + "Sui": "sn", + "Sun": "sm", + "Suo": "so", + "Ta": "ta", + "Tai": "tp", + "Tan": "tr", + "Tang": "ts", + "Tao": "tq", + "Te": "te", + "Tei": "tk", + "Teng": "tt", + "Ti": "ti", + "Tian": "tf", + "Tiao": "tb", + "Tie": "td", + "Ting": "tc", + "Tong": "th", + "Tou": "tz", + "Tu": "tu", + "Tuan": "tl", + "Tui": "tn", + "Tun": "tm", + "Tuo": "to", + "Xi": "xi", + "Xia": "xx", + "Xian": "xf", + "Xiang": "xg", + "Xiao": "xb", + "Xie": "xd", + "Xin": "xy", + "Xing": "xc", + "Xiong": "xh", + "Xiu": "xj", + "Xu": "xu", + "Xuan": "xl", + "Xue": "xn", + "Xun": "xm", + "Za": "za", + "Zai": "zp", + "Zan": "zr", + "Zang": "zs", + "Zao": "zq", + "Ze": "ze", + "Zei": "zk", + "Zen": "zw", + "Zeng": "zt", + "Zha": "ua", + "Zhai": "up", + "Zhan": "ur", + "Zhang": "us", + "Zhao": "uq", + "Zhe": "ue", + "Zhen": "uw", + "Zheng": "ut", + "Zhi": "ui", + "Zhong": "uh", + "Zhou": "uz", + "Zhu": "uu", + "Zhua": "ux", + "Zhuai": "uy", + "Zhuan": "ul", + "Zhuang": "ug", + "Zhui": "un", + "Zhun": "um", + "Zhuo": "uo", + "Zi": "zi", + "Zong": "zh", + "Zou": "zz", + "Zu": "zu", + "Zuan": "zl", + "Zui": "zn", + "Zun": "zm", + "Zuo": "zo" + }, + "PinYinJiaJia": { + "Lv": "lv", + "Lve": "lx", + "Lue": "lx", + "Nv": "nv", + "Nve": "nx", + "Nue": "nx", + "A": "aa", + "O": "oo", + "E": "ee", + "Ai": "as", + "Ei": "ew", + "Ao": "ad", + "Ou": "op", + "An": "af", + "En": "er", + "Ang": "ag", + "Eng": "et", + "Er": "eq", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "yd", + "You": "yp", + "Yan": "yf", + "Yin": "yl", + "Yang": "yg", + "Ying": "yq", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "ws", + "Wei": "ww", + "Wan": "wf", + "Wen": "wr", + "Wang": "wg", + "Weng": "wt", + "Yu": "yu", + "Yue": "yx", + "Yuan": "yc", + "Yun": "yz", + "Yong": "yy", + "Ba": "ba", + "Bai": "bs", + "Ban": "bf", + "Bang": "bg", + "Bao": "bd", + "Bei": "bw", + "Ben": "br", + "Beng": "bt", + "Bi": "bi", + "Bian": "bj", + "Biang": "bh", + "Biao": "bk", + "Bie": "bm", + "Bin": "bl", + "Bing": "bq", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cs", + "Can": "cf", + "Cang": "cg", + "Cao": "cd", + "Ce": "ce", + "Cen": "cr", + "Ceng": "ct", + "Cha": "ua", + "Chai": "us", + "Chan": "uf", + "Chang": "ug", + "Chao": "ud", + "Che": "ue", + "Chen": "ur", + "Cheng": "ut", + "Chi": "ui", + "Chong": "uy", + "Chou": "up", + "Chu": "uu", + "Chua": "ub", + "Chuai": "ux", + "Chuan": "uc", + "Chuang": "uh", + "Chui": "uv", + "Chun": "uz", + "Chuo": "uo", + "Ci": "ci", + "Cong": "cy", + "Cou": "cp", + "Cu": "cu", + "Cuan": "cc", + "Cui": "cv", + "Cun": "cz", + "Cuo": "co", + "Da": "da", + "Dai": "ds", + "Dan": "df", + "Dang": "dg", + "Dao": "dd", + "De": "de", + "Dei": "dw", + "Den": "dr", + "Deng": "dt", + "Di": "di", + "Dia": "db", + "Dian": "dj", + "Diao": "dk", + "Die": "dm", + "Ding": "dq", + "Diu": "dn", + "Dong": "dy", + "Dou": "dp", + "Du": "du", + "Duan": "dc", + "Dui": "dv", + "Dun": "dz", + "Duo": "do", + "Fa": "fa", + "Fan": "ff", + "Fang": "fg", + "Fei": "fw", + "Fen": "fr", + "Feng": "ft", + "Fiao": "fk", + "Fo": "fo", + "Fou": "fp", + "Fu": "fu", + "Ga": "ga", + "Gai": "gs", + "Gan": "gf", + "Gang": "gg", + "Gao": "gd", + "Ge": "ge", + "Gei": "gw", + "Gen": "gr", + "Geng": "gt", + "Gong": "gy", + "Gou": "gp", + "Gu": "gu", + "Gua": "gb", + "Guai": "gx", + "Guan": "gc", + "Guang": "gh", + "Gui": "gv", + "Gun": "gz", + "Guo": "go", + "Ha": "ha", + "Hai": "hs", + "Han": "hf", + "Hang": "hg", + "Hao": "hd", + "He": "he", + "Hei": "hw", + "Hen": "hr", + "Heng": "ht", + "Hong": "hy", + "Hou": "hp", + "Hu": "hu", + "Hua": "hb", + "Huai": "hx", + "Huan": "hc", + "Huang": "hh", + "Hui": "hv", + "Hun": "hz", + "Huo": "ho", + "Ji": "ji", + "Jia": "jb", + "Jian": "jj", + "Jiang": "jh", + "Jiao": "jk", + "Jie": "jm", + "Jin": "jl", + "Jing": "jq", + "Jiong": "jy", + "Jiu": "jn", + "Ju": "ju", + "Juan": "jc", + "Jue": "jx", + "Jun": "jz", + "Ka": "ka", + "Kai": "ks", + "Kan": "kf", + "Kang": "kg", + "Kao": "kd", + "Ke": "ke", + "Ken": "kr", + "Keng": "kt", + "Kong": "ky", + "Kou": "kp", + "Ku": "ku", + "Kua": "kb", + "Kuai": "kx", + "Kuan": "kc", + "Kuang": "kh", + "Kui": "kv", + "Kun": "kz", + "Kuo": "ko", + "La": "la", + "Lai": "ls", + "Lan": "lf", + "Lang": "lg", + "Lao": "ld", + "Le": "le", + "Lei": "lw", + "Leng": "lt", + "Li": "li", + "Lia": "lb", + "Lian": "lj", + "Liang": "lh", + "Liao": "lk", + "Lie": "lm", + "Lin": "ll", + "Ling": "lq", + "Liu": "ln", + "Lo": "lo", + "Long": "ly", + "Lou": "lp", + "Lu": "lu", + "Luan": "lc", + "Lun": "lz", + "Luo": "lo", + "Ma": "ma", + "Mai": "ms", + "Man": "mf", + "Mang": "mg", + "Mao": "md", + "Me": "me", + "Mei": "mw", + "Men": "mr", + "Meng": "mt", + "Mi": "mi", + "Mian": "mj", + "Miao": "mk", + "Mie": "mm", + "Min": "ml", + "Ming": "mq", + "Miu": "mn", + "Mo": "mo", + "Mou": "mp", + "Mu": "mu", + "Na": "na", + "Nai": "ns", + "Nan": "nf", + "Nang": "ng", + "Nao": "nd", + "Ne": "ne", + "Nei": "nw", + "Nen": "nr", + "Neng": "nt", + "Ni": "ni", + "Nian": "nj", + "Niang": "nh", + "Niao": "nk", + "Nie": "nm", + "Nin": "nl", + "Ning": "nq", + "Niu": "nn", + "Nong": "ny", + "Nou": "np", + "Nu": "nu", + "Nuan": "nc", + "Nun": "nz", + "Nuo": "no", + "Pa": "pa", + "Pai": "ps", + "Pan": "pf", + "Pang": "pg", + "Pao": "pd", + "Pei": "pw", + "Pen": "pr", + "Peng": "pt", + "Pi": "pi", + "Pian": "pj", + "Piao": "pk", + "Pie": "pm", + "Pin": "pl", + "Ping": "pq", + "Po": "po", + "Pou": "pp", + "Pu": "pu", + "Qi": "qi", + "Qia": "qb", + "Qian": "qj", + "Qiang": "qh", + "Qiao": "qk", + "Qie": "qm", + "Qin": "ql", + "Qing": "qq", + "Qiong": "qy", + "Qiu": "qn", + "Qu": "qu", + "Quan": "qc", + "Que": "qx", + "Qun": "qz", + "Ran": "rf", + "Rang": "rg", + "Rao": "rd", + "Re": "re", + "Ren": "rr", + "Reng": "rt", + "Ri": "ri", + "Rong": "ry", + "Rou": "rp", + "Ru": "ru", + "Rua": "rb", + "Ruan": "rc", + "Rui": "rv", + "Run": "rz", + "Ruo": "ro", + "Sa": "sa", + "Sai": "ss", + "San": "sf", + "Sang": "sg", + "Sao": "sd", + "Se": "se", + "Sen": "sr", + "Seng": "st", + "Sha": "ia", + "Shai": "is", + "Shan": "if", + "Shang": "ig", + "Shao": "id", + "She": "ie", + "Shei": "iw", + "Shen": "ir", + "Sheng": "it", + "Shi": "ii", + "Shou": "ip", + "Shu": "iu", + "Shua": "ib", + "Shuai": "ix", + "Shuan": "ic", + "Shuang": "ih", + "Shui": "iv", + "Shun": "iz", + "Shuo": "io", + "Si": "si", + "Song": "sy", + "Sou": "sp", + "Su": "su", + "Suan": "sc", + "Sui": "sv", + "Sun": "sz", + "Suo": "so", + "Ta": "ta", + "Tai": "ts", + "Tan": "tf", + "Tang": "tg", + "Tao": "td", + "Te": "te", + "Tei": "tw", + "Teng": "tt", + "Ti": "ti", + "Tian": "tj", + "Tiao": "tk", + "Tie": "tm", + "Ting": "tq", + "Tong": "ty", + "Tou": "tp", + "Tu": "tu", + "Tuan": "tc", + "Tui": "tv", + "Tun": "tz", + "Tuo": "to", + "Xi": "xi", + "Xia": "xb", + "Xian": "xj", + "Xiang": "xh", + "Xiao": "xk", + "Xie": "xm", + "Xin": "xl", + "Xing": "xq", + "Xiong": "xy", + "Xiu": "xn", + "Xu": "xu", + "Xuan": "xc", + "Xue": "xx", + "Xun": "xz", + "Za": "za", + "Zai": "zs", + "Zan": "zf", + "Zang": "zg", + "Zao": "zd", + "Ze": "ze", + "Zei": "zw", + "Zen": "zr", + "Zeng": "zt", + "Zha": "va", + "Zhai": "vs", + "Zhan": "vf", + "Zhang": "vg", + "Zhao": "vd", + "Zhe": "ve", + "Zhen": "vr", + "Zheng": "vt", + "Zhi": "vi", + "Zhong": "vy", + "Zhou": "vp", + "Zhu": "vu", + "Zhua": "vb", + "Zhuai": "vx", + "Zhuan": "vc", + "Zhuang": "vh", + "Zhui": "vv", + "Zhun": "vz", + "Zhuo": "vo", + "Zi": "zi", + "Zong": "zy", + "Zou": "zp", + "Zu": "zu", + "Zuan": "zc", + "Zui": "zv", + "Zun": "zz", + "Zuo": "zo" + }, + "XingKongJianDao": { + "Lv": "lv", + "Lve": "ly", + "Lue": "ly", + "Nv": "nv", + "Nve": "ny", + "Nue": "ny", + "A": "xa", + "O": "xo", + "E": "xe", + "Ai": "xj", + "Ei": "xw", + "Ao": "xs", + "Ou": "xt", + "An": "xd", + "En": "xk", + "Ang": "xf", + "Eng": "xh", + "Er": "xu", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "ys", + "You": "yt", + "Yan": "yd", + "Yin": "yb", + "Yang": "yf", + "Ying": "yg", + "Wu": "wj", + "Wa": "ws", + "Wo": "wo", + "Wai": "wh", + "Wei": "ww", + "Wan": "wf", + "Wen": "wn", + "Wang": "wp", + "Weng": "wr", + "Yu": "yv", + "Yue": "yy", + "Yuan": "yr", + "Yun": "yw", + "Yong": "yl", + "Ba": "ba", + "Bai": "bj", + "Ban": "bd", + "Bang": "bf", + "Bao": "bs", + "Bei": "bw", + "Ben": "bk", + "Beng": "bh", + "Bi": "bi", + "Bian": "bm", + "Biang": "bx", + "Biao": "bp", + "Bie": "bc", + "Bin": "bb", + "Bing": "bg", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "cj", + "Can": "cd", + "Cang": "cf", + "Cao": "cs", + "Ce": "ce", + "Cen": "ck", + "Ceng": "ch", + "Cha": "ja", + "Chai": "jj", + "Chan": "jd", + "Chang": "jf", + "Chao": "js", + "Che": "je", + "Chen": "jk", + "Cheng": "jh", + "Chi": "wi", + "Chong": "wl", + "Chou": "jt", + "Chu": "ju", + "Chua": "wx", + "Chuai": "wg", + "Chuan": "wr", + "Chuang": "wn", + "Chui": "wy", + "Chun": "jz", + "Chuo": "jo", + "Ci": "ci", + "Cong": "cl", + "Cou": "ct", + "Cu": "cu", + "Cuan": "cr", + "Cui": "cy", + "Cun": "cz", + "Cuo": "co", + "Da": "da", + "Dai": "dj", + "Dan": "dd", + "Dang": "df", + "Dao": "ds", + "De": "de", + "Dei": "dw", + "Den": "dk", + "Deng": "dh", + "Di": "di", + "Dia": "dx", + "Dian": "dm", + "Diao": "dp", + "Die": "dc", + "Ding": "dg", + "Diu": "dq", + "Dong": "dl", + "Dou": "dt", + "Du": "du", + "Duan": "dr", + "Dui": "dy", + "Dun": "dz", + "Duo": "do", + "Fa": "fs", + "Fan": "ff", + "Fang": "fp", + "Fei": "fw", + "Fen": "fn", + "Feng": "fr", + "Fiao": "fp", + "Fo": "fl", + "Fou": "fd", + "Fu": "fl", + "Ga": "ga", + "Gai": "gj", + "Gan": "gd", + "Gang": "gf", + "Gao": "gs", + "Ge": "ge", + "Gei": "gw", + "Gen": "gk", + "Geng": "gh", + "Gong": "gl", + "Gou": "gt", + "Gu": "gu", + "Gua": "gx", + "Guai": "gg", + "Guan": "gr", + "Guang": "gn", + "Gui": "gy", + "Gun": "gz", + "Guo": "go", + "Ha": "ha", + "Hai": "hj", + "Han": "hd", + "Hang": "hf", + "Hao": "hs", + "He": "he", + "Hei": "hw", + "Hen": "hk", + "Heng": "hh", + "Hong": "hl", + "Hou": "ht", + "Hu": "hu", + "Hua": "hx", + "Huai": "hg", + "Huan": "hr", + "Huang": "hn", + "Hui": "hy", + "Hun": "hz", + "Huo": "ho", + "Ji": "jk", + "Jia": "js", + "Jian": "jm", + "Jiang": "jn", + "Jiao": "jp", + "Jie": "jc", + "Jin": "jb", + "Jing": "jg", + "Jiong": "jy", + "Jiu": "jq", + "Ju": "jv", + "Juan": "jt", + "Jue": "jh", + "Jun": "jw", + "Ka": "ka", + "Kai": "kj", + "Kan": "kd", + "Kang": "kf", + "Kao": "ks", + "Ke": "ke", + "Ken": "kk", + "Keng": "kh", + "Kong": "kl", + "Kou": "kt", + "Ku": "ku", + "Kua": "kx", + "Kuai": "kg", + "Kuan": "kr", + "Kuang": "kn", + "Kui": "ky", + "Kun": "kz", + "Kuo": "ko", + "La": "la", + "Lai": "lj", + "Lan": "ld", + "Lang": "lf", + "Lao": "ls", + "Le": "le", + "Lei": "lw", + "Leng": "lh", + "Li": "li", + "Lia": "lx", + "Lian": "lm", + "Liang": "ln", + "Liao": "lp", + "Lie": "lc", + "Lin": "lb", + "Ling": "lg", + "Liu": "lq", + "Lo": "ll", + "Long": "ll", + "Lou": "lt", + "Lu": "lu", + "Luan": "lr", + "Lun": "lz", + "Luo": "lo", + "Ma": "ma", + "Mai": "mj", + "Man": "md", + "Mang": "mf", + "Mao": "ms", + "Me": "me", + "Mei": "mw", + "Men": "mk", + "Meng": "mh", + "Mi": "mi", + "Mian": "mm", + "Miao": "mp", + "Mie": "mc", + "Min": "mb", + "Ming": "mg", + "Miu": "mq", + "Mo": "mo", + "Mou": "mt", + "Mu": "mu", + "Na": "na", + "Nai": "nj", + "Nan": "nd", + "Nang": "nf", + "Nao": "ns", + "Ne": "ne", + "Nei": "nw", + "Nen": "nk", + "Neng": "nh", + "Ni": "ni", + "Nian": "nm", + "Niang": "nn", + "Niao": "np", + "Nie": "nc", + "Nin": "nb", + "Ning": "ng", + "Niu": "nq", + "Nong": "nl", + "Nou": "nt", + "Nu": "nu", + "Nuan": "nr", + "Nun": "nz", + "Nuo": "no", + "Pa": "pa", + "Pai": "pj", + "Pan": "pd", + "Pang": "pf", + "Pao": "ps", + "Pei": "pw", + "Pen": "pk", + "Peng": "ph", + "Pi": "pi", + "Pian": "pm", + "Piao": "pp", + "Pie": "pc", + "Pin": "pb", + "Ping": "pg", + "Po": "po", + "Pou": "pt", + "Pu": "pu", + "Qi": "qk", + "Qia": "qs", + "Qian": "qm", + "Qiang": "qx", + "Qiao": "qp", + "Qie": "qc", + "Qin": "qb", + "Qing": "qg", + "Qiong": "qy", + "Qiu": "qq", + "Qu": "qv", + "Quan": "qt", + "Que": "qh", + "Qun": "qw", + "Ran": "rd", + "Rang": "rf", + "Rao": "rs", + "Re": "re", + "Ren": "rk", + "Reng": "rh", + "Ri": "ri", + "Rong": "rl", + "Rou": "rt", + "Ru": "ru", + "Rua": "rx", + "Ruan": "rr", + "Rui": "ry", + "Run": "rz", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sj", + "San": "sd", + "Sang": "sf", + "Sao": "ss", + "Se": "se", + "Sen": "sk", + "Seng": "sh", + "Sha": "ea", + "Shai": "ej", + "Shan": "ed", + "Shang": "ef", + "Shao": "es", + "She": "ee", + "Shei": "ew", + "Shen": "ek", + "Sheng": "eh", + "Shi": "ei", + "Shou": "et", + "Shu": "eu", + "Shua": "ex", + "Shuai": "eg", + "Shuan": "er", + "Shuang": "en", + "Shui": "ey", + "Shun": "ez", + "Shuo": "eo", + "Si": "si", + "Song": "sl", + "Sou": "st", + "Su": "su", + "Suan": "sr", + "Sui": "sy", + "Sun": "sz", + "Suo": "so", + "Ta": "ta", + "Tai": "tj", + "Tan": "td", + "Tang": "tf", + "Tao": "ts", + "Te": "te", + "Tei": "tw", + "Teng": "th", + "Ti": "ti", + "Tian": "tm", + "Tiao": "tp", + "Tie": "tc", + "Ting": "tg", + "Tong": "tl", + "Tou": "tt", + "Tu": "tu", + "Tuan": "tr", + "Tui": "ty", + "Tun": "tz", + "Tuo": "to", + "Xi": "xi", + "Xia": "xx", + "Xian": "xm", + "Xiang": "xn", + "Xiao": "xp", + "Xie": "xc", + "Xin": "xb", + "Xing": "xg", + "Xiong": "xl", + "Xiu": "xq", + "Xu": "xv", + "Xuan": "xr", + "Xue": "xy", + "Xun": "xw", + "Za": "za", + "Zai": "zj", + "Zan": "zd", + "Zang": "zf", + "Zao": "zs", + "Ze": "ze", + "Zei": "zw", + "Zen": "zk", + "Zeng": "zh", + "Zha": "qa", + "Zhai": "fj", + "Zhan": "qd", + "Zhang": "qf", + "Zhao": "fs", + "Zhe": "fe", + "Zhen": "qk", + "Zheng": "qh", + "Zhi": "fi", + "Zhong": "fy", + "Zhou": "qt", + "Zhu": "qu", + "Zhua": "fx", + "Zhuai": "fg", + "Zhuan": "fr", + "Zhuang": "fn", + "Zhui": "fy", + "Zhun": "fz", + "Zhuo": "qo", + "Zi": "zi", + "Zong": "zl", + "Zou": "zt", + "Zu": "zu", + "Zuan": "zr", + "Zui": "zy", + "Zun": "zz", + "Zuo": "zo" + }, + "DaNiu": { + "Lv": "lv", + "Lve": "lx", + "Lue": "lx", + "Nv": "nv", + "Nve": "nx", + "Nue": "nx", + "A": "ea", + "O": "eo", + "E": "ee", + "Ai": "eh", + "Ei": "ew", + "Ao": "es", + "Ou": "er", + "An": "ed", + "En": "ek", + "Ang": "ef", + "Eng": "ej", + "Er": "eu", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "ys", + "You": "yr", + "Yan": "yd", + "Yin": "yb", + "Yang": "yf", + "Ying": "yg", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wh", + "Wei": "ww", + "Wan": "wd", + "Wen": "wk", + "Wang": "wf", + "Weng": "wj", + "Yu": "yu", + "Yue": "yh", + "Yuan": "yj", + "Yun": "yw", + "Yong": "yl", + "Ba": "ba", + "Bai": "bh", + "Ban": "bd", + "Bang": "bf", + "Bao": "bs", + "Bei": "bw", + "Ben": "bk", + "Beng": "bj", + "Bi": "bi", + "Bian": "bc", + "Biang": "bn", + "Biao": "bm", + "Bie": "bp", + "Bin": "bb", + "Bing": "bg", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "ch", + "Can": "cd", + "Cang": "cf", + "Cao": "cs", + "Ce": "ce", + "Cen": "ck", + "Ceng": "cj", + "Cha": "ia", + "Chai": "ih", + "Chan": "id", + "Chang": "if", + "Chao": "is", + "Che": "ie", + "Chen": "ik", + "Cheng": "ij", + "Chi": "ii", + "Chong": "il", + "Chou": "ir", + "Chu": "iu", + "Chua": "iq", + "Chuai": "ig", + "Chuan": "iz", + "Chuang": "ix", + "Chui": "in", + "Chun": "iy", + "Chuo": "io", + "Ci": "ci", + "Cong": "cl", + "Cou": "cr", + "Cu": "cu", + "Cuan": "cz", + "Cui": "cn", + "Cun": "cy", + "Cuo": "co", + "Da": "da", + "Dai": "dh", + "Dan": "dd", + "Dang": "df", + "Dao": "ds", + "De": "de", + "Dei": "dw", + "Den": "dk", + "Deng": "dj", + "Di": "di", + "Dia": "dk", + "Dian": "dc", + "Diao": "dm", + "Die": "dp", + "Ding": "dg", + "Diu": "dt", + "Dong": "dl", + "Dou": "dr", + "Du": "du", + "Duan": "dz", + "Dui": "dn", + "Dun": "dy", + "Duo": "do", + "Fa": "fa", + "Fan": "fd", + "Fang": "ff", + "Fei": "fw", + "Fen": "fk", + "Feng": "fj", + "Fiao": "fm", + "Fo": "fo", + "Fou": "fr", + "Fu": "fu", + "Ga": "ga", + "Gai": "gh", + "Gan": "gd", + "Gang": "gf", + "Gao": "gs", + "Ge": "ge", + "Gei": "gw", + "Gen": "gk", + "Geng": "gj", + "Gong": "gl", + "Gou": "gr", + "Gu": "gu", + "Gua": "gq", + "Guai": "gg", + "Guan": "gz", + "Guang": "gx", + "Gui": "gn", + "Gun": "gy", + "Guo": "go", + "Ha": "ha", + "Hai": "hh", + "Han": "hd", + "Hang": "hf", + "Hao": "hs", + "He": "he", + "Hei": "hw", + "Hen": "hk", + "Heng": "hj", + "Hong": "hl", + "Hou": "hr", + "Hu": "hu", + "Hua": "hq", + "Huai": "hg", + "Huan": "hz", + "Huang": "hx", + "Hui": "hn", + "Hun": "hy", + "Huo": "ho", + "Ji": "ji", + "Jia": "jk", + "Jian": "jc", + "Jiang": "jn", + "Jiao": "jm", + "Jie": "jp", + "Jin": "jb", + "Jing": "jg", + "Jiong": "jl", + "Jiu": "jt", + "Ju": "ju", + "Juan": "jj", + "Jue": "jh", + "Jun": "jw", + "Ka": "ka", + "Kai": "kh", + "Kan": "kd", + "Kang": "kf", + "Kao": "ks", + "Ke": "ke", + "Ken": "kk", + "Keng": "kj", + "Kong": "kl", + "Kou": "kr", + "Ku": "ku", + "Kua": "kq", + "Kuai": "kg", + "Kuan": "kz", + "Kuang": "kx", + "Kui": "kn", + "Kun": "ky", + "Kuo": "ko", + "La": "la", + "Lai": "lh", + "Lan": "ld", + "Lang": "lf", + "Lao": "ls", + "Le": "le", + "Lei": "lw", + "Leng": "lj", + "Li": "li", + "Lia": "lk", + "Lian": "lc", + "Liang": "ln", + "Liao": "lm", + "Lie": "lp", + "Lin": "lb", + "Ling": "lg", + "Liu": "lt", + "Lo": "lo", + "Long": "ll", + "Lou": "lr", + "Lu": "lu", + "Luan": "lz", + "Lun": "ly", + "Luo": "lo", + "Ma": "ma", + "Mai": "mh", + "Man": "md", + "Mang": "mf", + "Mao": "ms", + "Me": "me", + "Mei": "mw", + "Men": "mk", + "Meng": "mj", + "Mi": "mi", + "Mian": "mc", + "Miao": "mm", + "Mie": "mp", + "Min": "mb", + "Ming": "mg", + "Miu": "mt", + "Mo": "mo", + "Mou": "mr", + "Mu": "mu", + "Na": "na", + "Nai": "nh", + "Nan": "nd", + "Nang": "nf", + "Nao": "ns", + "Ne": "ne", + "Nei": "nw", + "Nen": "nk", + "Neng": "nj", + "Ni": "ni", + "Nian": "nc", + "Niang": "nn", + "Niao": "nm", + "Nie": "np", + "Nin": "nb", + "Ning": "ng", + "Niu": "nt", + "Nong": "nl", + "Nou": "nr", + "Nu": "nu", + "Nuan": "nz", + "Nun": "ny", + "Nuo": "no", + "Pa": "pa", + "Pai": "ph", + "Pan": "pd", + "Pang": "pf", + "Pao": "ps", + "Pei": "pw", + "Pen": "pk", + "Peng": "pj", + "Pi": "pi", + "Pian": "pc", + "Piao": "pm", + "Pie": "pp", + "Pin": "pb", + "Ping": "pg", + "Po": "po", + "Pou": "pr", + "Pu": "pu", + "Qi": "qi", + "Qia": "qk", + "Qian": "qc", + "Qiang": "qn", + "Qiao": "qm", + "Qie": "qp", + "Qin": "qb", + "Qing": "qg", + "Qiong": "ql", + "Qiu": "qt", + "Qu": "qu", + "Quan": "qj", + "Que": "qh", + "Qun": "qw", + "Ran": "rd", + "Rang": "rf", + "Rao": "rs", + "Re": "re", + "Ren": "rk", + "Reng": "rj", + "Ri": "ri", + "Rong": "rl", + "Rou": "rr", + "Ru": "ru", + "Rua": "rq", + "Ruan": "rz", + "Rui": "rn", + "Run": "ry", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sh", + "San": "sd", + "Sang": "sf", + "Sao": "ss", + "Se": "se", + "Sen": "sk", + "Seng": "sj", + "Sha": "ua", + "Shai": "uh", + "Shan": "ud", + "Shang": "uf", + "Shao": "us", + "She": "ue", + "Shei": "uw", + "Shen": "uk", + "Sheng": "uj", + "Shi": "ui", + "Shou": "ur", + "Shu": "uu", + "Shua": "uq", + "Shuai": "ug", + "Shuan": "uz", + "Shuang": "ux", + "Shui": "un", + "Shun": "uy", + "Shuo": "uo", + "Si": "si", + "Song": "sl", + "Sou": "sr", + "Su": "su", + "Suan": "sz", + "Sui": "sn", + "Sun": "sy", + "Suo": "so", + "Ta": "ta", + "Tai": "th", + "Tan": "td", + "Tang": "tf", + "Tao": "ts", + "Te": "te", + "Tei": "tw", + "Teng": "tj", + "Ti": "ti", + "Tian": "tc", + "Tiao": "tm", + "Tie": "tp", + "Ting": "tg", + "Tong": "tl", + "Tou": "tr", + "Tu": "tu", + "Tuan": "tz", + "Tui": "tn", + "Tun": "ty", + "Tuo": "to", + "Xi": "xi", + "Xia": "xk", + "Xian": "xc", + "Xiang": "xn", + "Xiao": "xm", + "Xie": "xp", + "Xin": "xb", + "Xing": "xg", + "Xiong": "xl", + "Xiu": "xt", + "Xu": "xu", + "Xuan": "xj", + "Xue": "xh", + "Xun": "xw", + "Za": "za", + "Zai": "zh", + "Zan": "zd", + "Zang": "zf", + "Zao": "zs", + "Ze": "ze", + "Zei": "zw", + "Zen": "zk", + "Zeng": "zj", + "Zha": "aa", + "Zhai": "ah", + "Zhan": "ad", + "Zhang": "af", + "Zhao": "as", + "Zhe": "ae", + "Zhen": "ak", + "Zheng": "aj", + "Zhi": "ai", + "Zhong": "al", + "Zhou": "ar", + "Zhu": "au", + "Zhua": "aq", + "Zhuai": "ag", + "Zhuan": "az", + "Zhuang": "ax", + "Zhui": "an", + "Zhun": "ay", + "Zhuo": "ao", + "Zi": "zi", + "Zong": "zl", + "Zou": "zr", + "Zu": "zu", + "Zuan": "zz", + "Zui": "zn", + "Zun": "zy", + "Zuo": "zo" + }, + "XiaoLang": { + "Lv": "lx", + "Lve": "lb", + "Lue": "lb", + "Nv": "nx", + "Nve": "nb", + "Nue": "nb", + "A": "aa", + "O": "oo", + "E": "uu", + "Ai": "ai", + "Ei": "ui", + "Ao": "ao", + "Ou": "ou", + "An": "an", + "En": "un", + "Ang": "ah", + "Eng": "un", + "Er": "ur", + "Yi": "yi", + "Ya": "ya", + "Yo": "yo", + "Ye": "ye", + "Yao": "ys", + "You": "yr", + "Yan": "yj", + "Yin": "yd", + "Yang": "yh", + "Ying": "yv", + "Wu": "wu", + "Wa": "wa", + "Wo": "wo", + "Wai": "wk", + "Wei": "ww", + "Wan": "wj", + "Wen": "wm", + "Wang": "wh", + "Weng": "wn", + "Yu": "yu", + "Yue": "yb", + "Yuan": "yg", + "Yun": "yy", + "Yong": "yl", + "Ba": "ba", + "Bai": "bk", + "Ban": "bj", + "Bang": "bh", + "Bao": "bs", + "Bei": "bw", + "Ben": "bm", + "Beng": "bn", + "Bi": "bi", + "Bian": "bf", + "Biang": "bm", + "Biao": "bc", + "Bie": "bp", + "Bin": "bd", + "Bing": "bv", + "Bo": "bo", + "Bu": "bu", + "Ca": "ca", + "Cai": "ck", + "Can": "cj", + "Cang": "ch", + "Cao": "cs", + "Ce": "ce", + "Cen": "cm", + "Ceng": "cn", + "Cha": "ia", + "Chai": "ik", + "Chan": "ij", + "Chang": "ih", + "Chao": "is", + "Che": "ie", + "Chen": "im", + "Cheng": "in", + "Chi": "ii", + "Chong": "il", + "Chou": "ir", + "Chu": "iu", + "Chua": "if", + "Chuai": "iv", + "Chuan": "ig", + "Chuang": "iz", + "Chui": "id", + "Chun": "iy", + "Chuo": "io", + "Ci": "ci", + "Cong": "cl", + "Cou": "cr", + "Cu": "cu", + "Cuan": "cg", + "Cui": "cd", + "Cun": "cy", + "Cuo": "co", + "Da": "da", + "Dai": "dk", + "Dan": "dj", + "Dang": "dh", + "Dao": "ds", + "De": "de", + "Dei": "dw", + "Den": "dm", + "Deng": "dn", + "Di": "di", + "Dia": "dk", + "Dian": "df", + "Diao": "dc", + "Die": "dp", + "Ding": "dv", + "Diu": "dt", + "Dong": "dl", + "Dou": "dr", + "Du": "du", + "Duan": "dg", + "Dui": "dd", + "Dun": "dy", + "Duo": "do", + "Fa": "fa", + "Fan": "fj", + "Fang": "fh", + "Fei": "fw", + "Fen": "fm", + "Feng": "fn", + "Fiao": "fc", + "Fo": "fo", + "Fou": "fr", + "Fu": "fu", + "Ga": "ga", + "Gai": "gk", + "Gan": "gj", + "Gang": "gh", + "Gao": "gs", + "Ge": "ge", + "Gei": "gw", + "Gen": "gm", + "Geng": "gn", + "Gong": "gl", + "Gou": "gr", + "Gu": "gu", + "Gua": "gf", + "Guai": "gv", + "Guan": "gg", + "Guang": "gz", + "Gui": "gd", + "Gun": "gy", + "Guo": "go", + "Ha": "ha", + "Hai": "hk", + "Han": "hj", + "Hang": "hh", + "Hao": "hs", + "He": "he", + "Hei": "hw", + "Hen": "hm", + "Heng": "hn", + "Hong": "hl", + "Hou": "hr", + "Hu": "hu", + "Hua": "hf", + "Huai": "hv", + "Huan": "hg", + "Huang": "hz", + "Hui": "hd", + "Hun": "hy", + "Huo": "ho", + "Ji": "ji", + "Jia": "jk", + "Jian": "jf", + "Jiang": "jm", + "Jiao": "jc", + "Jie": "jp", + "Jin": "jd", + "Jing": "jv", + "Jiong": "jj", + "Jiu": "jt", + "Ju": "ju", + "Juan": "jg", + "Jue": "jb", + "Jun": "jy", + "Ka": "ka", + "Kai": "kk", + "Kan": "kj", + "Kang": "kh", + "Kao": "ks", + "Ke": "ke", + "Ken": "km", + "Keng": "kn", + "Kong": "kl", + "Kou": "kr", + "Ku": "ku", + "Kua": "kf", + "Kuai": "kv", + "Kuan": "kg", + "Kuang": "kz", + "Kui": "kd", + "Kun": "ky", + "Kuo": "ko", + "La": "la", + "Lai": "lk", + "Lan": "lj", + "Lang": "lh", + "Lao": "ls", + "Le": "le", + "Lei": "lw", + "Leng": "ln", + "Li": "li", + "Lia": "lk", + "Lian": "lf", + "Liang": "lm", + "Liao": "lc", + "Lie": "lp", + "Lin": "ld", + "Ling": "lv", + "Liu": "lt", + "Lo": "lo", + "Long": "ll", + "Lou": "lr", + "Lu": "lu", + "Luan": "lg", + "Lun": "ly", + "Luo": "lo", + "Ma": "ma", + "Mai": "mk", + "Man": "mj", + "Mang": "mh", + "Mao": "ms", + "Me": "me", + "Mei": "mw", + "Men": "mm", + "Meng": "mn", + "Mi": "mi", + "Mian": "mf", + "Miao": "mc", + "Mie": "mp", + "Min": "md", + "Ming": "mv", + "Miu": "mt", + "Mo": "mo", + "Mou": "mr", + "Mu": "mu", + "Na": "na", + "Nai": "nk", + "Nan": "nj", + "Nang": "nh", + "Nao": "ns", + "Ne": "ne", + "Nei": "nw", + "Nen": "nm", + "Neng": "nn", + "Ni": "ni", + "Nian": "nf", + "Niang": "nm", + "Niao": "nc", + "Nie": "np", + "Nin": "nd", + "Ning": "nv", + "Niu": "nt", + "Nong": "nl", + "Nou": "nr", + "Nu": "nu", + "Nuan": "ng", + "Nun": "ny", + "Nuo": "no", + "Pa": "pa", + "Pai": "pk", + "Pan": "pj", + "Pang": "ph", + "Pao": "ps", + "Pei": "pw", + "Pen": "pm", + "Peng": "pn", + "Pi": "pi", + "Pian": "pf", + "Piao": "pc", + "Pie": "pp", + "Pin": "pd", + "Ping": "pv", + "Po": "po", + "Pou": "pr", + "Pu": "pu", + "Qi": "qi", + "Qia": "qk", + "Qian": "qf", + "Qiang": "qm", + "Qiao": "qc", + "Qie": "qp", + "Qin": "qd", + "Qing": "qv", + "Qiong": "qj", + "Qiu": "qt", + "Qu": "qu", + "Quan": "qg", + "Que": "qb", + "Qun": "qy", + "Ran": "rj", + "Rang": "rh", + "Rao": "rs", + "Re": "re", + "Ren": "rm", + "Reng": "rn", + "Ri": "ri", + "Rong": "rl", + "Rou": "rr", + "Ru": "ru", + "Rua": "rf", + "Ruan": "rg", + "Rui": "rd", + "Run": "ry", + "Ruo": "ro", + "Sa": "sa", + "Sai": "sk", + "San": "sj", + "Sang": "sh", + "Sao": "ss", + "Se": "se", + "Sen": "sm", + "Seng": "sn", + "Sha": "va", + "Shai": "vk", + "Shan": "vj", + "Shang": "vh", + "Shao": "vs", + "She": "ve", + "Shei": "vw", + "Shen": "vm", + "Sheng": "vn", + "Shi": "vi", + "Shou": "vr", + "Shu": "vu", + "Shua": "vf", + "Shuai": "vv", + "Shuan": "vg", + "Shuang": "vz", + "Shui": "vd", + "Shun": "vy", + "Shuo": "vo", + "Si": "si", + "Song": "sl", + "Sou": "sr", + "Su": "su", + "Suan": "sg", + "Sui": "sd", + "Sun": "sy", + "Suo": "so", + "Ta": "ta", + "Tai": "tk", + "Tan": "tj", + "Tang": "th", + "Tao": "ts", + "Te": "te", + "Tei": "tw", + "Teng": "tn", + "Ti": "ti", + "Tian": "tf", + "Tiao": "tc", + "Tie": "tp", + "Ting": "tv", + "Tong": "tl", + "Tou": "tr", + "Tu": "tu", + "Tuan": "tg", + "Tui": "td", + "Tun": "ty", + "Tuo": "to", + "Xi": "xi", + "Xia": "xk", + "Xian": "xf", + "Xiang": "xm", + "Xiao": "xc", + "Xie": "xp", + "Xin": "xd", + "Xing": "xv", + "Xiong": "xj", + "Xiu": "xt", + "Xu": "xu", + "Xuan": "xg", + "Xue": "xb", + "Xun": "xy", + "Za": "za", + "Zai": "zk", + "Zan": "zj", + "Zang": "zh", + "Zao": "zs", + "Ze": "ze", + "Zei": "zw", + "Zen": "zm", + "Zeng": "zn", + "Zha": "ea", + "Zhai": "ek", + "Zhan": "ej", + "Zhang": "eh", + "Zhao": "es", + "Zhe": "ee", + "Zhen": "em", + "Zheng": "en", + "Zhi": "ei", + "Zhong": "el", + "Zhou": "er", + "Zhu": "eu", + "Zhua": "ef", + "Zhuai": "ev", + "Zhuan": "eg", + "Zhuang": "ez", + "Zhui": "ed", + "Zhun": "ey", + "Zhuo": "eo", + "Zi": "zi", + "Zong": "zl", + "Zou": "zr", + "Zu": "zu", + "Zuan": "zg", + "Zui": "zd", + "Zun": "zy", + "Zuo": "zo" + } +} \ No newline at end of file From 31cd8949fee2d156f16aaf45cb6e50cfac150e7c Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 14 Jun 2025 14:39:01 +0800 Subject: [PATCH 32/33] Compress json --- Flow.Launcher/Resources/double_pinyin.json | 3747 +------------------- 1 file changed, 1 insertion(+), 3746 deletions(-) diff --git a/Flow.Launcher/Resources/double_pinyin.json b/Flow.Launcher/Resources/double_pinyin.json index 6b8ae06c0ba..83972038fdd 100644 --- a/Flow.Launcher/Resources/double_pinyin.json +++ b/Flow.Launcher/Resources/double_pinyin.json @@ -1,3746 +1 @@ -{ - "XiaoHe": { - "Lv": "lv", - "Lve": "lt", - "Lue": "lt", - "Nv": "nv", - "Nve": "nt", - "Nue": "nt", - "A": "aa", - "O": "oo", - "E": "ee", - "Ai": "ai", - "Ei": "ei", - "Ao": "ao", - "Ou": "ou", - "An": "an", - "En": "en", - "Ang": "ah", - "Eng": "eg", - "Er": "er", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yc", - "You": "yz", - "Yan": "yj", - "Yin": "yb", - "Yang": "yh", - "Ying": "yk", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wd", - "Wei": "ww", - "Wan": "wj", - "Wen": "wf", - "Wang": "wh", - "Weng": "wg", - "Yu": "yu", - "Yue": "yt", - "Yuan": "yr", - "Yun": "yy", - "Yong": "ys", - "Ba": "ba", - "Bai": "bd", - "Ban": "bj", - "Bang": "bh", - "Bao": "bc", - "Bei": "bw", - "Ben": "bf", - "Beng": "bg", - "Bi": "bi", - "Bian": "bm", - "Biang": "bl", - "Biao": "bn", - "Bie": "bp", - "Bin": "bb", - "Bing": "bk", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cd", - "Can": "cj", - "Cang": "ch", - "Cao": "cc", - "Ce": "ce", - "Cen": "cf", - "Ceng": "cg", - "Cha": "ia", - "Chai": "id", - "Chan": "ij", - "Chang": "ih", - "Chao": "ic", - "Che": "ie", - "Chen": "if", - "Cheng": "ig", - "Chi": "ii", - "Chong": "is", - "Chou": "iz", - "Chu": "iu", - "Chua": "ix", - "Chuai": "ik", - "Chuan": "ir", - "Chuang": "il", - "Chui": "iv", - "Chun": "iy", - "Chuo": "io", - "Ci": "ci", - "Cong": "cs", - "Cou": "cz", - "Cu": "cu", - "Cuan": "cr", - "Cui": "cv", - "Cun": "cy", - "Cuo": "co", - "Da": "da", - "Dai": "dd", - "Dan": "dj", - "Dang": "dh", - "Dao": "dc", - "De": "de", - "Dei": "dw", - "Den": "df", - "Deng": "dg", - "Di": "di", - "Dia": "dx", - "Dian": "dm", - "Diao": "dn", - "Die": "dp", - "Ding": "dk", - "Diu": "dq", - "Dong": "ds", - "Dou": "dz", - "Du": "du", - "Duan": "dr", - "Dui": "dv", - "Dun": "dy", - "Duo": "do", - "Fa": "fa", - "Fan": "fj", - "Fang": "fh", - "Fei": "fw", - "Fen": "ff", - "Feng": "fg", - "Fiao": "fn", - "Fo": "fo", - "Fou": "fz", - "Fu": "fu", - "Ga": "ga", - "Gai": "gd", - "Gan": "gj", - "Gang": "gh", - "Gao": "gc", - "Ge": "ge", - "Gei": "gw", - "Gen": "gf", - "Geng": "gg", - "Gong": "gs", - "Gou": "gz", - "Gu": "gu", - "Gua": "gx", - "Guai": "gk", - "Guan": "gr", - "Guang": "gl", - "Gui": "gv", - "Gun": "gy", - "Guo": "go", - "Ha": "ha", - "Hai": "hd", - "Han": "hj", - "Hang": "hh", - "Hao": "hc", - "He": "he", - "Hei": "hw", - "Hen": "hf", - "Heng": "hg", - "Hong": "hs", - "Hou": "hz", - "Hu": "hu", - "Hua": "hx", - "Huai": "hk", - "Huan": "hr", - "Huang": "hl", - "Hui": "hv", - "Hun": "hy", - "Huo": "ho", - "Ji": "ji", - "Jia": "jx", - "Jian": "jm", - "Jiang": "jl", - "Jiao": "jn", - "Jie": "jp", - "Jin": "jb", - "Jing": "jk", - "Jiong": "js", - "Jiu": "jq", - "Ju": "ju", - "Juan": "jr", - "Jue": "jt", - "Jun": "jy", - "Ka": "ka", - "Kai": "kd", - "Kan": "kj", - "Kang": "kh", - "Kao": "kc", - "Ke": "ke", - "Ken": "kf", - "Keng": "kg", - "Kong": "ks", - "Kou": "kz", - "Ku": "ku", - "Kua": "kx", - "Kuai": "kk", - "Kuan": "kr", - "Kuang": "kl", - "Kui": "kv", - "Kun": "ky", - "Kuo": "ko", - "La": "la", - "Lai": "ld", - "Lan": "lj", - "Lang": "lh", - "Lao": "lc", - "Le": "le", - "Lei": "lw", - "Leng": "lg", - "Li": "li", - "Lia": "lx", - "Lian": "lm", - "Liang": "ll", - "Liao": "ln", - "Lie": "lp", - "Lin": "lb", - "Ling": "lk", - "Liu": "lq", - "Lo": "lo", - "Long": "ls", - "Lou": "lz", - "Lu": "lu", - "Luan": "lr", - "Lun": "ly", - "Luo": "lo", - "Ma": "ma", - "Mai": "md", - "Man": "mj", - "Mang": "mh", - "Mao": "mc", - "Me": "me", - "Mei": "mw", - "Men": "mf", - "Meng": "mg", - "Mi": "mi", - "Mian": "mm", - "Miao": "mn", - "Mie": "mp", - "Min": "mb", - "Ming": "mk", - "Miu": "mq", - "Mo": "mo", - "Mou": "mz", - "Mu": "mu", - "Na": "na", - "Nai": "nd", - "Nan": "nj", - "Nang": "nh", - "Nao": "nc", - "Ne": "ne", - "Nei": "nw", - "Nen": "nf", - "Neng": "ng", - "Ni": "ni", - "Nian": "nm", - "Niang": "nl", - "Niao": "nn", - "Nie": "np", - "Nin": "nb", - "Ning": "nk", - "Niu": "nq", - "Nong": "ns", - "Nou": "nz", - "Nu": "nu", - "Nuan": "nr", - "Nun": "ny", - "Nuo": "no", - "Pa": "pa", - "Pai": "pd", - "Pan": "pj", - "Pang": "ph", - "Pao": "pc", - "Pei": "pw", - "Pen": "pf", - "Peng": "pg", - "Pi": "pi", - "Pian": "pm", - "Piao": "pn", - "Pie": "pp", - "Pin": "pb", - "Ping": "pk", - "Po": "po", - "Pou": "pz", - "Pu": "pu", - "Qi": "qi", - "Qia": "qx", - "Qian": "qm", - "Qiang": "ql", - "Qiao": "qn", - "Qie": "qp", - "Qin": "qb", - "Qing": "qk", - "Qiong": "qs", - "Qiu": "qq", - "Qu": "qu", - "Quan": "qr", - "Que": "qt", - "Qun": "qy", - "Ran": "rj", - "Rang": "rh", - "Rao": "rc", - "Re": "re", - "Ren": "rf", - "Reng": "rg", - "Ri": "ri", - "Rong": "rs", - "Rou": "rz", - "Ru": "ru", - "Rua": "rx", - "Ruan": "rr", - "Rui": "rv", - "Run": "ry", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sd", - "San": "sj", - "Sang": "sh", - "Sao": "sc", - "Se": "se", - "Sen": "sf", - "Seng": "sg", - "Sha": "ua", - "Shai": "ud", - "Shan": "uj", - "Shang": "uh", - "Shao": "uc", - "She": "ue", - "Shei": "uw", - "Shen": "uf", - "Sheng": "ug", - "Shi": "ui", - "Shou": "uz", - "Shu": "uu", - "Shua": "ux", - "Shuai": "uk", - "Shuan": "ur", - "Shuang": "ul", - "Shui": "uv", - "Shun": "uy", - "Shuo": "uo", - "Si": "si", - "Song": "ss", - "Sou": "sz", - "Su": "su", - "Suan": "sr", - "Sui": "sv", - "Sun": "sy", - "Suo": "so", - "Ta": "ta", - "Tai": "td", - "Tan": "tj", - "Tang": "th", - "Tao": "tc", - "Te": "te", - "Tei": "tw", - "Teng": "tg", - "Ti": "ti", - "Tian": "tm", - "Tiao": "tn", - "Tie": "tp", - "Ting": "tk", - "Tong": "ts", - "Tou": "tz", - "Tu": "tu", - "Tuan": "tr", - "Tui": "tv", - "Tun": "ty", - "Tuo": "to", - "Xi": "xi", - "Xia": "xx", - "Xian": "xm", - "Xiang": "xl", - "Xiao": "xn", - "Xie": "xp", - "Xin": "xb", - "Xing": "xk", - "Xiong": "xs", - "Xiu": "xq", - "Xu": "xu", - "Xuan": "xr", - "Xue": "xt", - "Xun": "xy", - "Za": "za", - "Zai": "zd", - "Zan": "zj", - "Zang": "zh", - "Zao": "zc", - "Ze": "ze", - "Zei": "zw", - "Zen": "zf", - "Zeng": "zg", - "Zha": "va", - "Zhai": "vd", - "Zhan": "vj", - "Zhang": "vh", - "Zhao": "vc", - "Zhe": "ve", - "Zhen": "vf", - "Zheng": "vg", - "Zhi": "vi", - "Zhong": "vs", - "Zhou": "vz", - "Zhu": "vu", - "Zhua": "vx", - "Zhuai": "vk", - "Zhuan": "vr", - "Zhuang": "vl", - "Zhui": "vv", - "Zhun": "vy", - "Zhuo": "vo", - "Zi": "zi", - "Zong": "zs", - "Zou": "zz", - "Zu": "zu", - "Zuan": "zr", - "Zui": "zv", - "Zun": "zy", - "Zuo": "zo" - }, - "ZiRanMa": { - "Lv": "lv", - "Lve": "lt", - "Lue": "lt", - "Nv": "nv", - "Nve": "nt", - "Nue": "nt", - "A": "aa", - "O": "oo", - "E": "ee", - "Ai": "ai", - "Ei": "ei", - "Ao": "ao", - "Ou": "ou", - "An": "an", - "En": "en", - "Ang": "ah", - "Eng": "eg", - "Er": "er", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yk", - "You": "yb", - "Yan": "yj", - "Yin": "yn", - "Yang": "yh", - "Ying": "yy", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wl", - "Wei": "wz", - "Wan": "wj", - "Wen": "wf", - "Wang": "wh", - "Weng": "wg", - "Yu": "yu", - "Yue": "yt", - "Yuan": "yr", - "Yun": "yp", - "Yong": "ys", - "Ba": "ba", - "Bai": "bl", - "Ban": "bj", - "Bang": "bh", - "Bao": "bk", - "Bei": "bz", - "Ben": "bf", - "Beng": "bg", - "Bi": "bi", - "Bian": "bm", - "Biang": "bd", - "Biao": "bc", - "Bie": "bx", - "Bin": "bn", - "Bing": "by", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cl", - "Can": "cj", - "Cang": "ch", - "Cao": "ck", - "Ce": "ce", - "Cen": "cf", - "Ceng": "cg", - "Cha": "ia", - "Chai": "il", - "Chan": "ij", - "Chang": "ih", - "Chao": "ik", - "Che": "ie", - "Chen": "if", - "Cheng": "ig", - "Chi": "ii", - "Chong": "is", - "Chou": "ib", - "Chu": "iu", - "Chua": "iw", - "Chuai": "iy", - "Chuan": "ir", - "Chuang": "id", - "Chui": "iv", - "Chun": "ip", - "Chuo": "io", - "Ci": "ci", - "Cong": "cs", - "Cou": "cb", - "Cu": "cu", - "Cuan": "cr", - "Cui": "cv", - "Cun": "cp", - "Cuo": "co", - "Da": "da", - "Dai": "dl", - "Dan": "dj", - "Dang": "dh", - "Dao": "dk", - "De": "de", - "Dei": "dz", - "Den": "df", - "Deng": "dg", - "Di": "di", - "Dia": "dw", - "Dian": "dm", - "Diao": "dc", - "Die": "dx", - "Ding": "dy", - "Diu": "dq", - "Dong": "ds", - "Dou": "db", - "Du": "du", - "Duan": "dr", - "Dui": "dv", - "Dun": "dp", - "Duo": "do", - "Fa": "fa", - "Fan": "fj", - "Fang": "fh", - "Fei": "fz", - "Fen": "ff", - "Feng": "fg", - "Fiao": "fc", - "Fo": "fo", - "Fou": "fb", - "Fu": "fu", - "Ga": "ga", - "Gai": "gl", - "Gan": "gj", - "Gang": "gh", - "Gao": "gk", - "Ge": "ge", - "Gei": "gz", - "Gen": "gf", - "Geng": "gg", - "Gong": "gs", - "Gou": "gb", - "Gu": "gu", - "Gua": "gw", - "Guai": "gy", - "Guan": "gr", - "Guang": "gd", - "Gui": "gv", - "Gun": "gp", - "Guo": "go", - "Ha": "ha", - "Hai": "hl", - "Han": "hj", - "Hang": "hh", - "Hao": "hk", - "He": "he", - "Hei": "hz", - "Hen": "hf", - "Heng": "hg", - "Hong": "hs", - "Hou": "hb", - "Hu": "hu", - "Hua": "hw", - "Huai": "hy", - "Huan": "hr", - "Huang": "hd", - "Hui": "hv", - "Hun": "hp", - "Huo": "ho", - "Ji": "ji", - "Jia": "jw", - "Jian": "jm", - "Jiang": "jd", - "Jiao": "jc", - "Jie": "jx", - "Jin": "jn", - "Jing": "jy", - "Jiong": "js", - "Jiu": "jq", - "Ju": "ju", - "Juan": "jr", - "Jue": "jt", - "Jun": "jp", - "Ka": "ka", - "Kai": "kl", - "Kan": "kj", - "Kang": "kh", - "Kao": "kk", - "Ke": "ke", - "Ken": "kf", - "Keng": "kg", - "Kong": "ks", - "Kou": "kb", - "Ku": "ku", - "Kua": "kw", - "Kuai": "ky", - "Kuan": "kr", - "Kuang": "kd", - "Kui": "kv", - "Kun": "kp", - "Kuo": "ko", - "La": "la", - "Lai": "ll", - "Lan": "lj", - "Lang": "lh", - "Lao": "lk", - "Le": "le", - "Lei": "lz", - "Leng": "lg", - "Li": "li", - "Lia": "lw", - "Lian": "lm", - "Liang": "ld", - "Liao": "lc", - "Lie": "lx", - "Lin": "ln", - "Ling": "ly", - "Liu": "lq", - "Lo": "lo", - "Long": "ls", - "Lou": "lb", - "Lu": "lu", - "Luan": "lr", - "Lun": "lp", - "Luo": "lo", - "Ma": "ma", - "Mai": "ml", - "Man": "mj", - "Mang": "mh", - "Mao": "mk", - "Me": "me", - "Mei": "mz", - "Men": "mf", - "Meng": "mg", - "Mi": "mi", - "Mian": "mm", - "Miao": "mc", - "Mie": "mx", - "Min": "mn", - "Ming": "my", - "Miu": "mq", - "Mo": "mo", - "Mou": "mb", - "Mu": "mu", - "Na": "na", - "Nai": "nl", - "Nan": "nj", - "Nang": "nh", - "Nao": "nk", - "Ne": "ne", - "Nei": "nz", - "Nen": "nf", - "Neng": "ng", - "Ni": "ni", - "Nian": "nm", - "Niang": "nd", - "Niao": "nc", - "Nie": "nx", - "Nin": "nn", - "Ning": "ny", - "Niu": "nq", - "Nong": "ns", - "Nou": "nb", - "Nu": "nu", - "Nuan": "nr", - "Nun": "np", - "Nuo": "no", - "Pa": "pa", - "Pai": "pl", - "Pan": "pj", - "Pang": "ph", - "Pao": "pk", - "Pei": "pz", - "Pen": "pf", - "Peng": "pg", - "Pi": "pi", - "Pian": "pm", - "Piao": "pc", - "Pie": "px", - "Pin": "pn", - "Ping": "py", - "Po": "po", - "Pou": "pb", - "Pu": "pu", - "Qi": "qi", - "Qia": "qw", - "Qian": "qm", - "Qiang": "qd", - "Qiao": "qc", - "Qie": "qx", - "Qin": "qn", - "Qing": "qy", - "Qiong": "qs", - "Qiu": "qq", - "Qu": "qu", - "Quan": "qr", - "Que": "qt", - "Qun": "qp", - "Ran": "rj", - "Rang": "rh", - "Rao": "rk", - "Re": "re", - "Ren": "rf", - "Reng": "rg", - "Ri": "ri", - "Rong": "rs", - "Rou": "rb", - "Ru": "ru", - "Rua": "rw", - "Ruan": "rr", - "Rui": "rv", - "Run": "rp", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sl", - "San": "sj", - "Sang": "sh", - "Sao": "sk", - "Se": "se", - "Sen": "sf", - "Seng": "sg", - "Sha": "ua", - "Shai": "ul", - "Shan": "uj", - "Shang": "uh", - "Shao": "uk", - "She": "ue", - "Shei": "uz", - "Shen": "uf", - "Sheng": "ug", - "Shi": "ui", - "Shou": "ub", - "Shu": "uu", - "Shua": "uw", - "Shuai": "uy", - "Shuan": "ur", - "Shuang": "ud", - "Shui": "uv", - "Shun": "up", - "Shuo": "uo", - "Si": "si", - "Song": "ss", - "Sou": "sb", - "Su": "su", - "Suan": "sr", - "Sui": "sv", - "Sun": "sp", - "Suo": "so", - "Ta": "ta", - "Tai": "tl", - "Tan": "tj", - "Tang": "th", - "Tao": "tk", - "Te": "te", - "Tei": "tz", - "Teng": "tg", - "Ti": "ti", - "Tian": "tm", - "Tiao": "tc", - "Tie": "tx", - "Ting": "ty", - "Tong": "ts", - "Tou": "tb", - "Tu": "tu", - "Tuan": "tr", - "Tui": "tv", - "Tun": "tp", - "Tuo": "to", - "Xi": "xi", - "Xia": "xw", - "Xian": "xm", - "Xiang": "xd", - "Xiao": "xc", - "Xie": "xx", - "Xin": "xn", - "Xing": "xy", - "Xiong": "xs", - "Xiu": "xq", - "Xu": "xu", - "Xuan": "xr", - "Xue": "xt", - "Xun": "xp", - "Za": "za", - "Zai": "zl", - "Zan": "zj", - "Zang": "zh", - "Zao": "zk", - "Ze": "ze", - "Zei": "zz", - "Zen": "zf", - "Zeng": "zg", - "Zha": "va", - "Zhai": "vl", - "Zhan": "vj", - "Zhang": "vh", - "Zhao": "vk", - "Zhe": "ve", - "Zhen": "vf", - "Zheng": "vg", - "Zhi": "vi", - "Zhong": "vs", - "Zhou": "vb", - "Zhu": "vu", - "Zhua": "vw", - "Zhuai": "vy", - "Zhuan": "vr", - "Zhuang": "vd", - "Zhui": "vv", - "Zhun": "vp", - "Zhuo": "vo", - "Zi": "zi", - "Zong": "zs", - "Zou": "zb", - "Zu": "zu", - "Zuan": "zr", - "Zui": "zv", - "Zun": "zp", - "Zuo": "zo" - }, - "WeiRuan": { - "Lv": "ly", - "Lve": "lt", - "Lue": "lt", - "Nv": "ny", - "Nve": "nt", - "Nue": "nt", - "A": "oa", - "O": "oo", - "E": "oe", - "Ai": "ol", - "Ei": "oz", - "Ao": "ok", - "Ou": "ob", - "An": "oj", - "En": "of", - "Ang": "oh", - "Eng": "og", - "Er": "or", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yk", - "You": "yb", - "Yan": "yj", - "Yin": "yn", - "Yang": "yh", - "Ying": "y;", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wl", - "Wei": "wz", - "Wan": "wj", - "Wen": "wf", - "Wang": "wh", - "Weng": "wg", - "Yu": "yu", - "Yue": "yt", - "Yuan": "yr", - "Yun": "yp", - "Yong": "ys", - "Ba": "ba", - "Bai": "bl", - "Ban": "bj", - "Bang": "bh", - "Bao": "bk", - "Bei": "bz", - "Ben": "bf", - "Beng": "bg", - "Bi": "bi", - "Bian": "bm", - "Biang": "bd", - "Biao": "bc", - "Bie": "bx", - "Bin": "bn", - "Bing": "b;", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cl", - "Can": "cj", - "Cang": "ch", - "Cao": "ck", - "Ce": "ce", - "Cen": "cf", - "Ceng": "cg", - "Cha": "ia", - "Chai": "il", - "Chan": "ij", - "Chang": "ih", - "Chao": "ik", - "Che": "ie", - "Chen": "if", - "Cheng": "ig", - "Chi": "ii", - "Chong": "is", - "Chou": "ib", - "Chu": "iu", - "Chua": "iw", - "Chuai": "iy", - "Chuan": "ir", - "Chuang": "id", - "Chui": "iv", - "Chun": "ip", - "Chuo": "io", - "Ci": "ci", - "Cong": "cs", - "Cou": "cb", - "Cu": "cu", - "Cuan": "cr", - "Cui": "cv", - "Cun": "cp", - "Cuo": "co", - "Da": "da", - "Dai": "dl", - "Dan": "dj", - "Dang": "dh", - "Dao": "dk", - "De": "de", - "Dei": "dz", - "Den": "df", - "Deng": "dg", - "Di": "di", - "Dia": "dw", - "Dian": "dm", - "Diao": "dc", - "Die": "dx", - "Ding": "d;", - "Diu": "dq", - "Dong": "ds", - "Dou": "db", - "Du": "du", - "Duan": "dr", - "Dui": "dv", - "Dun": "dp", - "Duo": "do", - "Fa": "fa", - "Fan": "fj", - "Fang": "fh", - "Fei": "fz", - "Fen": "ff", - "Feng": "fg", - "Fiao": "fc", - "Fo": "fo", - "Fou": "fb", - "Fu": "fu", - "Ga": "ga", - "Gai": "gl", - "Gan": "gj", - "Gang": "gh", - "Gao": "gk", - "Ge": "ge", - "Gei": "gz", - "Gen": "gf", - "Geng": "gg", - "Gong": "gs", - "Gou": "gb", - "Gu": "gu", - "Gua": "gw", - "Guai": "gy", - "Guan": "gr", - "Guang": "gd", - "Gui": "gv", - "Gun": "gp", - "Guo": "go", - "Ha": "ha", - "Hai": "hl", - "Han": "hj", - "Hang": "hh", - "Hao": "hk", - "He": "he", - "Hei": "hz", - "Hen": "hf", - "Heng": "hg", - "Hong": "hs", - "Hou": "hb", - "Hu": "hu", - "Hua": "hw", - "Huai": "hy", - "Huan": "hr", - "Huang": "hd", - "Hui": "hv", - "Hun": "hp", - "Huo": "ho", - "Ji": "ji", - "Jia": "jw", - "Jian": "jm", - "Jiang": "jd", - "Jiao": "jc", - "Jie": "jx", - "Jin": "jn", - "Jing": "j;", - "Jiong": "js", - "Jiu": "jq", - "Ju": "ju", - "Juan": "jr", - "Jue": "jt", - "Jun": "jp", - "Ka": "ka", - "Kai": "kl", - "Kan": "kj", - "Kang": "kh", - "Kao": "kk", - "Ke": "ke", - "Ken": "kf", - "Keng": "kg", - "Kong": "ks", - "Kou": "kb", - "Ku": "ku", - "Kua": "kw", - "Kuai": "ky", - "Kuan": "kr", - "Kuang": "kd", - "Kui": "kv", - "Kun": "kp", - "Kuo": "ko", - "La": "la", - "Lai": "ll", - "Lan": "lj", - "Lang": "lh", - "Lao": "lk", - "Le": "le", - "Lei": "lz", - "Leng": "lg", - "Li": "li", - "Lia": "lw", - "Lian": "lm", - "Liang": "ld", - "Liao": "lc", - "Lie": "lx", - "Lin": "ln", - "Ling": "l;", - "Liu": "lq", - "Lo": "lo", - "Long": "ls", - "Lou": "lb", - "Lu": "lu", - "Luan": "lr", - "Lun": "lp", - "Luo": "lo", - "Ma": "ma", - "Mai": "ml", - "Man": "mj", - "Mang": "mh", - "Mao": "mk", - "Me": "me", - "Mei": "mz", - "Men": "mf", - "Meng": "mg", - "Mi": "mi", - "Mian": "mm", - "Miao": "mc", - "Mie": "mx", - "Min": "mn", - "Ming": "m;", - "Miu": "mq", - "Mo": "mo", - "Mou": "mb", - "Mu": "mu", - "Na": "na", - "Nai": "nl", - "Nan": "nj", - "Nang": "nh", - "Nao": "nk", - "Ne": "ne", - "Nei": "nz", - "Nen": "nf", - "Neng": "ng", - "Ni": "ni", - "Nian": "nm", - "Niang": "nd", - "Niao": "nc", - "Nie": "nx", - "Nin": "nn", - "Ning": "n;", - "Niu": "nq", - "Nong": "ns", - "Nou": "nb", - "Nu": "nu", - "Nuan": "nr", - "Nun": "np", - "Nuo": "no", - "Pa": "pa", - "Pai": "pl", - "Pan": "pj", - "Pang": "ph", - "Pao": "pk", - "Pei": "pz", - "Pen": "pf", - "Peng": "pg", - "Pi": "pi", - "Pian": "pm", - "Piao": "pc", - "Pie": "px", - "Pin": "pn", - "Ping": "p;", - "Po": "po", - "Pou": "pb", - "Pu": "pu", - "Qi": "qi", - "Qia": "qw", - "Qian": "qm", - "Qiang": "qd", - "Qiao": "qc", - "Qie": "qx", - "Qin": "qn", - "Qing": "q;", - "Qiong": "qs", - "Qiu": "qq", - "Qu": "qu", - "Quan": "qr", - "Que": "qt", - "Qun": "qp", - "Ran": "rj", - "Rang": "rh", - "Rao": "rk", - "Re": "re", - "Ren": "rf", - "Reng": "rg", - "Ri": "ri", - "Rong": "rs", - "Rou": "rb", - "Ru": "ru", - "Rua": "rw", - "Ruan": "rr", - "Rui": "rv", - "Run": "rp", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sl", - "San": "sj", - "Sang": "sh", - "Sao": "sk", - "Se": "se", - "Sen": "sf", - "Seng": "sg", - "Sha": "ua", - "Shai": "ul", - "Shan": "uj", - "Shang": "uh", - "Shao": "uk", - "She": "ue", - "Shei": "uz", - "Shen": "uf", - "Sheng": "ug", - "Shi": "ui", - "Shou": "ub", - "Shu": "uu", - "Shua": "uw", - "Shuai": "uy", - "Shuan": "ur", - "Shuang": "ud", - "Shui": "uv", - "Shun": "up", - "Shuo": "uo", - "Si": "si", - "Song": "ss", - "Sou": "sb", - "Su": "su", - "Suan": "sr", - "Sui": "sv", - "Sun": "sp", - "Suo": "so", - "Ta": "ta", - "Tai": "tl", - "Tan": "tj", - "Tang": "th", - "Tao": "tk", - "Te": "te", - "Tei": "tz", - "Teng": "tg", - "Ti": "ti", - "Tian": "tm", - "Tiao": "tc", - "Tie": "tx", - "Ting": "t;", - "Tong": "ts", - "Tou": "tb", - "Tu": "tu", - "Tuan": "tr", - "Tui": "tv", - "Tun": "tp", - "Tuo": "to", - "Xi": "xi", - "Xia": "xw", - "Xian": "xm", - "Xiang": "xd", - "Xiao": "xc", - "Xie": "xx", - "Xin": "xn", - "Xing": "x;", - "Xiong": "xs", - "Xiu": "xq", - "Xu": "xu", - "Xuan": "xr", - "Xue": "xt", - "Xun": "xp", - "Za": "za", - "Zai": "zl", - "Zan": "zj", - "Zang": "zh", - "Zao": "zk", - "Ze": "ze", - "Zei": "zz", - "Zen": "zf", - "Zeng": "zg", - "Zha": "va", - "Zhai": "vl", - "Zhan": "vj", - "Zhang": "vh", - "Zhao": "vk", - "Zhe": "ve", - "Zhen": "vf", - "Zheng": "vg", - "Zhi": "vi", - "Zhong": "vs", - "Zhou": "vb", - "Zhu": "vu", - "Zhua": "vw", - "Zhuai": "vy", - "Zhuan": "vr", - "Zhuang": "vd", - "Zhui": "vv", - "Zhun": "vp", - "Zhuo": "vo", - "Zi": "zi", - "Zong": "zs", - "Zou": "zb", - "Zu": "zu", - "Zuan": "zr", - "Zui": "zv", - "Zun": "zp", - "Zuo": "zo" - }, - "ZhiNengABC": { - "Lv": "lv", - "Lve": "lm", - "Lue": "lm", - "Nv": "nv", - "Nve": "nm", - "Nue": "nm", - "A": "oa", - "O": "oo", - "E": "oe", - "Ai": "ol", - "Ei": "oq", - "Ao": "ok", - "Ou": "ob", - "An": "oj", - "En": "of", - "Ang": "oh", - "Eng": "og", - "Er": "or", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yk", - "You": "yb", - "Yan": "yj", - "Yin": "yc", - "Yang": "yh", - "Ying": "yy", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wl", - "Wei": "wq", - "Wan": "wj", - "Wen": "wf", - "Wang": "wh", - "Weng": "wg", - "Yu": "yu", - "Yue": "ym", - "Yuan": "yp", - "Yun": "yn", - "Yong": "ys", - "Ba": "ba", - "Bai": "bl", - "Ban": "bj", - "Bang": "bh", - "Bao": "bk", - "Bei": "bq", - "Ben": "bf", - "Beng": "bg", - "Bi": "bi", - "Bian": "bw", - "Biang": "bt", - "Biao": "bz", - "Bie": "bx", - "Bin": "bc", - "Bing": "by", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cl", - "Can": "cj", - "Cang": "ch", - "Cao": "ck", - "Ce": "ce", - "Cen": "cf", - "Ceng": "cg", - "Cha": "ea", - "Chai": "el", - "Chan": "ej", - "Chang": "eh", - "Chao": "ek", - "Che": "ee", - "Chen": "ef", - "Cheng": "eg", - "Chi": "ei", - "Chong": "es", - "Chou": "eb", - "Chu": "eu", - "Chua": "ed", - "Chuai": "ec", - "Chuan": "ep", - "Chuang": "et", - "Chui": "em", - "Chun": "en", - "Chuo": "eo", - "Ci": "ci", - "Cong": "cs", - "Cou": "cb", - "Cu": "cu", - "Cuan": "cp", - "Cui": "cm", - "Cun": "cn", - "Cuo": "co", - "Da": "da", - "Dai": "dl", - "Dan": "dj", - "Dang": "dh", - "Dao": "dk", - "De": "de", - "Dei": "dq", - "Den": "df", - "Deng": "dg", - "Di": "di", - "Dia": "dd", - "Dian": "dw", - "Diao": "dz", - "Die": "dx", - "Ding": "dy", - "Diu": "dr", - "Dong": "ds", - "Dou": "db", - "Du": "du", - "Duan": "dp", - "Dui": "dm", - "Dun": "dn", - "Duo": "do", - "Fa": "fa", - "Fan": "fj", - "Fang": "fh", - "Fei": "fq", - "Fen": "ff", - "Feng": "fg", - "Fiao": "fz", - "Fo": "fo", - "Fou": "fb", - "Fu": "fu", - "Ga": "ga", - "Gai": "gl", - "Gan": "gj", - "Gang": "gh", - "Gao": "gk", - "Ge": "ge", - "Gei": "gq", - "Gen": "gf", - "Geng": "gg", - "Gong": "gs", - "Gou": "gb", - "Gu": "gu", - "Gua": "gd", - "Guai": "gc", - "Guan": "gp", - "Guang": "gt", - "Gui": "gm", - "Gun": "gn", - "Guo": "go", - "Ha": "ha", - "Hai": "hl", - "Han": "hj", - "Hang": "hh", - "Hao": "hk", - "He": "he", - "Hei": "hq", - "Hen": "hf", - "Heng": "hg", - "Hong": "hs", - "Hou": "hb", - "Hu": "hu", - "Hua": "hd", - "Huai": "hc", - "Huan": "hp", - "Huang": "ht", - "Hui": "hm", - "Hun": "hn", - "Huo": "ho", - "Ji": "ji", - "Jia": "jd", - "Jian": "jw", - "Jiang": "jt", - "Jiao": "jz", - "Jie": "jx", - "Jin": "jc", - "Jing": "jy", - "Jiong": "js", - "Jiu": "jr", - "Ju": "ju", - "Juan": "jp", - "Jue": "jm", - "Jun": "jn", - "Ka": "ka", - "Kai": "kl", - "Kan": "kj", - "Kang": "kh", - "Kao": "kk", - "Ke": "ke", - "Ken": "kf", - "Keng": "kg", - "Kong": "ks", - "Kou": "kb", - "Ku": "ku", - "Kua": "kd", - "Kuai": "kc", - "Kuan": "kp", - "Kuang": "kt", - "Kui": "km", - "Kun": "kn", - "Kuo": "ko", - "La": "la", - "Lai": "ll", - "Lan": "lj", - "Lang": "lh", - "Lao": "lk", - "Le": "le", - "Lei": "lq", - "Leng": "lg", - "Li": "li", - "Lia": "ld", - "Lian": "lw", - "Liang": "lt", - "Liao": "lz", - "Lie": "lx", - "Lin": "lc", - "Ling": "ly", - "Liu": "lr", - "Lo": "lo", - "Long": "ls", - "Lou": "lb", - "Lu": "lu", - "Luan": "lp", - "Lun": "ln", - "Luo": "lo", - "Ma": "ma", - "Mai": "ml", - "Man": "mj", - "Mang": "mh", - "Mao": "mk", - "Me": "me", - "Mei": "mq", - "Men": "mf", - "Meng": "mg", - "Mi": "mi", - "Mian": "mw", - "Miao": "mz", - "Mie": "mx", - "Min": "mc", - "Ming": "my", - "Miu": "mr", - "Mo": "mo", - "Mou": "mb", - "Mu": "mu", - "Na": "na", - "Nai": "nl", - "Nan": "nj", - "Nang": "nh", - "Nao": "nk", - "Ne": "ne", - "Nei": "nq", - "Nen": "nf", - "Neng": "ng", - "Ni": "ni", - "Nian": "nw", - "Niang": "nt", - "Niao": "nz", - "Nie": "nx", - "Nin": "nc", - "Ning": "ny", - "Niu": "nr", - "Nong": "ns", - "Nou": "nb", - "Nu": "nu", - "Nuan": "np", - "Nun": "nn", - "Nuo": "no", - "Pa": "pa", - "Pai": "pl", - "Pan": "pj", - "Pang": "ph", - "Pao": "pk", - "Pei": "pq", - "Pen": "pf", - "Peng": "pg", - "Pi": "pi", - "Pian": "pw", - "Piao": "pz", - "Pie": "px", - "Pin": "pc", - "Ping": "py", - "Po": "po", - "Pou": "pb", - "Pu": "pu", - "Qi": "qi", - "Qia": "qd", - "Qian": "qw", - "Qiang": "qt", - "Qiao": "qz", - "Qie": "qx", - "Qin": "qc", - "Qing": "qy", - "Qiong": "qs", - "Qiu": "qr", - "Qu": "qu", - "Quan": "qp", - "Que": "qm", - "Qun": "qn", - "Ran": "rj", - "Rang": "rh", - "Rao": "rk", - "Re": "re", - "Ren": "rf", - "Reng": "rg", - "Ri": "ri", - "Rong": "rs", - "Rou": "rb", - "Ru": "ru", - "Rua": "rd", - "Ruan": "rp", - "Rui": "rm", - "Run": "rn", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sl", - "San": "sj", - "Sang": "sh", - "Sao": "sk", - "Se": "se", - "Sen": "sf", - "Seng": "sg", - "Sha": "va", - "Shai": "vl", - "Shan": "vj", - "Shang": "vh", - "Shao": "vk", - "She": "ve", - "Shei": "vq", - "Shen": "vf", - "Sheng": "vg", - "Shi": "vi", - "Shou": "vb", - "Shu": "vu", - "Shua": "vd", - "Shuai": "vc", - "Shuan": "vp", - "Shuang": "vt", - "Shui": "vm", - "Shun": "vn", - "Shuo": "vo", - "Si": "si", - "Song": "ss", - "Sou": "sb", - "Su": "su", - "Suan": "sp", - "Sui": "sm", - "Sun": "sn", - "Suo": "so", - "Ta": "ta", - "Tai": "tl", - "Tan": "tj", - "Tang": "th", - "Tao": "tk", - "Te": "te", - "Tei": "tq", - "Teng": "tg", - "Ti": "ti", - "Tian": "tw", - "Tiao": "tz", - "Tie": "tx", - "Ting": "ty", - "Tong": "ts", - "Tou": "tb", - "Tu": "tu", - "Tuan": "tp", - "Tui": "tm", - "Tun": "tn", - "Tuo": "to", - "Xi": "xi", - "Xia": "xd", - "Xian": "xw", - "Xiang": "xt", - "Xiao": "xz", - "Xie": "xx", - "Xin": "xc", - "Xing": "xy", - "Xiong": "xs", - "Xiu": "xr", - "Xu": "xu", - "Xuan": "xp", - "Xue": "xm", - "Xun": "xn", - "Za": "za", - "Zai": "zl", - "Zan": "zj", - "Zang": "zh", - "Zao": "zk", - "Ze": "ze", - "Zei": "zq", - "Zen": "zf", - "Zeng": "zg", - "Zha": "aa", - "Zhai": "al", - "Zhan": "aj", - "Zhang": "ah", - "Zhao": "ak", - "Zhe": "ae", - "Zhen": "af", - "Zheng": "ag", - "Zhi": "ai", - "Zhong": "as", - "Zhou": "ab", - "Zhu": "au", - "Zhua": "ad", - "Zhuai": "ac", - "Zhuan": "ap", - "Zhuang": "at", - "Zhui": "am", - "Zhun": "an", - "Zhuo": "ao", - "Zi": "zi", - "Zong": "zs", - "Zou": "zb", - "Zu": "zu", - "Zuan": "zp", - "Zui": "zm", - "Zun": "zn", - "Zuo": "zo" - }, - "ZiGuangPinYin": { - "Lv": "lv", - "Lve": "ln", - "Lue": "ln", - "Nv": "nv", - "Nve": "nn", - "Nue": "nn", - "A": "oa", - "O": "oo", - "E": "oe", - "Ai": "op", - "Ei": "ok", - "Ao": "oq", - "Ou": "oz", - "An": "or", - "En": "ow", - "Ang": "os", - "Eng": "ot", - "Er": "oj", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yq", - "You": "yz", - "Yan": "yr", - "Yin": "yy", - "Yang": "ys", - "Ying": "yc", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wp", - "Wei": "wk", - "Wan": "wr", - "Wen": "ww", - "Wang": "ws", - "Weng": "wt", - "Yu": "yu", - "Yue": "yn", - "Yuan": "yl", - "Yun": "ym", - "Yong": "yh", - "Ba": "ba", - "Bai": "bp", - "Ban": "br", - "Bang": "bs", - "Bao": "bq", - "Bei": "bk", - "Ben": "bw", - "Beng": "bt", - "Bi": "bi", - "Bian": "bf", - "Biang": "bg", - "Biao": "bb", - "Bie": "bd", - "Bin": "by", - "Bing": "bc", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cp", - "Can": "cr", - "Cang": "cs", - "Cao": "cq", - "Ce": "ce", - "Cen": "cw", - "Ceng": "ct", - "Cha": "aa", - "Chai": "ap", - "Chan": "ar", - "Chang": "as", - "Chao": "aq", - "Che": "ae", - "Chen": "aw", - "Cheng": "at", - "Chi": "ai", - "Chong": "ah", - "Chou": "az", - "Chu": "au", - "Chua": "ax", - "Chuai": "ay", - "Chuan": "al", - "Chuang": "ag", - "Chui": "an", - "Chun": "am", - "Chuo": "ao", - "Ci": "ci", - "Cong": "ch", - "Cou": "cz", - "Cu": "cu", - "Cuan": "cl", - "Cui": "cn", - "Cun": "cm", - "Cuo": "co", - "Da": "da", - "Dai": "dp", - "Dan": "dr", - "Dang": "ds", - "Dao": "dq", - "De": "de", - "Dei": "dk", - "Den": "dw", - "Deng": "dt", - "Di": "di", - "Dia": "dx", - "Dian": "df", - "Diao": "db", - "Die": "dd", - "Ding": "dc", - "Diu": "dj", - "Dong": "dh", - "Dou": "dz", - "Du": "du", - "Duan": "dl", - "Dui": "dn", - "Dun": "dm", - "Duo": "do", - "Fa": "fa", - "Fan": "fr", - "Fang": "fs", - "Fei": "fk", - "Fen": "fw", - "Feng": "ft", - "Fiao": "fb", - "Fo": "fo", - "Fou": "fz", - "Fu": "fu", - "Ga": "ga", - "Gai": "gp", - "Gan": "gr", - "Gang": "gs", - "Gao": "gq", - "Ge": "ge", - "Gei": "gk", - "Gen": "gw", - "Geng": "gt", - "Gong": "gh", - "Gou": "gz", - "Gu": "gu", - "Gua": "gx", - "Guai": "gy", - "Guan": "gl", - "Guang": "gg", - "Gui": "gn", - "Gun": "gm", - "Guo": "go", - "Ha": "ha", - "Hai": "hp", - "Han": "hr", - "Hang": "hs", - "Hao": "hq", - "He": "he", - "Hei": "hk", - "Hen": "hw", - "Heng": "ht", - "Hong": "hh", - "Hou": "hz", - "Hu": "hu", - "Hua": "hx", - "Huai": "hy", - "Huan": "hl", - "Huang": "hg", - "Hui": "hn", - "Hun": "hm", - "Huo": "ho", - "Ji": "ji", - "Jia": "jx", - "Jian": "jf", - "Jiang": "jg", - "Jiao": "jb", - "Jie": "jd", - "Jin": "jy", - "Jing": "jc", - "Jiong": "jh", - "Jiu": "jj", - "Ju": "ju", - "Juan": "jl", - "Jue": "jn", - "Jun": "jm", - "Ka": "ka", - "Kai": "kp", - "Kan": "kr", - "Kang": "ks", - "Kao": "kq", - "Ke": "ke", - "Ken": "kw", - "Keng": "kt", - "Kong": "kh", - "Kou": "kz", - "Ku": "ku", - "Kua": "kx", - "Kuai": "ky", - "Kuan": "kl", - "Kuang": "kg", - "Kui": "kn", - "Kun": "km", - "Kuo": "ko", - "La": "la", - "Lai": "lp", - "Lan": "lr", - "Lang": "ls", - "Lao": "lq", - "Le": "le", - "Lei": "lk", - "Leng": "lt", - "Li": "li", - "Lia": "lx", - "Lian": "lf", - "Liang": "lg", - "Liao": "lb", - "Lie": "ld", - "Lin": "ly", - "Ling": "lc", - "Liu": "lj", - "Lo": "lo", - "Long": "lh", - "Lou": "lz", - "Lu": "lu", - "Luan": "ll", - "Lun": "lm", - "Luo": "lo", - "Ma": "ma", - "Mai": "mp", - "Man": "mr", - "Mang": "ms", - "Mao": "mq", - "Me": "me", - "Mei": "mk", - "Men": "mw", - "Meng": "mt", - "Mi": "mi", - "Mian": "mf", - "Miao": "mb", - "Mie": "md", - "Min": "my", - "Ming": "mc", - "Miu": "mj", - "Mo": "mo", - "Mou": "mz", - "Mu": "mu", - "Na": "na", - "Nai": "np", - "Nan": "nr", - "Nang": "ns", - "Nao": "nq", - "Ne": "ne", - "Nei": "nk", - "Nen": "nw", - "Neng": "nt", - "Ni": "ni", - "Nian": "nf", - "Niang": "ng", - "Niao": "nb", - "Nie": "nd", - "Nin": "ny", - "Ning": "nc", - "Niu": "nj", - "Nong": "nh", - "Nou": "nz", - "Nu": "nu", - "Nuan": "nl", - "Nun": "nm", - "Nuo": "no", - "Pa": "pa", - "Pai": "pp", - "Pan": "pr", - "Pang": "ps", - "Pao": "pq", - "Pei": "pk", - "Pen": "pw", - "Peng": "pt", - "Pi": "pi", - "Pian": "pf", - "Piao": "pb", - "Pie": "pd", - "Pin": "py", - "Ping": "pc", - "Po": "po", - "Pou": "pz", - "Pu": "pu", - "Qi": "qi", - "Qia": "qx", - "Qian": "qf", - "Qiang": "qg", - "Qiao": "qb", - "Qie": "qd", - "Qin": "qy", - "Qing": "qc", - "Qiong": "qh", - "Qiu": "qj", - "Qu": "qu", - "Quan": "ql", - "Que": "qn", - "Qun": "qm", - "Ran": "rr", - "Rang": "rs", - "Rao": "rq", - "Re": "re", - "Ren": "rw", - "Reng": "rt", - "Ri": "ri", - "Rong": "rh", - "Rou": "rz", - "Ru": "ru", - "Rua": "rx", - "Ruan": "rl", - "Rui": "rn", - "Run": "rm", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sp", - "San": "sr", - "Sang": "ss", - "Sao": "sq", - "Se": "se", - "Sen": "sw", - "Seng": "st", - "Sha": "ia", - "Shai": "ip", - "Shan": "ir", - "Shang": "is", - "Shao": "iq", - "She": "ie", - "Shei": "ik", - "Shen": "iw", - "Sheng": "it", - "Shi": "ii", - "Shou": "iz", - "Shu": "iu", - "Shua": "ix", - "Shuai": "iy", - "Shuan": "il", - "Shuang": "ig", - "Shui": "in", - "Shun": "im", - "Shuo": "io", - "Si": "si", - "Song": "sh", - "Sou": "sz", - "Su": "su", - "Suan": "sl", - "Sui": "sn", - "Sun": "sm", - "Suo": "so", - "Ta": "ta", - "Tai": "tp", - "Tan": "tr", - "Tang": "ts", - "Tao": "tq", - "Te": "te", - "Tei": "tk", - "Teng": "tt", - "Ti": "ti", - "Tian": "tf", - "Tiao": "tb", - "Tie": "td", - "Ting": "tc", - "Tong": "th", - "Tou": "tz", - "Tu": "tu", - "Tuan": "tl", - "Tui": "tn", - "Tun": "tm", - "Tuo": "to", - "Xi": "xi", - "Xia": "xx", - "Xian": "xf", - "Xiang": "xg", - "Xiao": "xb", - "Xie": "xd", - "Xin": "xy", - "Xing": "xc", - "Xiong": "xh", - "Xiu": "xj", - "Xu": "xu", - "Xuan": "xl", - "Xue": "xn", - "Xun": "xm", - "Za": "za", - "Zai": "zp", - "Zan": "zr", - "Zang": "zs", - "Zao": "zq", - "Ze": "ze", - "Zei": "zk", - "Zen": "zw", - "Zeng": "zt", - "Zha": "ua", - "Zhai": "up", - "Zhan": "ur", - "Zhang": "us", - "Zhao": "uq", - "Zhe": "ue", - "Zhen": "uw", - "Zheng": "ut", - "Zhi": "ui", - "Zhong": "uh", - "Zhou": "uz", - "Zhu": "uu", - "Zhua": "ux", - "Zhuai": "uy", - "Zhuan": "ul", - "Zhuang": "ug", - "Zhui": "un", - "Zhun": "um", - "Zhuo": "uo", - "Zi": "zi", - "Zong": "zh", - "Zou": "zz", - "Zu": "zu", - "Zuan": "zl", - "Zui": "zn", - "Zun": "zm", - "Zuo": "zo" - }, - "PinYinJiaJia": { - "Lv": "lv", - "Lve": "lx", - "Lue": "lx", - "Nv": "nv", - "Nve": "nx", - "Nue": "nx", - "A": "aa", - "O": "oo", - "E": "ee", - "Ai": "as", - "Ei": "ew", - "Ao": "ad", - "Ou": "op", - "An": "af", - "En": "er", - "Ang": "ag", - "Eng": "et", - "Er": "eq", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "yd", - "You": "yp", - "Yan": "yf", - "Yin": "yl", - "Yang": "yg", - "Ying": "yq", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "ws", - "Wei": "ww", - "Wan": "wf", - "Wen": "wr", - "Wang": "wg", - "Weng": "wt", - "Yu": "yu", - "Yue": "yx", - "Yuan": "yc", - "Yun": "yz", - "Yong": "yy", - "Ba": "ba", - "Bai": "bs", - "Ban": "bf", - "Bang": "bg", - "Bao": "bd", - "Bei": "bw", - "Ben": "br", - "Beng": "bt", - "Bi": "bi", - "Bian": "bj", - "Biang": "bh", - "Biao": "bk", - "Bie": "bm", - "Bin": "bl", - "Bing": "bq", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cs", - "Can": "cf", - "Cang": "cg", - "Cao": "cd", - "Ce": "ce", - "Cen": "cr", - "Ceng": "ct", - "Cha": "ua", - "Chai": "us", - "Chan": "uf", - "Chang": "ug", - "Chao": "ud", - "Che": "ue", - "Chen": "ur", - "Cheng": "ut", - "Chi": "ui", - "Chong": "uy", - "Chou": "up", - "Chu": "uu", - "Chua": "ub", - "Chuai": "ux", - "Chuan": "uc", - "Chuang": "uh", - "Chui": "uv", - "Chun": "uz", - "Chuo": "uo", - "Ci": "ci", - "Cong": "cy", - "Cou": "cp", - "Cu": "cu", - "Cuan": "cc", - "Cui": "cv", - "Cun": "cz", - "Cuo": "co", - "Da": "da", - "Dai": "ds", - "Dan": "df", - "Dang": "dg", - "Dao": "dd", - "De": "de", - "Dei": "dw", - "Den": "dr", - "Deng": "dt", - "Di": "di", - "Dia": "db", - "Dian": "dj", - "Diao": "dk", - "Die": "dm", - "Ding": "dq", - "Diu": "dn", - "Dong": "dy", - "Dou": "dp", - "Du": "du", - "Duan": "dc", - "Dui": "dv", - "Dun": "dz", - "Duo": "do", - "Fa": "fa", - "Fan": "ff", - "Fang": "fg", - "Fei": "fw", - "Fen": "fr", - "Feng": "ft", - "Fiao": "fk", - "Fo": "fo", - "Fou": "fp", - "Fu": "fu", - "Ga": "ga", - "Gai": "gs", - "Gan": "gf", - "Gang": "gg", - "Gao": "gd", - "Ge": "ge", - "Gei": "gw", - "Gen": "gr", - "Geng": "gt", - "Gong": "gy", - "Gou": "gp", - "Gu": "gu", - "Gua": "gb", - "Guai": "gx", - "Guan": "gc", - "Guang": "gh", - "Gui": "gv", - "Gun": "gz", - "Guo": "go", - "Ha": "ha", - "Hai": "hs", - "Han": "hf", - "Hang": "hg", - "Hao": "hd", - "He": "he", - "Hei": "hw", - "Hen": "hr", - "Heng": "ht", - "Hong": "hy", - "Hou": "hp", - "Hu": "hu", - "Hua": "hb", - "Huai": "hx", - "Huan": "hc", - "Huang": "hh", - "Hui": "hv", - "Hun": "hz", - "Huo": "ho", - "Ji": "ji", - "Jia": "jb", - "Jian": "jj", - "Jiang": "jh", - "Jiao": "jk", - "Jie": "jm", - "Jin": "jl", - "Jing": "jq", - "Jiong": "jy", - "Jiu": "jn", - "Ju": "ju", - "Juan": "jc", - "Jue": "jx", - "Jun": "jz", - "Ka": "ka", - "Kai": "ks", - "Kan": "kf", - "Kang": "kg", - "Kao": "kd", - "Ke": "ke", - "Ken": "kr", - "Keng": "kt", - "Kong": "ky", - "Kou": "kp", - "Ku": "ku", - "Kua": "kb", - "Kuai": "kx", - "Kuan": "kc", - "Kuang": "kh", - "Kui": "kv", - "Kun": "kz", - "Kuo": "ko", - "La": "la", - "Lai": "ls", - "Lan": "lf", - "Lang": "lg", - "Lao": "ld", - "Le": "le", - "Lei": "lw", - "Leng": "lt", - "Li": "li", - "Lia": "lb", - "Lian": "lj", - "Liang": "lh", - "Liao": "lk", - "Lie": "lm", - "Lin": "ll", - "Ling": "lq", - "Liu": "ln", - "Lo": "lo", - "Long": "ly", - "Lou": "lp", - "Lu": "lu", - "Luan": "lc", - "Lun": "lz", - "Luo": "lo", - "Ma": "ma", - "Mai": "ms", - "Man": "mf", - "Mang": "mg", - "Mao": "md", - "Me": "me", - "Mei": "mw", - "Men": "mr", - "Meng": "mt", - "Mi": "mi", - "Mian": "mj", - "Miao": "mk", - "Mie": "mm", - "Min": "ml", - "Ming": "mq", - "Miu": "mn", - "Mo": "mo", - "Mou": "mp", - "Mu": "mu", - "Na": "na", - "Nai": "ns", - "Nan": "nf", - "Nang": "ng", - "Nao": "nd", - "Ne": "ne", - "Nei": "nw", - "Nen": "nr", - "Neng": "nt", - "Ni": "ni", - "Nian": "nj", - "Niang": "nh", - "Niao": "nk", - "Nie": "nm", - "Nin": "nl", - "Ning": "nq", - "Niu": "nn", - "Nong": "ny", - "Nou": "np", - "Nu": "nu", - "Nuan": "nc", - "Nun": "nz", - "Nuo": "no", - "Pa": "pa", - "Pai": "ps", - "Pan": "pf", - "Pang": "pg", - "Pao": "pd", - "Pei": "pw", - "Pen": "pr", - "Peng": "pt", - "Pi": "pi", - "Pian": "pj", - "Piao": "pk", - "Pie": "pm", - "Pin": "pl", - "Ping": "pq", - "Po": "po", - "Pou": "pp", - "Pu": "pu", - "Qi": "qi", - "Qia": "qb", - "Qian": "qj", - "Qiang": "qh", - "Qiao": "qk", - "Qie": "qm", - "Qin": "ql", - "Qing": "qq", - "Qiong": "qy", - "Qiu": "qn", - "Qu": "qu", - "Quan": "qc", - "Que": "qx", - "Qun": "qz", - "Ran": "rf", - "Rang": "rg", - "Rao": "rd", - "Re": "re", - "Ren": "rr", - "Reng": "rt", - "Ri": "ri", - "Rong": "ry", - "Rou": "rp", - "Ru": "ru", - "Rua": "rb", - "Ruan": "rc", - "Rui": "rv", - "Run": "rz", - "Ruo": "ro", - "Sa": "sa", - "Sai": "ss", - "San": "sf", - "Sang": "sg", - "Sao": "sd", - "Se": "se", - "Sen": "sr", - "Seng": "st", - "Sha": "ia", - "Shai": "is", - "Shan": "if", - "Shang": "ig", - "Shao": "id", - "She": "ie", - "Shei": "iw", - "Shen": "ir", - "Sheng": "it", - "Shi": "ii", - "Shou": "ip", - "Shu": "iu", - "Shua": "ib", - "Shuai": "ix", - "Shuan": "ic", - "Shuang": "ih", - "Shui": "iv", - "Shun": "iz", - "Shuo": "io", - "Si": "si", - "Song": "sy", - "Sou": "sp", - "Su": "su", - "Suan": "sc", - "Sui": "sv", - "Sun": "sz", - "Suo": "so", - "Ta": "ta", - "Tai": "ts", - "Tan": "tf", - "Tang": "tg", - "Tao": "td", - "Te": "te", - "Tei": "tw", - "Teng": "tt", - "Ti": "ti", - "Tian": "tj", - "Tiao": "tk", - "Tie": "tm", - "Ting": "tq", - "Tong": "ty", - "Tou": "tp", - "Tu": "tu", - "Tuan": "tc", - "Tui": "tv", - "Tun": "tz", - "Tuo": "to", - "Xi": "xi", - "Xia": "xb", - "Xian": "xj", - "Xiang": "xh", - "Xiao": "xk", - "Xie": "xm", - "Xin": "xl", - "Xing": "xq", - "Xiong": "xy", - "Xiu": "xn", - "Xu": "xu", - "Xuan": "xc", - "Xue": "xx", - "Xun": "xz", - "Za": "za", - "Zai": "zs", - "Zan": "zf", - "Zang": "zg", - "Zao": "zd", - "Ze": "ze", - "Zei": "zw", - "Zen": "zr", - "Zeng": "zt", - "Zha": "va", - "Zhai": "vs", - "Zhan": "vf", - "Zhang": "vg", - "Zhao": "vd", - "Zhe": "ve", - "Zhen": "vr", - "Zheng": "vt", - "Zhi": "vi", - "Zhong": "vy", - "Zhou": "vp", - "Zhu": "vu", - "Zhua": "vb", - "Zhuai": "vx", - "Zhuan": "vc", - "Zhuang": "vh", - "Zhui": "vv", - "Zhun": "vz", - "Zhuo": "vo", - "Zi": "zi", - "Zong": "zy", - "Zou": "zp", - "Zu": "zu", - "Zuan": "zc", - "Zui": "zv", - "Zun": "zz", - "Zuo": "zo" - }, - "XingKongJianDao": { - "Lv": "lv", - "Lve": "ly", - "Lue": "ly", - "Nv": "nv", - "Nve": "ny", - "Nue": "ny", - "A": "xa", - "O": "xo", - "E": "xe", - "Ai": "xj", - "Ei": "xw", - "Ao": "xs", - "Ou": "xt", - "An": "xd", - "En": "xk", - "Ang": "xf", - "Eng": "xh", - "Er": "xu", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "ys", - "You": "yt", - "Yan": "yd", - "Yin": "yb", - "Yang": "yf", - "Ying": "yg", - "Wu": "wj", - "Wa": "ws", - "Wo": "wo", - "Wai": "wh", - "Wei": "ww", - "Wan": "wf", - "Wen": "wn", - "Wang": "wp", - "Weng": "wr", - "Yu": "yv", - "Yue": "yy", - "Yuan": "yr", - "Yun": "yw", - "Yong": "yl", - "Ba": "ba", - "Bai": "bj", - "Ban": "bd", - "Bang": "bf", - "Bao": "bs", - "Bei": "bw", - "Ben": "bk", - "Beng": "bh", - "Bi": "bi", - "Bian": "bm", - "Biang": "bx", - "Biao": "bp", - "Bie": "bc", - "Bin": "bb", - "Bing": "bg", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "cj", - "Can": "cd", - "Cang": "cf", - "Cao": "cs", - "Ce": "ce", - "Cen": "ck", - "Ceng": "ch", - "Cha": "ja", - "Chai": "jj", - "Chan": "jd", - "Chang": "jf", - "Chao": "js", - "Che": "je", - "Chen": "jk", - "Cheng": "jh", - "Chi": "wi", - "Chong": "wl", - "Chou": "jt", - "Chu": "ju", - "Chua": "wx", - "Chuai": "wg", - "Chuan": "wr", - "Chuang": "wn", - "Chui": "wy", - "Chun": "jz", - "Chuo": "jo", - "Ci": "ci", - "Cong": "cl", - "Cou": "ct", - "Cu": "cu", - "Cuan": "cr", - "Cui": "cy", - "Cun": "cz", - "Cuo": "co", - "Da": "da", - "Dai": "dj", - "Dan": "dd", - "Dang": "df", - "Dao": "ds", - "De": "de", - "Dei": "dw", - "Den": "dk", - "Deng": "dh", - "Di": "di", - "Dia": "dx", - "Dian": "dm", - "Diao": "dp", - "Die": "dc", - "Ding": "dg", - "Diu": "dq", - "Dong": "dl", - "Dou": "dt", - "Du": "du", - "Duan": "dr", - "Dui": "dy", - "Dun": "dz", - "Duo": "do", - "Fa": "fs", - "Fan": "ff", - "Fang": "fp", - "Fei": "fw", - "Fen": "fn", - "Feng": "fr", - "Fiao": "fp", - "Fo": "fl", - "Fou": "fd", - "Fu": "fl", - "Ga": "ga", - "Gai": "gj", - "Gan": "gd", - "Gang": "gf", - "Gao": "gs", - "Ge": "ge", - "Gei": "gw", - "Gen": "gk", - "Geng": "gh", - "Gong": "gl", - "Gou": "gt", - "Gu": "gu", - "Gua": "gx", - "Guai": "gg", - "Guan": "gr", - "Guang": "gn", - "Gui": "gy", - "Gun": "gz", - "Guo": "go", - "Ha": "ha", - "Hai": "hj", - "Han": "hd", - "Hang": "hf", - "Hao": "hs", - "He": "he", - "Hei": "hw", - "Hen": "hk", - "Heng": "hh", - "Hong": "hl", - "Hou": "ht", - "Hu": "hu", - "Hua": "hx", - "Huai": "hg", - "Huan": "hr", - "Huang": "hn", - "Hui": "hy", - "Hun": "hz", - "Huo": "ho", - "Ji": "jk", - "Jia": "js", - "Jian": "jm", - "Jiang": "jn", - "Jiao": "jp", - "Jie": "jc", - "Jin": "jb", - "Jing": "jg", - "Jiong": "jy", - "Jiu": "jq", - "Ju": "jv", - "Juan": "jt", - "Jue": "jh", - "Jun": "jw", - "Ka": "ka", - "Kai": "kj", - "Kan": "kd", - "Kang": "kf", - "Kao": "ks", - "Ke": "ke", - "Ken": "kk", - "Keng": "kh", - "Kong": "kl", - "Kou": "kt", - "Ku": "ku", - "Kua": "kx", - "Kuai": "kg", - "Kuan": "kr", - "Kuang": "kn", - "Kui": "ky", - "Kun": "kz", - "Kuo": "ko", - "La": "la", - "Lai": "lj", - "Lan": "ld", - "Lang": "lf", - "Lao": "ls", - "Le": "le", - "Lei": "lw", - "Leng": "lh", - "Li": "li", - "Lia": "lx", - "Lian": "lm", - "Liang": "ln", - "Liao": "lp", - "Lie": "lc", - "Lin": "lb", - "Ling": "lg", - "Liu": "lq", - "Lo": "ll", - "Long": "ll", - "Lou": "lt", - "Lu": "lu", - "Luan": "lr", - "Lun": "lz", - "Luo": "lo", - "Ma": "ma", - "Mai": "mj", - "Man": "md", - "Mang": "mf", - "Mao": "ms", - "Me": "me", - "Mei": "mw", - "Men": "mk", - "Meng": "mh", - "Mi": "mi", - "Mian": "mm", - "Miao": "mp", - "Mie": "mc", - "Min": "mb", - "Ming": "mg", - "Miu": "mq", - "Mo": "mo", - "Mou": "mt", - "Mu": "mu", - "Na": "na", - "Nai": "nj", - "Nan": "nd", - "Nang": "nf", - "Nao": "ns", - "Ne": "ne", - "Nei": "nw", - "Nen": "nk", - "Neng": "nh", - "Ni": "ni", - "Nian": "nm", - "Niang": "nn", - "Niao": "np", - "Nie": "nc", - "Nin": "nb", - "Ning": "ng", - "Niu": "nq", - "Nong": "nl", - "Nou": "nt", - "Nu": "nu", - "Nuan": "nr", - "Nun": "nz", - "Nuo": "no", - "Pa": "pa", - "Pai": "pj", - "Pan": "pd", - "Pang": "pf", - "Pao": "ps", - "Pei": "pw", - "Pen": "pk", - "Peng": "ph", - "Pi": "pi", - "Pian": "pm", - "Piao": "pp", - "Pie": "pc", - "Pin": "pb", - "Ping": "pg", - "Po": "po", - "Pou": "pt", - "Pu": "pu", - "Qi": "qk", - "Qia": "qs", - "Qian": "qm", - "Qiang": "qx", - "Qiao": "qp", - "Qie": "qc", - "Qin": "qb", - "Qing": "qg", - "Qiong": "qy", - "Qiu": "qq", - "Qu": "qv", - "Quan": "qt", - "Que": "qh", - "Qun": "qw", - "Ran": "rd", - "Rang": "rf", - "Rao": "rs", - "Re": "re", - "Ren": "rk", - "Reng": "rh", - "Ri": "ri", - "Rong": "rl", - "Rou": "rt", - "Ru": "ru", - "Rua": "rx", - "Ruan": "rr", - "Rui": "ry", - "Run": "rz", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sj", - "San": "sd", - "Sang": "sf", - "Sao": "ss", - "Se": "se", - "Sen": "sk", - "Seng": "sh", - "Sha": "ea", - "Shai": "ej", - "Shan": "ed", - "Shang": "ef", - "Shao": "es", - "She": "ee", - "Shei": "ew", - "Shen": "ek", - "Sheng": "eh", - "Shi": "ei", - "Shou": "et", - "Shu": "eu", - "Shua": "ex", - "Shuai": "eg", - "Shuan": "er", - "Shuang": "en", - "Shui": "ey", - "Shun": "ez", - "Shuo": "eo", - "Si": "si", - "Song": "sl", - "Sou": "st", - "Su": "su", - "Suan": "sr", - "Sui": "sy", - "Sun": "sz", - "Suo": "so", - "Ta": "ta", - "Tai": "tj", - "Tan": "td", - "Tang": "tf", - "Tao": "ts", - "Te": "te", - "Tei": "tw", - "Teng": "th", - "Ti": "ti", - "Tian": "tm", - "Tiao": "tp", - "Tie": "tc", - "Ting": "tg", - "Tong": "tl", - "Tou": "tt", - "Tu": "tu", - "Tuan": "tr", - "Tui": "ty", - "Tun": "tz", - "Tuo": "to", - "Xi": "xi", - "Xia": "xx", - "Xian": "xm", - "Xiang": "xn", - "Xiao": "xp", - "Xie": "xc", - "Xin": "xb", - "Xing": "xg", - "Xiong": "xl", - "Xiu": "xq", - "Xu": "xv", - "Xuan": "xr", - "Xue": "xy", - "Xun": "xw", - "Za": "za", - "Zai": "zj", - "Zan": "zd", - "Zang": "zf", - "Zao": "zs", - "Ze": "ze", - "Zei": "zw", - "Zen": "zk", - "Zeng": "zh", - "Zha": "qa", - "Zhai": "fj", - "Zhan": "qd", - "Zhang": "qf", - "Zhao": "fs", - "Zhe": "fe", - "Zhen": "qk", - "Zheng": "qh", - "Zhi": "fi", - "Zhong": "fy", - "Zhou": "qt", - "Zhu": "qu", - "Zhua": "fx", - "Zhuai": "fg", - "Zhuan": "fr", - "Zhuang": "fn", - "Zhui": "fy", - "Zhun": "fz", - "Zhuo": "qo", - "Zi": "zi", - "Zong": "zl", - "Zou": "zt", - "Zu": "zu", - "Zuan": "zr", - "Zui": "zy", - "Zun": "zz", - "Zuo": "zo" - }, - "DaNiu": { - "Lv": "lv", - "Lve": "lx", - "Lue": "lx", - "Nv": "nv", - "Nve": "nx", - "Nue": "nx", - "A": "ea", - "O": "eo", - "E": "ee", - "Ai": "eh", - "Ei": "ew", - "Ao": "es", - "Ou": "er", - "An": "ed", - "En": "ek", - "Ang": "ef", - "Eng": "ej", - "Er": "eu", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "ys", - "You": "yr", - "Yan": "yd", - "Yin": "yb", - "Yang": "yf", - "Ying": "yg", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wh", - "Wei": "ww", - "Wan": "wd", - "Wen": "wk", - "Wang": "wf", - "Weng": "wj", - "Yu": "yu", - "Yue": "yh", - "Yuan": "yj", - "Yun": "yw", - "Yong": "yl", - "Ba": "ba", - "Bai": "bh", - "Ban": "bd", - "Bang": "bf", - "Bao": "bs", - "Bei": "bw", - "Ben": "bk", - "Beng": "bj", - "Bi": "bi", - "Bian": "bc", - "Biang": "bn", - "Biao": "bm", - "Bie": "bp", - "Bin": "bb", - "Bing": "bg", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "ch", - "Can": "cd", - "Cang": "cf", - "Cao": "cs", - "Ce": "ce", - "Cen": "ck", - "Ceng": "cj", - "Cha": "ia", - "Chai": "ih", - "Chan": "id", - "Chang": "if", - "Chao": "is", - "Che": "ie", - "Chen": "ik", - "Cheng": "ij", - "Chi": "ii", - "Chong": "il", - "Chou": "ir", - "Chu": "iu", - "Chua": "iq", - "Chuai": "ig", - "Chuan": "iz", - "Chuang": "ix", - "Chui": "in", - "Chun": "iy", - "Chuo": "io", - "Ci": "ci", - "Cong": "cl", - "Cou": "cr", - "Cu": "cu", - "Cuan": "cz", - "Cui": "cn", - "Cun": "cy", - "Cuo": "co", - "Da": "da", - "Dai": "dh", - "Dan": "dd", - "Dang": "df", - "Dao": "ds", - "De": "de", - "Dei": "dw", - "Den": "dk", - "Deng": "dj", - "Di": "di", - "Dia": "dk", - "Dian": "dc", - "Diao": "dm", - "Die": "dp", - "Ding": "dg", - "Diu": "dt", - "Dong": "dl", - "Dou": "dr", - "Du": "du", - "Duan": "dz", - "Dui": "dn", - "Dun": "dy", - "Duo": "do", - "Fa": "fa", - "Fan": "fd", - "Fang": "ff", - "Fei": "fw", - "Fen": "fk", - "Feng": "fj", - "Fiao": "fm", - "Fo": "fo", - "Fou": "fr", - "Fu": "fu", - "Ga": "ga", - "Gai": "gh", - "Gan": "gd", - "Gang": "gf", - "Gao": "gs", - "Ge": "ge", - "Gei": "gw", - "Gen": "gk", - "Geng": "gj", - "Gong": "gl", - "Gou": "gr", - "Gu": "gu", - "Gua": "gq", - "Guai": "gg", - "Guan": "gz", - "Guang": "gx", - "Gui": "gn", - "Gun": "gy", - "Guo": "go", - "Ha": "ha", - "Hai": "hh", - "Han": "hd", - "Hang": "hf", - "Hao": "hs", - "He": "he", - "Hei": "hw", - "Hen": "hk", - "Heng": "hj", - "Hong": "hl", - "Hou": "hr", - "Hu": "hu", - "Hua": "hq", - "Huai": "hg", - "Huan": "hz", - "Huang": "hx", - "Hui": "hn", - "Hun": "hy", - "Huo": "ho", - "Ji": "ji", - "Jia": "jk", - "Jian": "jc", - "Jiang": "jn", - "Jiao": "jm", - "Jie": "jp", - "Jin": "jb", - "Jing": "jg", - "Jiong": "jl", - "Jiu": "jt", - "Ju": "ju", - "Juan": "jj", - "Jue": "jh", - "Jun": "jw", - "Ka": "ka", - "Kai": "kh", - "Kan": "kd", - "Kang": "kf", - "Kao": "ks", - "Ke": "ke", - "Ken": "kk", - "Keng": "kj", - "Kong": "kl", - "Kou": "kr", - "Ku": "ku", - "Kua": "kq", - "Kuai": "kg", - "Kuan": "kz", - "Kuang": "kx", - "Kui": "kn", - "Kun": "ky", - "Kuo": "ko", - "La": "la", - "Lai": "lh", - "Lan": "ld", - "Lang": "lf", - "Lao": "ls", - "Le": "le", - "Lei": "lw", - "Leng": "lj", - "Li": "li", - "Lia": "lk", - "Lian": "lc", - "Liang": "ln", - "Liao": "lm", - "Lie": "lp", - "Lin": "lb", - "Ling": "lg", - "Liu": "lt", - "Lo": "lo", - "Long": "ll", - "Lou": "lr", - "Lu": "lu", - "Luan": "lz", - "Lun": "ly", - "Luo": "lo", - "Ma": "ma", - "Mai": "mh", - "Man": "md", - "Mang": "mf", - "Mao": "ms", - "Me": "me", - "Mei": "mw", - "Men": "mk", - "Meng": "mj", - "Mi": "mi", - "Mian": "mc", - "Miao": "mm", - "Mie": "mp", - "Min": "mb", - "Ming": "mg", - "Miu": "mt", - "Mo": "mo", - "Mou": "mr", - "Mu": "mu", - "Na": "na", - "Nai": "nh", - "Nan": "nd", - "Nang": "nf", - "Nao": "ns", - "Ne": "ne", - "Nei": "nw", - "Nen": "nk", - "Neng": "nj", - "Ni": "ni", - "Nian": "nc", - "Niang": "nn", - "Niao": "nm", - "Nie": "np", - "Nin": "nb", - "Ning": "ng", - "Niu": "nt", - "Nong": "nl", - "Nou": "nr", - "Nu": "nu", - "Nuan": "nz", - "Nun": "ny", - "Nuo": "no", - "Pa": "pa", - "Pai": "ph", - "Pan": "pd", - "Pang": "pf", - "Pao": "ps", - "Pei": "pw", - "Pen": "pk", - "Peng": "pj", - "Pi": "pi", - "Pian": "pc", - "Piao": "pm", - "Pie": "pp", - "Pin": "pb", - "Ping": "pg", - "Po": "po", - "Pou": "pr", - "Pu": "pu", - "Qi": "qi", - "Qia": "qk", - "Qian": "qc", - "Qiang": "qn", - "Qiao": "qm", - "Qie": "qp", - "Qin": "qb", - "Qing": "qg", - "Qiong": "ql", - "Qiu": "qt", - "Qu": "qu", - "Quan": "qj", - "Que": "qh", - "Qun": "qw", - "Ran": "rd", - "Rang": "rf", - "Rao": "rs", - "Re": "re", - "Ren": "rk", - "Reng": "rj", - "Ri": "ri", - "Rong": "rl", - "Rou": "rr", - "Ru": "ru", - "Rua": "rq", - "Ruan": "rz", - "Rui": "rn", - "Run": "ry", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sh", - "San": "sd", - "Sang": "sf", - "Sao": "ss", - "Se": "se", - "Sen": "sk", - "Seng": "sj", - "Sha": "ua", - "Shai": "uh", - "Shan": "ud", - "Shang": "uf", - "Shao": "us", - "She": "ue", - "Shei": "uw", - "Shen": "uk", - "Sheng": "uj", - "Shi": "ui", - "Shou": "ur", - "Shu": "uu", - "Shua": "uq", - "Shuai": "ug", - "Shuan": "uz", - "Shuang": "ux", - "Shui": "un", - "Shun": "uy", - "Shuo": "uo", - "Si": "si", - "Song": "sl", - "Sou": "sr", - "Su": "su", - "Suan": "sz", - "Sui": "sn", - "Sun": "sy", - "Suo": "so", - "Ta": "ta", - "Tai": "th", - "Tan": "td", - "Tang": "tf", - "Tao": "ts", - "Te": "te", - "Tei": "tw", - "Teng": "tj", - "Ti": "ti", - "Tian": "tc", - "Tiao": "tm", - "Tie": "tp", - "Ting": "tg", - "Tong": "tl", - "Tou": "tr", - "Tu": "tu", - "Tuan": "tz", - "Tui": "tn", - "Tun": "ty", - "Tuo": "to", - "Xi": "xi", - "Xia": "xk", - "Xian": "xc", - "Xiang": "xn", - "Xiao": "xm", - "Xie": "xp", - "Xin": "xb", - "Xing": "xg", - "Xiong": "xl", - "Xiu": "xt", - "Xu": "xu", - "Xuan": "xj", - "Xue": "xh", - "Xun": "xw", - "Za": "za", - "Zai": "zh", - "Zan": "zd", - "Zang": "zf", - "Zao": "zs", - "Ze": "ze", - "Zei": "zw", - "Zen": "zk", - "Zeng": "zj", - "Zha": "aa", - "Zhai": "ah", - "Zhan": "ad", - "Zhang": "af", - "Zhao": "as", - "Zhe": "ae", - "Zhen": "ak", - "Zheng": "aj", - "Zhi": "ai", - "Zhong": "al", - "Zhou": "ar", - "Zhu": "au", - "Zhua": "aq", - "Zhuai": "ag", - "Zhuan": "az", - "Zhuang": "ax", - "Zhui": "an", - "Zhun": "ay", - "Zhuo": "ao", - "Zi": "zi", - "Zong": "zl", - "Zou": "zr", - "Zu": "zu", - "Zuan": "zz", - "Zui": "zn", - "Zun": "zy", - "Zuo": "zo" - }, - "XiaoLang": { - "Lv": "lx", - "Lve": "lb", - "Lue": "lb", - "Nv": "nx", - "Nve": "nb", - "Nue": "nb", - "A": "aa", - "O": "oo", - "E": "uu", - "Ai": "ai", - "Ei": "ui", - "Ao": "ao", - "Ou": "ou", - "An": "an", - "En": "un", - "Ang": "ah", - "Eng": "un", - "Er": "ur", - "Yi": "yi", - "Ya": "ya", - "Yo": "yo", - "Ye": "ye", - "Yao": "ys", - "You": "yr", - "Yan": "yj", - "Yin": "yd", - "Yang": "yh", - "Ying": "yv", - "Wu": "wu", - "Wa": "wa", - "Wo": "wo", - "Wai": "wk", - "Wei": "ww", - "Wan": "wj", - "Wen": "wm", - "Wang": "wh", - "Weng": "wn", - "Yu": "yu", - "Yue": "yb", - "Yuan": "yg", - "Yun": "yy", - "Yong": "yl", - "Ba": "ba", - "Bai": "bk", - "Ban": "bj", - "Bang": "bh", - "Bao": "bs", - "Bei": "bw", - "Ben": "bm", - "Beng": "bn", - "Bi": "bi", - "Bian": "bf", - "Biang": "bm", - "Biao": "bc", - "Bie": "bp", - "Bin": "bd", - "Bing": "bv", - "Bo": "bo", - "Bu": "bu", - "Ca": "ca", - "Cai": "ck", - "Can": "cj", - "Cang": "ch", - "Cao": "cs", - "Ce": "ce", - "Cen": "cm", - "Ceng": "cn", - "Cha": "ia", - "Chai": "ik", - "Chan": "ij", - "Chang": "ih", - "Chao": "is", - "Che": "ie", - "Chen": "im", - "Cheng": "in", - "Chi": "ii", - "Chong": "il", - "Chou": "ir", - "Chu": "iu", - "Chua": "if", - "Chuai": "iv", - "Chuan": "ig", - "Chuang": "iz", - "Chui": "id", - "Chun": "iy", - "Chuo": "io", - "Ci": "ci", - "Cong": "cl", - "Cou": "cr", - "Cu": "cu", - "Cuan": "cg", - "Cui": "cd", - "Cun": "cy", - "Cuo": "co", - "Da": "da", - "Dai": "dk", - "Dan": "dj", - "Dang": "dh", - "Dao": "ds", - "De": "de", - "Dei": "dw", - "Den": "dm", - "Deng": "dn", - "Di": "di", - "Dia": "dk", - "Dian": "df", - "Diao": "dc", - "Die": "dp", - "Ding": "dv", - "Diu": "dt", - "Dong": "dl", - "Dou": "dr", - "Du": "du", - "Duan": "dg", - "Dui": "dd", - "Dun": "dy", - "Duo": "do", - "Fa": "fa", - "Fan": "fj", - "Fang": "fh", - "Fei": "fw", - "Fen": "fm", - "Feng": "fn", - "Fiao": "fc", - "Fo": "fo", - "Fou": "fr", - "Fu": "fu", - "Ga": "ga", - "Gai": "gk", - "Gan": "gj", - "Gang": "gh", - "Gao": "gs", - "Ge": "ge", - "Gei": "gw", - "Gen": "gm", - "Geng": "gn", - "Gong": "gl", - "Gou": "gr", - "Gu": "gu", - "Gua": "gf", - "Guai": "gv", - "Guan": "gg", - "Guang": "gz", - "Gui": "gd", - "Gun": "gy", - "Guo": "go", - "Ha": "ha", - "Hai": "hk", - "Han": "hj", - "Hang": "hh", - "Hao": "hs", - "He": "he", - "Hei": "hw", - "Hen": "hm", - "Heng": "hn", - "Hong": "hl", - "Hou": "hr", - "Hu": "hu", - "Hua": "hf", - "Huai": "hv", - "Huan": "hg", - "Huang": "hz", - "Hui": "hd", - "Hun": "hy", - "Huo": "ho", - "Ji": "ji", - "Jia": "jk", - "Jian": "jf", - "Jiang": "jm", - "Jiao": "jc", - "Jie": "jp", - "Jin": "jd", - "Jing": "jv", - "Jiong": "jj", - "Jiu": "jt", - "Ju": "ju", - "Juan": "jg", - "Jue": "jb", - "Jun": "jy", - "Ka": "ka", - "Kai": "kk", - "Kan": "kj", - "Kang": "kh", - "Kao": "ks", - "Ke": "ke", - "Ken": "km", - "Keng": "kn", - "Kong": "kl", - "Kou": "kr", - "Ku": "ku", - "Kua": "kf", - "Kuai": "kv", - "Kuan": "kg", - "Kuang": "kz", - "Kui": "kd", - "Kun": "ky", - "Kuo": "ko", - "La": "la", - "Lai": "lk", - "Lan": "lj", - "Lang": "lh", - "Lao": "ls", - "Le": "le", - "Lei": "lw", - "Leng": "ln", - "Li": "li", - "Lia": "lk", - "Lian": "lf", - "Liang": "lm", - "Liao": "lc", - "Lie": "lp", - "Lin": "ld", - "Ling": "lv", - "Liu": "lt", - "Lo": "lo", - "Long": "ll", - "Lou": "lr", - "Lu": "lu", - "Luan": "lg", - "Lun": "ly", - "Luo": "lo", - "Ma": "ma", - "Mai": "mk", - "Man": "mj", - "Mang": "mh", - "Mao": "ms", - "Me": "me", - "Mei": "mw", - "Men": "mm", - "Meng": "mn", - "Mi": "mi", - "Mian": "mf", - "Miao": "mc", - "Mie": "mp", - "Min": "md", - "Ming": "mv", - "Miu": "mt", - "Mo": "mo", - "Mou": "mr", - "Mu": "mu", - "Na": "na", - "Nai": "nk", - "Nan": "nj", - "Nang": "nh", - "Nao": "ns", - "Ne": "ne", - "Nei": "nw", - "Nen": "nm", - "Neng": "nn", - "Ni": "ni", - "Nian": "nf", - "Niang": "nm", - "Niao": "nc", - "Nie": "np", - "Nin": "nd", - "Ning": "nv", - "Niu": "nt", - "Nong": "nl", - "Nou": "nr", - "Nu": "nu", - "Nuan": "ng", - "Nun": "ny", - "Nuo": "no", - "Pa": "pa", - "Pai": "pk", - "Pan": "pj", - "Pang": "ph", - "Pao": "ps", - "Pei": "pw", - "Pen": "pm", - "Peng": "pn", - "Pi": "pi", - "Pian": "pf", - "Piao": "pc", - "Pie": "pp", - "Pin": "pd", - "Ping": "pv", - "Po": "po", - "Pou": "pr", - "Pu": "pu", - "Qi": "qi", - "Qia": "qk", - "Qian": "qf", - "Qiang": "qm", - "Qiao": "qc", - "Qie": "qp", - "Qin": "qd", - "Qing": "qv", - "Qiong": "qj", - "Qiu": "qt", - "Qu": "qu", - "Quan": "qg", - "Que": "qb", - "Qun": "qy", - "Ran": "rj", - "Rang": "rh", - "Rao": "rs", - "Re": "re", - "Ren": "rm", - "Reng": "rn", - "Ri": "ri", - "Rong": "rl", - "Rou": "rr", - "Ru": "ru", - "Rua": "rf", - "Ruan": "rg", - "Rui": "rd", - "Run": "ry", - "Ruo": "ro", - "Sa": "sa", - "Sai": "sk", - "San": "sj", - "Sang": "sh", - "Sao": "ss", - "Se": "se", - "Sen": "sm", - "Seng": "sn", - "Sha": "va", - "Shai": "vk", - "Shan": "vj", - "Shang": "vh", - "Shao": "vs", - "She": "ve", - "Shei": "vw", - "Shen": "vm", - "Sheng": "vn", - "Shi": "vi", - "Shou": "vr", - "Shu": "vu", - "Shua": "vf", - "Shuai": "vv", - "Shuan": "vg", - "Shuang": "vz", - "Shui": "vd", - "Shun": "vy", - "Shuo": "vo", - "Si": "si", - "Song": "sl", - "Sou": "sr", - "Su": "su", - "Suan": "sg", - "Sui": "sd", - "Sun": "sy", - "Suo": "so", - "Ta": "ta", - "Tai": "tk", - "Tan": "tj", - "Tang": "th", - "Tao": "ts", - "Te": "te", - "Tei": "tw", - "Teng": "tn", - "Ti": "ti", - "Tian": "tf", - "Tiao": "tc", - "Tie": "tp", - "Ting": "tv", - "Tong": "tl", - "Tou": "tr", - "Tu": "tu", - "Tuan": "tg", - "Tui": "td", - "Tun": "ty", - "Tuo": "to", - "Xi": "xi", - "Xia": "xk", - "Xian": "xf", - "Xiang": "xm", - "Xiao": "xc", - "Xie": "xp", - "Xin": "xd", - "Xing": "xv", - "Xiong": "xj", - "Xiu": "xt", - "Xu": "xu", - "Xuan": "xg", - "Xue": "xb", - "Xun": "xy", - "Za": "za", - "Zai": "zk", - "Zan": "zj", - "Zang": "zh", - "Zao": "zs", - "Ze": "ze", - "Zei": "zw", - "Zen": "zm", - "Zeng": "zn", - "Zha": "ea", - "Zhai": "ek", - "Zhan": "ej", - "Zhang": "eh", - "Zhao": "es", - "Zhe": "ee", - "Zhen": "em", - "Zheng": "en", - "Zhi": "ei", - "Zhong": "el", - "Zhou": "er", - "Zhu": "eu", - "Zhua": "ef", - "Zhuai": "ev", - "Zhuan": "eg", - "Zhuang": "ez", - "Zhui": "ed", - "Zhun": "ey", - "Zhuo": "eo", - "Zi": "zi", - "Zong": "zl", - "Zou": "zr", - "Zu": "zu", - "Zuan": "zg", - "Zui": "zd", - "Zun": "zy", - "Zuo": "zo" - } -} \ No newline at end of file +{"XiaoHe":{"Lv":"lv","Lve":"lt","Lue":"lt","Nv":"nv","Nve":"nt","Nue":"nt","A":"aa","O":"oo","E":"ee","Ai":"ai","Ei":"ei","Ao":"ao","Ou":"ou","An":"an","En":"en","Ang":"ah","Eng":"eg","Er":"er","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yc","You":"yz","Yan":"yj","Yin":"yb","Yang":"yh","Ying":"yk","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wd","Wei":"ww","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yy","Yong":"ys","Ba":"ba","Bai":"bd","Ban":"bj","Bang":"bh","Bao":"bc","Bei":"bw","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bl","Biao":"bn","Bie":"bp","Bin":"bb","Bing":"bk","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cd","Can":"cj","Cang":"ch","Cao":"cc","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"id","Chan":"ij","Chang":"ih","Chao":"ic","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"iz","Chu":"iu","Chua":"ix","Chuai":"ik","Chuan":"ir","Chuang":"il","Chui":"iv","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cz","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cy","Cuo":"co","Da":"da","Dai":"dd","Dan":"dj","Dang":"dh","Dao":"dc","De":"de","Dei":"dw","Den":"df","Deng":"dg","Di":"di","Dia":"dx","Dian":"dm","Diao":"dn","Die":"dp","Ding":"dk","Diu":"dq","Dong":"ds","Dou":"dz","Du":"du","Duan":"dr","Dui":"dv","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fw","Fen":"ff","Feng":"fg","Fiao":"fn","Fo":"fo","Fou":"fz","Fu":"fu","Ga":"ga","Gai":"gd","Gan":"gj","Gang":"gh","Gao":"gc","Ge":"ge","Gei":"gw","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gz","Gu":"gu","Gua":"gx","Guai":"gk","Guan":"gr","Guang":"gl","Gui":"gv","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hd","Han":"hj","Hang":"hh","Hao":"hc","He":"he","Hei":"hw","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hz","Hu":"hu","Hua":"hx","Huai":"hk","Huan":"hr","Huang":"hl","Hui":"hv","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jx","Jian":"jm","Jiang":"jl","Jiao":"jn","Jie":"jp","Jin":"jb","Jing":"jk","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jy","Ka":"ka","Kai":"kd","Kan":"kj","Kang":"kh","Kao":"kc","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kz","Ku":"ku","Kua":"kx","Kuai":"kk","Kuan":"kr","Kuang":"kl","Kui":"kv","Kun":"ky","Kuo":"ko","La":"la","Lai":"ld","Lan":"lj","Lang":"lh","Lao":"lc","Le":"le","Lei":"lw","Leng":"lg","Li":"li","Lia":"lx","Lian":"lm","Liang":"ll","Liao":"ln","Lie":"lp","Lin":"lb","Ling":"lk","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lz","Lu":"lu","Luan":"lr","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"md","Man":"mj","Mang":"mh","Mao":"mc","Me":"me","Mei":"mw","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mn","Mie":"mp","Min":"mb","Ming":"mk","Miu":"mq","Mo":"mo","Mou":"mz","Mu":"mu","Na":"na","Nai":"nd","Nan":"nj","Nang":"nh","Nao":"nc","Ne":"ne","Nei":"nw","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nl","Niao":"nn","Nie":"np","Nin":"nb","Ning":"nk","Niu":"nq","Nong":"ns","Nou":"nz","Nu":"nu","Nuan":"nr","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"pd","Pan":"pj","Pang":"ph","Pao":"pc","Pei":"pw","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pn","Pie":"pp","Pin":"pb","Ping":"pk","Po":"po","Pou":"pz","Pu":"pu","Qi":"qi","Qia":"qx","Qian":"qm","Qiang":"ql","Qiao":"qn","Qie":"qp","Qin":"qb","Qing":"qk","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qy","Ran":"rj","Rang":"rh","Rao":"rc","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rz","Ru":"ru","Rua":"rx","Ruan":"rr","Rui":"rv","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sd","San":"sj","Sang":"sh","Sao":"sc","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ud","Shan":"uj","Shang":"uh","Shao":"uc","She":"ue","Shei":"uw","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"uz","Shu":"uu","Shua":"ux","Shuai":"uk","Shuan":"ur","Shuang":"ul","Shui":"uv","Shun":"uy","Shuo":"uo","Si":"si","Song":"ss","Sou":"sz","Su":"su","Suan":"sr","Sui":"sv","Sun":"sy","Suo":"so","Ta":"ta","Tai":"td","Tan":"tj","Tang":"th","Tao":"tc","Te":"te","Tei":"tw","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tn","Tie":"tp","Ting":"tk","Tong":"ts","Tou":"tz","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xm","Xiang":"xl","Xiao":"xn","Xie":"xp","Xin":"xb","Xing":"xk","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xy","Za":"za","Zai":"zd","Zan":"zj","Zang":"zh","Zao":"zc","Ze":"ze","Zei":"zw","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vd","Zhan":"vj","Zhang":"vh","Zhao":"vc","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vz","Zhu":"vu","Zhua":"vx","Zhuai":"vk","Zhuan":"vr","Zhuang":"vl","Zhui":"vv","Zhun":"vy","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zz","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zy","Zuo":"zo"},"ZiRanMa":{"Lv":"lv","Lve":"lt","Lue":"lt","Nv":"nv","Nve":"nt","Nue":"nt","A":"aa","O":"oo","E":"ee","Ai":"ai","Ei":"ei","Ao":"ao","Ou":"ou","An":"an","En":"en","Ang":"ah","Eng":"eg","Er":"er","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yn","Yang":"yh","Ying":"yy","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wz","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yp","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bz","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bd","Biao":"bc","Bie":"bx","Bin":"bn","Bing":"by","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"il","Chan":"ij","Chang":"ih","Chao":"ik","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"ib","Chu":"iu","Chua":"iw","Chuai":"iy","Chuan":"ir","Chuang":"id","Chui":"iv","Chun":"ip","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cp","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dz","Den":"df","Deng":"dg","Di":"di","Dia":"dw","Dian":"dm","Diao":"dc","Die":"dx","Ding":"dy","Diu":"dq","Dong":"ds","Dou":"db","Du":"du","Duan":"dr","Dui":"dv","Dun":"dp","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fz","Fen":"ff","Feng":"fg","Fiao":"fc","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gz","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gw","Guai":"gy","Guan":"gr","Guang":"gd","Gui":"gv","Gun":"gp","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hz","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hw","Huai":"hy","Huan":"hr","Huang":"hd","Hui":"hv","Hun":"hp","Huo":"ho","Ji":"ji","Jia":"jw","Jian":"jm","Jiang":"jd","Jiao":"jc","Jie":"jx","Jin":"jn","Jing":"jy","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jp","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kw","Kuai":"ky","Kuan":"kr","Kuang":"kd","Kui":"kv","Kun":"kp","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lz","Leng":"lg","Li":"li","Lia":"lw","Lian":"lm","Liang":"ld","Liao":"lc","Lie":"lx","Lin":"ln","Ling":"ly","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lr","Lun":"lp","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mz","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mc","Mie":"mx","Min":"mn","Ming":"my","Miu":"mq","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nz","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nd","Niao":"nc","Nie":"nx","Nin":"nn","Ning":"ny","Niu":"nq","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"nr","Nun":"np","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pz","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pc","Pie":"px","Pin":"pn","Ping":"py","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qw","Qian":"qm","Qiang":"qd","Qiao":"qc","Qie":"qx","Qin":"qn","Qing":"qy","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qp","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rw","Ruan":"rr","Rui":"rv","Run":"rp","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ul","Shan":"uj","Shang":"uh","Shao":"uk","She":"ue","Shei":"uz","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"ub","Shu":"uu","Shua":"uw","Shuai":"uy","Shuan":"ur","Shuang":"ud","Shui":"uv","Shun":"up","Shuo":"uo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sr","Sui":"sv","Sun":"sp","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tz","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tc","Tie":"tx","Ting":"ty","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"tp","Tuo":"to","Xi":"xi","Xia":"xw","Xian":"xm","Xiang":"xd","Xiao":"xc","Xie":"xx","Xin":"xn","Xing":"xy","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xp","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zz","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vl","Zhan":"vj","Zhang":"vh","Zhao":"vk","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vb","Zhu":"vu","Zhua":"vw","Zhuai":"vy","Zhuan":"vr","Zhuang":"vd","Zhui":"vv","Zhun":"vp","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zp","Zuo":"zo"},"WeiRuan":{"Lv":"ly","Lve":"lt","Lue":"lt","Nv":"ny","Nve":"nt","Nue":"nt","A":"oa","O":"oo","E":"oe","Ai":"ol","Ei":"oz","Ao":"ok","Ou":"ob","An":"oj","En":"of","Ang":"oh","Eng":"og","Er":"or","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yn","Yang":"yh","Ying":"y;","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wz","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yp","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bz","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bd","Biao":"bc","Bie":"bx","Bin":"bn","Bing":"b;","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"il","Chan":"ij","Chang":"ih","Chao":"ik","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"ib","Chu":"iu","Chua":"iw","Chuai":"iy","Chuan":"ir","Chuang":"id","Chui":"iv","Chun":"ip","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cp","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dz","Den":"df","Deng":"dg","Di":"di","Dia":"dw","Dian":"dm","Diao":"dc","Die":"dx","Ding":"d;","Diu":"dq","Dong":"ds","Dou":"db","Du":"du","Duan":"dr","Dui":"dv","Dun":"dp","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fz","Fen":"ff","Feng":"fg","Fiao":"fc","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gz","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gw","Guai":"gy","Guan":"gr","Guang":"gd","Gui":"gv","Gun":"gp","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hz","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hw","Huai":"hy","Huan":"hr","Huang":"hd","Hui":"hv","Hun":"hp","Huo":"ho","Ji":"ji","Jia":"jw","Jian":"jm","Jiang":"jd","Jiao":"jc","Jie":"jx","Jin":"jn","Jing":"j;","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jp","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kw","Kuai":"ky","Kuan":"kr","Kuang":"kd","Kui":"kv","Kun":"kp","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lz","Leng":"lg","Li":"li","Lia":"lw","Lian":"lm","Liang":"ld","Liao":"lc","Lie":"lx","Lin":"ln","Ling":"l;","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lr","Lun":"lp","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mz","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mc","Mie":"mx","Min":"mn","Ming":"m;","Miu":"mq","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nz","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nd","Niao":"nc","Nie":"nx","Nin":"nn","Ning":"n;","Niu":"nq","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"nr","Nun":"np","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pz","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pc","Pie":"px","Pin":"pn","Ping":"p;","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qw","Qian":"qm","Qiang":"qd","Qiao":"qc","Qie":"qx","Qin":"qn","Qing":"q;","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qp","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rw","Ruan":"rr","Rui":"rv","Run":"rp","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ul","Shan":"uj","Shang":"uh","Shao":"uk","She":"ue","Shei":"uz","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"ub","Shu":"uu","Shua":"uw","Shuai":"uy","Shuan":"ur","Shuang":"ud","Shui":"uv","Shun":"up","Shuo":"uo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sr","Sui":"sv","Sun":"sp","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tz","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tc","Tie":"tx","Ting":"t;","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"tp","Tuo":"to","Xi":"xi","Xia":"xw","Xian":"xm","Xiang":"xd","Xiao":"xc","Xie":"xx","Xin":"xn","Xing":"x;","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xp","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zz","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vl","Zhan":"vj","Zhang":"vh","Zhao":"vk","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vb","Zhu":"vu","Zhua":"vw","Zhuai":"vy","Zhuan":"vr","Zhuang":"vd","Zhui":"vv","Zhun":"vp","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zp","Zuo":"zo"},"ZhiNengABC":{"Lv":"lv","Lve":"lm","Lue":"lm","Nv":"nv","Nve":"nm","Nue":"nm","A":"oa","O":"oo","E":"oe","Ai":"ol","Ei":"oq","Ao":"ok","Ou":"ob","An":"oj","En":"of","Ang":"oh","Eng":"og","Er":"or","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yc","Yang":"yh","Ying":"yy","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wq","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"ym","Yuan":"yp","Yun":"yn","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bq","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bw","Biang":"bt","Biao":"bz","Bie":"bx","Bin":"bc","Bing":"by","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ea","Chai":"el","Chan":"ej","Chang":"eh","Chao":"ek","Che":"ee","Chen":"ef","Cheng":"eg","Chi":"ei","Chong":"es","Chou":"eb","Chu":"eu","Chua":"ed","Chuai":"ec","Chuan":"ep","Chuang":"et","Chui":"em","Chun":"en","Chuo":"eo","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cp","Cui":"cm","Cun":"cn","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dq","Den":"df","Deng":"dg","Di":"di","Dia":"dd","Dian":"dw","Diao":"dz","Die":"dx","Ding":"dy","Diu":"dr","Dong":"ds","Dou":"db","Du":"du","Duan":"dp","Dui":"dm","Dun":"dn","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fq","Fen":"ff","Feng":"fg","Fiao":"fz","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gq","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gd","Guai":"gc","Guan":"gp","Guang":"gt","Gui":"gm","Gun":"gn","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hq","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hd","Huai":"hc","Huan":"hp","Huang":"ht","Hui":"hm","Hun":"hn","Huo":"ho","Ji":"ji","Jia":"jd","Jian":"jw","Jiang":"jt","Jiao":"jz","Jie":"jx","Jin":"jc","Jing":"jy","Jiong":"js","Jiu":"jr","Ju":"ju","Juan":"jp","Jue":"jm","Jun":"jn","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kd","Kuai":"kc","Kuan":"kp","Kuang":"kt","Kui":"km","Kun":"kn","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lq","Leng":"lg","Li":"li","Lia":"ld","Lian":"lw","Liang":"lt","Liao":"lz","Lie":"lx","Lin":"lc","Ling":"ly","Liu":"lr","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lp","Lun":"ln","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mq","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mw","Miao":"mz","Mie":"mx","Min":"mc","Ming":"my","Miu":"mr","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nq","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nw","Niang":"nt","Niao":"nz","Nie":"nx","Nin":"nc","Ning":"ny","Niu":"nr","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"np","Nun":"nn","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pq","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pw","Piao":"pz","Pie":"px","Pin":"pc","Ping":"py","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qd","Qian":"qw","Qiang":"qt","Qiao":"qz","Qie":"qx","Qin":"qc","Qing":"qy","Qiong":"qs","Qiu":"qr","Qu":"qu","Quan":"qp","Que":"qm","Qun":"qn","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rd","Ruan":"rp","Rui":"rm","Run":"rn","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"va","Shai":"vl","Shan":"vj","Shang":"vh","Shao":"vk","She":"ve","Shei":"vq","Shen":"vf","Sheng":"vg","Shi":"vi","Shou":"vb","Shu":"vu","Shua":"vd","Shuai":"vc","Shuan":"vp","Shuang":"vt","Shui":"vm","Shun":"vn","Shuo":"vo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sp","Sui":"sm","Sun":"sn","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tq","Teng":"tg","Ti":"ti","Tian":"tw","Tiao":"tz","Tie":"tx","Ting":"ty","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tp","Tui":"tm","Tun":"tn","Tuo":"to","Xi":"xi","Xia":"xd","Xian":"xw","Xiang":"xt","Xiao":"xz","Xie":"xx","Xin":"xc","Xing":"xy","Xiong":"xs","Xiu":"xr","Xu":"xu","Xuan":"xp","Xue":"xm","Xun":"xn","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zq","Zen":"zf","Zeng":"zg","Zha":"aa","Zhai":"al","Zhan":"aj","Zhang":"ah","Zhao":"ak","Zhe":"ae","Zhen":"af","Zheng":"ag","Zhi":"ai","Zhong":"as","Zhou":"ab","Zhu":"au","Zhua":"ad","Zhuai":"ac","Zhuan":"ap","Zhuang":"at","Zhui":"am","Zhun":"an","Zhuo":"ao","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zp","Zui":"zm","Zun":"zn","Zuo":"zo"},"ZiGuangPinYin":{"Lv":"lv","Lve":"ln","Lue":"ln","Nv":"nv","Nve":"nn","Nue":"nn","A":"oa","O":"oo","E":"oe","Ai":"op","Ei":"ok","Ao":"oq","Ou":"oz","An":"or","En":"ow","Ang":"os","Eng":"ot","Er":"oj","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yq","You":"yz","Yan":"yr","Yin":"yy","Yang":"ys","Ying":"yc","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wp","Wei":"wk","Wan":"wr","Wen":"ww","Wang":"ws","Weng":"wt","Yu":"yu","Yue":"yn","Yuan":"yl","Yun":"ym","Yong":"yh","Ba":"ba","Bai":"bp","Ban":"br","Bang":"bs","Bao":"bq","Bei":"bk","Ben":"bw","Beng":"bt","Bi":"bi","Bian":"bf","Biang":"bg","Biao":"bb","Bie":"bd","Bin":"by","Bing":"bc","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cp","Can":"cr","Cang":"cs","Cao":"cq","Ce":"ce","Cen":"cw","Ceng":"ct","Cha":"aa","Chai":"ap","Chan":"ar","Chang":"as","Chao":"aq","Che":"ae","Chen":"aw","Cheng":"at","Chi":"ai","Chong":"ah","Chou":"az","Chu":"au","Chua":"ax","Chuai":"ay","Chuan":"al","Chuang":"ag","Chui":"an","Chun":"am","Chuo":"ao","Ci":"ci","Cong":"ch","Cou":"cz","Cu":"cu","Cuan":"cl","Cui":"cn","Cun":"cm","Cuo":"co","Da":"da","Dai":"dp","Dan":"dr","Dang":"ds","Dao":"dq","De":"de","Dei":"dk","Den":"dw","Deng":"dt","Di":"di","Dia":"dx","Dian":"df","Diao":"db","Die":"dd","Ding":"dc","Diu":"dj","Dong":"dh","Dou":"dz","Du":"du","Duan":"dl","Dui":"dn","Dun":"dm","Duo":"do","Fa":"fa","Fan":"fr","Fang":"fs","Fei":"fk","Fen":"fw","Feng":"ft","Fiao":"fb","Fo":"fo","Fou":"fz","Fu":"fu","Ga":"ga","Gai":"gp","Gan":"gr","Gang":"gs","Gao":"gq","Ge":"ge","Gei":"gk","Gen":"gw","Geng":"gt","Gong":"gh","Gou":"gz","Gu":"gu","Gua":"gx","Guai":"gy","Guan":"gl","Guang":"gg","Gui":"gn","Gun":"gm","Guo":"go","Ha":"ha","Hai":"hp","Han":"hr","Hang":"hs","Hao":"hq","He":"he","Hei":"hk","Hen":"hw","Heng":"ht","Hong":"hh","Hou":"hz","Hu":"hu","Hua":"hx","Huai":"hy","Huan":"hl","Huang":"hg","Hui":"hn","Hun":"hm","Huo":"ho","Ji":"ji","Jia":"jx","Jian":"jf","Jiang":"jg","Jiao":"jb","Jie":"jd","Jin":"jy","Jing":"jc","Jiong":"jh","Jiu":"jj","Ju":"ju","Juan":"jl","Jue":"jn","Jun":"jm","Ka":"ka","Kai":"kp","Kan":"kr","Kang":"ks","Kao":"kq","Ke":"ke","Ken":"kw","Keng":"kt","Kong":"kh","Kou":"kz","Ku":"ku","Kua":"kx","Kuai":"ky","Kuan":"kl","Kuang":"kg","Kui":"kn","Kun":"km","Kuo":"ko","La":"la","Lai":"lp","Lan":"lr","Lang":"ls","Lao":"lq","Le":"le","Lei":"lk","Leng":"lt","Li":"li","Lia":"lx","Lian":"lf","Liang":"lg","Liao":"lb","Lie":"ld","Lin":"ly","Ling":"lc","Liu":"lj","Lo":"lo","Long":"lh","Lou":"lz","Lu":"lu","Luan":"ll","Lun":"lm","Luo":"lo","Ma":"ma","Mai":"mp","Man":"mr","Mang":"ms","Mao":"mq","Me":"me","Mei":"mk","Men":"mw","Meng":"mt","Mi":"mi","Mian":"mf","Miao":"mb","Mie":"md","Min":"my","Ming":"mc","Miu":"mj","Mo":"mo","Mou":"mz","Mu":"mu","Na":"na","Nai":"np","Nan":"nr","Nang":"ns","Nao":"nq","Ne":"ne","Nei":"nk","Nen":"nw","Neng":"nt","Ni":"ni","Nian":"nf","Niang":"ng","Niao":"nb","Nie":"nd","Nin":"ny","Ning":"nc","Niu":"nj","Nong":"nh","Nou":"nz","Nu":"nu","Nuan":"nl","Nun":"nm","Nuo":"no","Pa":"pa","Pai":"pp","Pan":"pr","Pang":"ps","Pao":"pq","Pei":"pk","Pen":"pw","Peng":"pt","Pi":"pi","Pian":"pf","Piao":"pb","Pie":"pd","Pin":"py","Ping":"pc","Po":"po","Pou":"pz","Pu":"pu","Qi":"qi","Qia":"qx","Qian":"qf","Qiang":"qg","Qiao":"qb","Qie":"qd","Qin":"qy","Qing":"qc","Qiong":"qh","Qiu":"qj","Qu":"qu","Quan":"ql","Que":"qn","Qun":"qm","Ran":"rr","Rang":"rs","Rao":"rq","Re":"re","Ren":"rw","Reng":"rt","Ri":"ri","Rong":"rh","Rou":"rz","Ru":"ru","Rua":"rx","Ruan":"rl","Rui":"rn","Run":"rm","Ruo":"ro","Sa":"sa","Sai":"sp","San":"sr","Sang":"ss","Sao":"sq","Se":"se","Sen":"sw","Seng":"st","Sha":"ia","Shai":"ip","Shan":"ir","Shang":"is","Shao":"iq","She":"ie","Shei":"ik","Shen":"iw","Sheng":"it","Shi":"ii","Shou":"iz","Shu":"iu","Shua":"ix","Shuai":"iy","Shuan":"il","Shuang":"ig","Shui":"in","Shun":"im","Shuo":"io","Si":"si","Song":"sh","Sou":"sz","Su":"su","Suan":"sl","Sui":"sn","Sun":"sm","Suo":"so","Ta":"ta","Tai":"tp","Tan":"tr","Tang":"ts","Tao":"tq","Te":"te","Tei":"tk","Teng":"tt","Ti":"ti","Tian":"tf","Tiao":"tb","Tie":"td","Ting":"tc","Tong":"th","Tou":"tz","Tu":"tu","Tuan":"tl","Tui":"tn","Tun":"tm","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xf","Xiang":"xg","Xiao":"xb","Xie":"xd","Xin":"xy","Xing":"xc","Xiong":"xh","Xiu":"xj","Xu":"xu","Xuan":"xl","Xue":"xn","Xun":"xm","Za":"za","Zai":"zp","Zan":"zr","Zang":"zs","Zao":"zq","Ze":"ze","Zei":"zk","Zen":"zw","Zeng":"zt","Zha":"ua","Zhai":"up","Zhan":"ur","Zhang":"us","Zhao":"uq","Zhe":"ue","Zhen":"uw","Zheng":"ut","Zhi":"ui","Zhong":"uh","Zhou":"uz","Zhu":"uu","Zhua":"ux","Zhuai":"uy","Zhuan":"ul","Zhuang":"ug","Zhui":"un","Zhun":"um","Zhuo":"uo","Zi":"zi","Zong":"zh","Zou":"zz","Zu":"zu","Zuan":"zl","Zui":"zn","Zun":"zm","Zuo":"zo"},"PinYinJiaJia":{"Lv":"lv","Lve":"lx","Lue":"lx","Nv":"nv","Nve":"nx","Nue":"nx","A":"aa","O":"oo","E":"ee","Ai":"as","Ei":"ew","Ao":"ad","Ou":"op","An":"af","En":"er","Ang":"ag","Eng":"et","Er":"eq","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yd","You":"yp","Yan":"yf","Yin":"yl","Yang":"yg","Ying":"yq","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"ws","Wei":"ww","Wan":"wf","Wen":"wr","Wang":"wg","Weng":"wt","Yu":"yu","Yue":"yx","Yuan":"yc","Yun":"yz","Yong":"yy","Ba":"ba","Bai":"bs","Ban":"bf","Bang":"bg","Bao":"bd","Bei":"bw","Ben":"br","Beng":"bt","Bi":"bi","Bian":"bj","Biang":"bh","Biao":"bk","Bie":"bm","Bin":"bl","Bing":"bq","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cs","Can":"cf","Cang":"cg","Cao":"cd","Ce":"ce","Cen":"cr","Ceng":"ct","Cha":"ua","Chai":"us","Chan":"uf","Chang":"ug","Chao":"ud","Che":"ue","Chen":"ur","Cheng":"ut","Chi":"ui","Chong":"uy","Chou":"up","Chu":"uu","Chua":"ub","Chuai":"ux","Chuan":"uc","Chuang":"uh","Chui":"uv","Chun":"uz","Chuo":"uo","Ci":"ci","Cong":"cy","Cou":"cp","Cu":"cu","Cuan":"cc","Cui":"cv","Cun":"cz","Cuo":"co","Da":"da","Dai":"ds","Dan":"df","Dang":"dg","Dao":"dd","De":"de","Dei":"dw","Den":"dr","Deng":"dt","Di":"di","Dia":"db","Dian":"dj","Diao":"dk","Die":"dm","Ding":"dq","Diu":"dn","Dong":"dy","Dou":"dp","Du":"du","Duan":"dc","Dui":"dv","Dun":"dz","Duo":"do","Fa":"fa","Fan":"ff","Fang":"fg","Fei":"fw","Fen":"fr","Feng":"ft","Fiao":"fk","Fo":"fo","Fou":"fp","Fu":"fu","Ga":"ga","Gai":"gs","Gan":"gf","Gang":"gg","Gao":"gd","Ge":"ge","Gei":"gw","Gen":"gr","Geng":"gt","Gong":"gy","Gou":"gp","Gu":"gu","Gua":"gb","Guai":"gx","Guan":"gc","Guang":"gh","Gui":"gv","Gun":"gz","Guo":"go","Ha":"ha","Hai":"hs","Han":"hf","Hang":"hg","Hao":"hd","He":"he","Hei":"hw","Hen":"hr","Heng":"ht","Hong":"hy","Hou":"hp","Hu":"hu","Hua":"hb","Huai":"hx","Huan":"hc","Huang":"hh","Hui":"hv","Hun":"hz","Huo":"ho","Ji":"ji","Jia":"jb","Jian":"jj","Jiang":"jh","Jiao":"jk","Jie":"jm","Jin":"jl","Jing":"jq","Jiong":"jy","Jiu":"jn","Ju":"ju","Juan":"jc","Jue":"jx","Jun":"jz","Ka":"ka","Kai":"ks","Kan":"kf","Kang":"kg","Kao":"kd","Ke":"ke","Ken":"kr","Keng":"kt","Kong":"ky","Kou":"kp","Ku":"ku","Kua":"kb","Kuai":"kx","Kuan":"kc","Kuang":"kh","Kui":"kv","Kun":"kz","Kuo":"ko","La":"la","Lai":"ls","Lan":"lf","Lang":"lg","Lao":"ld","Le":"le","Lei":"lw","Leng":"lt","Li":"li","Lia":"lb","Lian":"lj","Liang":"lh","Liao":"lk","Lie":"lm","Lin":"ll","Ling":"lq","Liu":"ln","Lo":"lo","Long":"ly","Lou":"lp","Lu":"lu","Luan":"lc","Lun":"lz","Luo":"lo","Ma":"ma","Mai":"ms","Man":"mf","Mang":"mg","Mao":"md","Me":"me","Mei":"mw","Men":"mr","Meng":"mt","Mi":"mi","Mian":"mj","Miao":"mk","Mie":"mm","Min":"ml","Ming":"mq","Miu":"mn","Mo":"mo","Mou":"mp","Mu":"mu","Na":"na","Nai":"ns","Nan":"nf","Nang":"ng","Nao":"nd","Ne":"ne","Nei":"nw","Nen":"nr","Neng":"nt","Ni":"ni","Nian":"nj","Niang":"nh","Niao":"nk","Nie":"nm","Nin":"nl","Ning":"nq","Niu":"nn","Nong":"ny","Nou":"np","Nu":"nu","Nuan":"nc","Nun":"nz","Nuo":"no","Pa":"pa","Pai":"ps","Pan":"pf","Pang":"pg","Pao":"pd","Pei":"pw","Pen":"pr","Peng":"pt","Pi":"pi","Pian":"pj","Piao":"pk","Pie":"pm","Pin":"pl","Ping":"pq","Po":"po","Pou":"pp","Pu":"pu","Qi":"qi","Qia":"qb","Qian":"qj","Qiang":"qh","Qiao":"qk","Qie":"qm","Qin":"ql","Qing":"qq","Qiong":"qy","Qiu":"qn","Qu":"qu","Quan":"qc","Que":"qx","Qun":"qz","Ran":"rf","Rang":"rg","Rao":"rd","Re":"re","Ren":"rr","Reng":"rt","Ri":"ri","Rong":"ry","Rou":"rp","Ru":"ru","Rua":"rb","Ruan":"rc","Rui":"rv","Run":"rz","Ruo":"ro","Sa":"sa","Sai":"ss","San":"sf","Sang":"sg","Sao":"sd","Se":"se","Sen":"sr","Seng":"st","Sha":"ia","Shai":"is","Shan":"if","Shang":"ig","Shao":"id","She":"ie","Shei":"iw","Shen":"ir","Sheng":"it","Shi":"ii","Shou":"ip","Shu":"iu","Shua":"ib","Shuai":"ix","Shuan":"ic","Shuang":"ih","Shui":"iv","Shun":"iz","Shuo":"io","Si":"si","Song":"sy","Sou":"sp","Su":"su","Suan":"sc","Sui":"sv","Sun":"sz","Suo":"so","Ta":"ta","Tai":"ts","Tan":"tf","Tang":"tg","Tao":"td","Te":"te","Tei":"tw","Teng":"tt","Ti":"ti","Tian":"tj","Tiao":"tk","Tie":"tm","Ting":"tq","Tong":"ty","Tou":"tp","Tu":"tu","Tuan":"tc","Tui":"tv","Tun":"tz","Tuo":"to","Xi":"xi","Xia":"xb","Xian":"xj","Xiang":"xh","Xiao":"xk","Xie":"xm","Xin":"xl","Xing":"xq","Xiong":"xy","Xiu":"xn","Xu":"xu","Xuan":"xc","Xue":"xx","Xun":"xz","Za":"za","Zai":"zs","Zan":"zf","Zang":"zg","Zao":"zd","Ze":"ze","Zei":"zw","Zen":"zr","Zeng":"zt","Zha":"va","Zhai":"vs","Zhan":"vf","Zhang":"vg","Zhao":"vd","Zhe":"ve","Zhen":"vr","Zheng":"vt","Zhi":"vi","Zhong":"vy","Zhou":"vp","Zhu":"vu","Zhua":"vb","Zhuai":"vx","Zhuan":"vc","Zhuang":"vh","Zhui":"vv","Zhun":"vz","Zhuo":"vo","Zi":"zi","Zong":"zy","Zou":"zp","Zu":"zu","Zuan":"zc","Zui":"zv","Zun":"zz","Zuo":"zo"},"XingKongJianDao":{"Lv":"lv","Lve":"ly","Lue":"ly","Nv":"nv","Nve":"ny","Nue":"ny","A":"xa","O":"xo","E":"xe","Ai":"xj","Ei":"xw","Ao":"xs","Ou":"xt","An":"xd","En":"xk","Ang":"xf","Eng":"xh","Er":"xu","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yt","Yan":"yd","Yin":"yb","Yang":"yf","Ying":"yg","Wu":"wj","Wa":"ws","Wo":"wo","Wai":"wh","Wei":"ww","Wan":"wf","Wen":"wn","Wang":"wp","Weng":"wr","Yu":"yv","Yue":"yy","Yuan":"yr","Yun":"yw","Yong":"yl","Ba":"ba","Bai":"bj","Ban":"bd","Bang":"bf","Bao":"bs","Bei":"bw","Ben":"bk","Beng":"bh","Bi":"bi","Bian":"bm","Biang":"bx","Biao":"bp","Bie":"bc","Bin":"bb","Bing":"bg","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cj","Can":"cd","Cang":"cf","Cao":"cs","Ce":"ce","Cen":"ck","Ceng":"ch","Cha":"ja","Chai":"jj","Chan":"jd","Chang":"jf","Chao":"js","Che":"je","Chen":"jk","Cheng":"jh","Chi":"wi","Chong":"wl","Chou":"jt","Chu":"ju","Chua":"wx","Chuai":"wg","Chuan":"wr","Chuang":"wn","Chui":"wy","Chun":"jz","Chuo":"jo","Ci":"ci","Cong":"cl","Cou":"ct","Cu":"cu","Cuan":"cr","Cui":"cy","Cun":"cz","Cuo":"co","Da":"da","Dai":"dj","Dan":"dd","Dang":"df","Dao":"ds","De":"de","Dei":"dw","Den":"dk","Deng":"dh","Di":"di","Dia":"dx","Dian":"dm","Diao":"dp","Die":"dc","Ding":"dg","Diu":"dq","Dong":"dl","Dou":"dt","Du":"du","Duan":"dr","Dui":"dy","Dun":"dz","Duo":"do","Fa":"fs","Fan":"ff","Fang":"fp","Fei":"fw","Fen":"fn","Feng":"fr","Fiao":"fp","Fo":"fl","Fou":"fd","Fu":"fl","Ga":"ga","Gai":"gj","Gan":"gd","Gang":"gf","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gk","Geng":"gh","Gong":"gl","Gou":"gt","Gu":"gu","Gua":"gx","Guai":"gg","Guan":"gr","Guang":"gn","Gui":"gy","Gun":"gz","Guo":"go","Ha":"ha","Hai":"hj","Han":"hd","Hang":"hf","Hao":"hs","He":"he","Hei":"hw","Hen":"hk","Heng":"hh","Hong":"hl","Hou":"ht","Hu":"hu","Hua":"hx","Huai":"hg","Huan":"hr","Huang":"hn","Hui":"hy","Hun":"hz","Huo":"ho","Ji":"jk","Jia":"js","Jian":"jm","Jiang":"jn","Jiao":"jp","Jie":"jc","Jin":"jb","Jing":"jg","Jiong":"jy","Jiu":"jq","Ju":"jv","Juan":"jt","Jue":"jh","Jun":"jw","Ka":"ka","Kai":"kj","Kan":"kd","Kang":"kf","Kao":"ks","Ke":"ke","Ken":"kk","Keng":"kh","Kong":"kl","Kou":"kt","Ku":"ku","Kua":"kx","Kuai":"kg","Kuan":"kr","Kuang":"kn","Kui":"ky","Kun":"kz","Kuo":"ko","La":"la","Lai":"lj","Lan":"ld","Lang":"lf","Lao":"ls","Le":"le","Lei":"lw","Leng":"lh","Li":"li","Lia":"lx","Lian":"lm","Liang":"ln","Liao":"lp","Lie":"lc","Lin":"lb","Ling":"lg","Liu":"lq","Lo":"ll","Long":"ll","Lou":"lt","Lu":"lu","Luan":"lr","Lun":"lz","Luo":"lo","Ma":"ma","Mai":"mj","Man":"md","Mang":"mf","Mao":"ms","Me":"me","Mei":"mw","Men":"mk","Meng":"mh","Mi":"mi","Mian":"mm","Miao":"mp","Mie":"mc","Min":"mb","Ming":"mg","Miu":"mq","Mo":"mo","Mou":"mt","Mu":"mu","Na":"na","Nai":"nj","Nan":"nd","Nang":"nf","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nk","Neng":"nh","Ni":"ni","Nian":"nm","Niang":"nn","Niao":"np","Nie":"nc","Nin":"nb","Ning":"ng","Niu":"nq","Nong":"nl","Nou":"nt","Nu":"nu","Nuan":"nr","Nun":"nz","Nuo":"no","Pa":"pa","Pai":"pj","Pan":"pd","Pang":"pf","Pao":"ps","Pei":"pw","Pen":"pk","Peng":"ph","Pi":"pi","Pian":"pm","Piao":"pp","Pie":"pc","Pin":"pb","Ping":"pg","Po":"po","Pou":"pt","Pu":"pu","Qi":"qk","Qia":"qs","Qian":"qm","Qiang":"qx","Qiao":"qp","Qie":"qc","Qin":"qb","Qing":"qg","Qiong":"qy","Qiu":"qq","Qu":"qv","Quan":"qt","Que":"qh","Qun":"qw","Ran":"rd","Rang":"rf","Rao":"rs","Re":"re","Ren":"rk","Reng":"rh","Ri":"ri","Rong":"rl","Rou":"rt","Ru":"ru","Rua":"rx","Ruan":"rr","Rui":"ry","Run":"rz","Ruo":"ro","Sa":"sa","Sai":"sj","San":"sd","Sang":"sf","Sao":"ss","Se":"se","Sen":"sk","Seng":"sh","Sha":"ea","Shai":"ej","Shan":"ed","Shang":"ef","Shao":"es","She":"ee","Shei":"ew","Shen":"ek","Sheng":"eh","Shi":"ei","Shou":"et","Shu":"eu","Shua":"ex","Shuai":"eg","Shuan":"er","Shuang":"en","Shui":"ey","Shun":"ez","Shuo":"eo","Si":"si","Song":"sl","Sou":"st","Su":"su","Suan":"sr","Sui":"sy","Sun":"sz","Suo":"so","Ta":"ta","Tai":"tj","Tan":"td","Tang":"tf","Tao":"ts","Te":"te","Tei":"tw","Teng":"th","Ti":"ti","Tian":"tm","Tiao":"tp","Tie":"tc","Ting":"tg","Tong":"tl","Tou":"tt","Tu":"tu","Tuan":"tr","Tui":"ty","Tun":"tz","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xm","Xiang":"xn","Xiao":"xp","Xie":"xc","Xin":"xb","Xing":"xg","Xiong":"xl","Xiu":"xq","Xu":"xv","Xuan":"xr","Xue":"xy","Xun":"xw","Za":"za","Zai":"zj","Zan":"zd","Zang":"zf","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zk","Zeng":"zh","Zha":"qa","Zhai":"fj","Zhan":"qd","Zhang":"qf","Zhao":"fs","Zhe":"fe","Zhen":"qk","Zheng":"qh","Zhi":"fi","Zhong":"fy","Zhou":"qt","Zhu":"qu","Zhua":"fx","Zhuai":"fg","Zhuan":"fr","Zhuang":"fn","Zhui":"fy","Zhun":"fz","Zhuo":"qo","Zi":"zi","Zong":"zl","Zou":"zt","Zu":"zu","Zuan":"zr","Zui":"zy","Zun":"zz","Zuo":"zo"},"DaNiu":{"Lv":"lv","Lve":"lx","Lue":"lx","Nv":"nv","Nve":"nx","Nue":"nx","A":"ea","O":"eo","E":"ee","Ai":"eh","Ei":"ew","Ao":"es","Ou":"er","An":"ed","En":"ek","Ang":"ef","Eng":"ej","Er":"eu","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yr","Yan":"yd","Yin":"yb","Yang":"yf","Ying":"yg","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wh","Wei":"ww","Wan":"wd","Wen":"wk","Wang":"wf","Weng":"wj","Yu":"yu","Yue":"yh","Yuan":"yj","Yun":"yw","Yong":"yl","Ba":"ba","Bai":"bh","Ban":"bd","Bang":"bf","Bao":"bs","Bei":"bw","Ben":"bk","Beng":"bj","Bi":"bi","Bian":"bc","Biang":"bn","Biao":"bm","Bie":"bp","Bin":"bb","Bing":"bg","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"ch","Can":"cd","Cang":"cf","Cao":"cs","Ce":"ce","Cen":"ck","Ceng":"cj","Cha":"ia","Chai":"ih","Chan":"id","Chang":"if","Chao":"is","Che":"ie","Chen":"ik","Cheng":"ij","Chi":"ii","Chong":"il","Chou":"ir","Chu":"iu","Chua":"iq","Chuai":"ig","Chuan":"iz","Chuang":"ix","Chui":"in","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cl","Cou":"cr","Cu":"cu","Cuan":"cz","Cui":"cn","Cun":"cy","Cuo":"co","Da":"da","Dai":"dh","Dan":"dd","Dang":"df","Dao":"ds","De":"de","Dei":"dw","Den":"dk","Deng":"dj","Di":"di","Dia":"dk","Dian":"dc","Diao":"dm","Die":"dp","Ding":"dg","Diu":"dt","Dong":"dl","Dou":"dr","Du":"du","Duan":"dz","Dui":"dn","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fd","Fang":"ff","Fei":"fw","Fen":"fk","Feng":"fj","Fiao":"fm","Fo":"fo","Fou":"fr","Fu":"fu","Ga":"ga","Gai":"gh","Gan":"gd","Gang":"gf","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gk","Geng":"gj","Gong":"gl","Gou":"gr","Gu":"gu","Gua":"gq","Guai":"gg","Guan":"gz","Guang":"gx","Gui":"gn","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hh","Han":"hd","Hang":"hf","Hao":"hs","He":"he","Hei":"hw","Hen":"hk","Heng":"hj","Hong":"hl","Hou":"hr","Hu":"hu","Hua":"hq","Huai":"hg","Huan":"hz","Huang":"hx","Hui":"hn","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jk","Jian":"jc","Jiang":"jn","Jiao":"jm","Jie":"jp","Jin":"jb","Jing":"jg","Jiong":"jl","Jiu":"jt","Ju":"ju","Juan":"jj","Jue":"jh","Jun":"jw","Ka":"ka","Kai":"kh","Kan":"kd","Kang":"kf","Kao":"ks","Ke":"ke","Ken":"kk","Keng":"kj","Kong":"kl","Kou":"kr","Ku":"ku","Kua":"kq","Kuai":"kg","Kuan":"kz","Kuang":"kx","Kui":"kn","Kun":"ky","Kuo":"ko","La":"la","Lai":"lh","Lan":"ld","Lang":"lf","Lao":"ls","Le":"le","Lei":"lw","Leng":"lj","Li":"li","Lia":"lk","Lian":"lc","Liang":"ln","Liao":"lm","Lie":"lp","Lin":"lb","Ling":"lg","Liu":"lt","Lo":"lo","Long":"ll","Lou":"lr","Lu":"lu","Luan":"lz","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"mh","Man":"md","Mang":"mf","Mao":"ms","Me":"me","Mei":"mw","Men":"mk","Meng":"mj","Mi":"mi","Mian":"mc","Miao":"mm","Mie":"mp","Min":"mb","Ming":"mg","Miu":"mt","Mo":"mo","Mou":"mr","Mu":"mu","Na":"na","Nai":"nh","Nan":"nd","Nang":"nf","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nk","Neng":"nj","Ni":"ni","Nian":"nc","Niang":"nn","Niao":"nm","Nie":"np","Nin":"nb","Ning":"ng","Niu":"nt","Nong":"nl","Nou":"nr","Nu":"nu","Nuan":"nz","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"ph","Pan":"pd","Pang":"pf","Pao":"ps","Pei":"pw","Pen":"pk","Peng":"pj","Pi":"pi","Pian":"pc","Piao":"pm","Pie":"pp","Pin":"pb","Ping":"pg","Po":"po","Pou":"pr","Pu":"pu","Qi":"qi","Qia":"qk","Qian":"qc","Qiang":"qn","Qiao":"qm","Qie":"qp","Qin":"qb","Qing":"qg","Qiong":"ql","Qiu":"qt","Qu":"qu","Quan":"qj","Que":"qh","Qun":"qw","Ran":"rd","Rang":"rf","Rao":"rs","Re":"re","Ren":"rk","Reng":"rj","Ri":"ri","Rong":"rl","Rou":"rr","Ru":"ru","Rua":"rq","Ruan":"rz","Rui":"rn","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sh","San":"sd","Sang":"sf","Sao":"ss","Se":"se","Sen":"sk","Seng":"sj","Sha":"ua","Shai":"uh","Shan":"ud","Shang":"uf","Shao":"us","She":"ue","Shei":"uw","Shen":"uk","Sheng":"uj","Shi":"ui","Shou":"ur","Shu":"uu","Shua":"uq","Shuai":"ug","Shuan":"uz","Shuang":"ux","Shui":"un","Shun":"uy","Shuo":"uo","Si":"si","Song":"sl","Sou":"sr","Su":"su","Suan":"sz","Sui":"sn","Sun":"sy","Suo":"so","Ta":"ta","Tai":"th","Tan":"td","Tang":"tf","Tao":"ts","Te":"te","Tei":"tw","Teng":"tj","Ti":"ti","Tian":"tc","Tiao":"tm","Tie":"tp","Ting":"tg","Tong":"tl","Tou":"tr","Tu":"tu","Tuan":"tz","Tui":"tn","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xk","Xian":"xc","Xiang":"xn","Xiao":"xm","Xie":"xp","Xin":"xb","Xing":"xg","Xiong":"xl","Xiu":"xt","Xu":"xu","Xuan":"xj","Xue":"xh","Xun":"xw","Za":"za","Zai":"zh","Zan":"zd","Zang":"zf","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zk","Zeng":"zj","Zha":"aa","Zhai":"ah","Zhan":"ad","Zhang":"af","Zhao":"as","Zhe":"ae","Zhen":"ak","Zheng":"aj","Zhi":"ai","Zhong":"al","Zhou":"ar","Zhu":"au","Zhua":"aq","Zhuai":"ag","Zhuan":"az","Zhuang":"ax","Zhui":"an","Zhun":"ay","Zhuo":"ao","Zi":"zi","Zong":"zl","Zou":"zr","Zu":"zu","Zuan":"zz","Zui":"zn","Zun":"zy","Zuo":"zo"},"XiaoLang":{"Lv":"lx","Lve":"lb","Lue":"lb","Nv":"nx","Nve":"nb","Nue":"nb","A":"aa","O":"oo","E":"uu","Ai":"ai","Ei":"ui","Ao":"ao","Ou":"ou","An":"an","En":"un","Ang":"ah","Eng":"un","Er":"ur","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yr","Yan":"yj","Yin":"yd","Yang":"yh","Ying":"yv","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wk","Wei":"ww","Wan":"wj","Wen":"wm","Wang":"wh","Weng":"wn","Yu":"yu","Yue":"yb","Yuan":"yg","Yun":"yy","Yong":"yl","Ba":"ba","Bai":"bk","Ban":"bj","Bang":"bh","Bao":"bs","Bei":"bw","Ben":"bm","Beng":"bn","Bi":"bi","Bian":"bf","Biang":"bm","Biao":"bc","Bie":"bp","Bin":"bd","Bing":"bv","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"ck","Can":"cj","Cang":"ch","Cao":"cs","Ce":"ce","Cen":"cm","Ceng":"cn","Cha":"ia","Chai":"ik","Chan":"ij","Chang":"ih","Chao":"is","Che":"ie","Chen":"im","Cheng":"in","Chi":"ii","Chong":"il","Chou":"ir","Chu":"iu","Chua":"if","Chuai":"iv","Chuan":"ig","Chuang":"iz","Chui":"id","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cl","Cou":"cr","Cu":"cu","Cuan":"cg","Cui":"cd","Cun":"cy","Cuo":"co","Da":"da","Dai":"dk","Dan":"dj","Dang":"dh","Dao":"ds","De":"de","Dei":"dw","Den":"dm","Deng":"dn","Di":"di","Dia":"dk","Dian":"df","Diao":"dc","Die":"dp","Ding":"dv","Diu":"dt","Dong":"dl","Dou":"dr","Du":"du","Duan":"dg","Dui":"dd","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fw","Fen":"fm","Feng":"fn","Fiao":"fc","Fo":"fo","Fou":"fr","Fu":"fu","Ga":"ga","Gai":"gk","Gan":"gj","Gang":"gh","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gm","Geng":"gn","Gong":"gl","Gou":"gr","Gu":"gu","Gua":"gf","Guai":"gv","Guan":"gg","Guang":"gz","Gui":"gd","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hk","Han":"hj","Hang":"hh","Hao":"hs","He":"he","Hei":"hw","Hen":"hm","Heng":"hn","Hong":"hl","Hou":"hr","Hu":"hu","Hua":"hf","Huai":"hv","Huan":"hg","Huang":"hz","Hui":"hd","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jk","Jian":"jf","Jiang":"jm","Jiao":"jc","Jie":"jp","Jin":"jd","Jing":"jv","Jiong":"jj","Jiu":"jt","Ju":"ju","Juan":"jg","Jue":"jb","Jun":"jy","Ka":"ka","Kai":"kk","Kan":"kj","Kang":"kh","Kao":"ks","Ke":"ke","Ken":"km","Keng":"kn","Kong":"kl","Kou":"kr","Ku":"ku","Kua":"kf","Kuai":"kv","Kuan":"kg","Kuang":"kz","Kui":"kd","Kun":"ky","Kuo":"ko","La":"la","Lai":"lk","Lan":"lj","Lang":"lh","Lao":"ls","Le":"le","Lei":"lw","Leng":"ln","Li":"li","Lia":"lk","Lian":"lf","Liang":"lm","Liao":"lc","Lie":"lp","Lin":"ld","Ling":"lv","Liu":"lt","Lo":"lo","Long":"ll","Lou":"lr","Lu":"lu","Luan":"lg","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"mk","Man":"mj","Mang":"mh","Mao":"ms","Me":"me","Mei":"mw","Men":"mm","Meng":"mn","Mi":"mi","Mian":"mf","Miao":"mc","Mie":"mp","Min":"md","Ming":"mv","Miu":"mt","Mo":"mo","Mou":"mr","Mu":"mu","Na":"na","Nai":"nk","Nan":"nj","Nang":"nh","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nm","Neng":"nn","Ni":"ni","Nian":"nf","Niang":"nm","Niao":"nc","Nie":"np","Nin":"nd","Ning":"nv","Niu":"nt","Nong":"nl","Nou":"nr","Nu":"nu","Nuan":"ng","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"pk","Pan":"pj","Pang":"ph","Pao":"ps","Pei":"pw","Pen":"pm","Peng":"pn","Pi":"pi","Pian":"pf","Piao":"pc","Pie":"pp","Pin":"pd","Ping":"pv","Po":"po","Pou":"pr","Pu":"pu","Qi":"qi","Qia":"qk","Qian":"qf","Qiang":"qm","Qiao":"qc","Qie":"qp","Qin":"qd","Qing":"qv","Qiong":"qj","Qiu":"qt","Qu":"qu","Quan":"qg","Que":"qb","Qun":"qy","Ran":"rj","Rang":"rh","Rao":"rs","Re":"re","Ren":"rm","Reng":"rn","Ri":"ri","Rong":"rl","Rou":"rr","Ru":"ru","Rua":"rf","Ruan":"rg","Rui":"rd","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sk","San":"sj","Sang":"sh","Sao":"ss","Se":"se","Sen":"sm","Seng":"sn","Sha":"va","Shai":"vk","Shan":"vj","Shang":"vh","Shao":"vs","She":"ve","Shei":"vw","Shen":"vm","Sheng":"vn","Shi":"vi","Shou":"vr","Shu":"vu","Shua":"vf","Shuai":"vv","Shuan":"vg","Shuang":"vz","Shui":"vd","Shun":"vy","Shuo":"vo","Si":"si","Song":"sl","Sou":"sr","Su":"su","Suan":"sg","Sui":"sd","Sun":"sy","Suo":"so","Ta":"ta","Tai":"tk","Tan":"tj","Tang":"th","Tao":"ts","Te":"te","Tei":"tw","Teng":"tn","Ti":"ti","Tian":"tf","Tiao":"tc","Tie":"tp","Ting":"tv","Tong":"tl","Tou":"tr","Tu":"tu","Tuan":"tg","Tui":"td","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xk","Xian":"xf","Xiang":"xm","Xiao":"xc","Xie":"xp","Xin":"xd","Xing":"xv","Xiong":"xj","Xiu":"xt","Xu":"xu","Xuan":"xg","Xue":"xb","Xun":"xy","Za":"za","Zai":"zk","Zan":"zj","Zang":"zh","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zm","Zeng":"zn","Zha":"ea","Zhai":"ek","Zhan":"ej","Zhang":"eh","Zhao":"es","Zhe":"ee","Zhen":"em","Zheng":"en","Zhi":"ei","Zhong":"el","Zhou":"er","Zhu":"eu","Zhua":"ef","Zhuai":"ev","Zhuan":"eg","Zhuang":"ez","Zhui":"ed","Zhun":"ey","Zhuo":"eo","Zi":"zi","Zong":"zl","Zou":"zr","Zu":"zu","Zuan":"zg","Zui":"zd","Zun":"zy","Zuo":"zo"}} \ No newline at end of file From 4fb2e3d14e856cb6917204ce824d89b3cdf8de9c Mon Sep 17 00:00:00 2001 From: VictoriousRaptor <10308169+VictoriousRaptor@users.noreply.github.com> Date: Sat, 14 Jun 2025 16:33:48 +0800 Subject: [PATCH 33/33] Fix translation mapping logic --- Flow.Launcher.Infrastructure/PinyinAlphabet.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs index 6a2cd1e6681..36f007f39a5 100644 --- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs +++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs @@ -99,13 +99,19 @@ public bool ShouldTranslate(string stringToTranslate) { if (content[i] >= 0x3400 && content[i] <= 0x9FD5) { - string dp = _settings.UseDoublePinyin ? ToDoublePin(resultList[i]) : resultList[i]; - map.AddNewIndex(i, resultBuilder.Length, dp.Length + 1); + string translated = _settings.UseDoublePinyin ? ToDoublePin(resultList[i]) : resultList[i]; if (previousIsChinese) { + map.AddNewIndex(i, resultBuilder.Length, translated.Length + 1); resultBuilder.Append(' '); + resultBuilder.Append(translated); + } + else + { + map.AddNewIndex(i, resultBuilder.Length, translated.Length); + resultBuilder.Append(translated); + previousIsChinese = true; } - resultBuilder.Append(dp); } else {