Prevents matching the fallback script twice.

This commit is contained in:
2023-11-03 00:26:37 +08:00
parent b672889008
commit 668f46d260

View File

@@ -308,15 +308,20 @@ namespace Cryville.Common.Font {
} }
public override IEnumerable<Typeface> MatchLanguage(LanguageId lang, bool distinctFamily = false) { public override IEnumerable<Typeface> MatchLanguage(LanguageId lang, bool distinctFamily = false) {
var supported = MapScriptToTypefaces.Keys.Select(i => new LanguageId(i)).ToList(); var supported = MapScriptToTypefaces.Keys.Select(i => new LanguageId(i)).ToList();
bool flag = false;
while (_matcher.Match(lang, supported, out var match, out var distance)) { while (_matcher.Match(lang, supported, out var match, out var distance)) {
if (distance > 40) break; if (distance > 40) break;
Logger.Log("main", 0, "UI", "Matching fonts for language {0}, distance = {1}", match, distance); Logger.Log("main", 0, "UI", "Matching fonts for language {0}, distance = {1}", match, distance);
var candidates = MapScriptToTypefaces[match.Script.ToLowerInvariant()]; if (match.Script.Equals(UltimateFallbackScript, StringComparison.OrdinalIgnoreCase)) {
flag = true;
}
var candidates = MapScriptToTypefaces[match.Script];
foreach (var typeface in EnumerateTypefaces(candidates, distinctFamily)) { foreach (var typeface in EnumerateTypefaces(candidates, distinctFamily)) {
yield return typeface; yield return typeface;
} }
supported.Remove(match); supported.Remove(match);
} }
if (flag) yield break;
Logger.Log("main", 0, "UI", "Matching fallback fonts"); Logger.Log("main", 0, "UI", "Matching fallback fonts");
foreach (var typeface in EnumerateTypefaces(MapScriptToTypefaces[UltimateFallbackScript], distinctFamily)) { foreach (var typeface in EnumerateTypefaces(MapScriptToTypefaces[UltimateFallbackScript], distinctFamily)) {
yield return typeface; yield return typeface;