Skip to content

Commit c03c778

Browse files
Merge pull request #4151 from Flow-Launcher/fix3965
Fix incorrect text highlighting when using pinyin queries
2 parents a49eb46 + b6339d3 commit c03c778

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

Flow.Launcher.Infrastructure/PinyinAlphabet.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public PinyinAlphabet()
2727
{
2828
switch (e.PropertyName)
2929
{
30-
case nameof (Settings.ShouldUsePinyin):
30+
case nameof(Settings.ShouldUsePinyin):
3131
if (_settings.ShouldUsePinyin)
3232
{
3333
Reload();
@@ -52,7 +52,7 @@ public void Reload()
5252

5353
private void CreateDoublePinyinTableFromStream(Stream jsonStream)
5454
{
55-
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
55+
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
5656
throw new InvalidOperationException("Failed to deserialize double pinyin table: result is null");
5757

5858
var schemaKey = _settings.DoublePinyinSchema.ToString();
@@ -128,12 +128,12 @@ public bool ShouldTranslate(string stringToTranslate)
128128
if (IsChineseCharacter(content[i]))
129129
{
130130
var translated = _settings.UseDoublePinyin ? ToDoublePinyin(resultList[i]) : resultList[i];
131-
132-
if (i > 0)
131+
132+
if (i > 0 && content[i - 1] != ' ')
133133
{
134134
resultBuilder.Append(' ');
135135
}
136-
136+
137137
map.AddNewIndex(resultBuilder.Length, translated.Length);
138138
resultBuilder.Append(translated);
139139
previousIsChinese = true;
@@ -144,19 +144,22 @@ public bool ShouldTranslate(string stringToTranslate)
144144
if (previousIsChinese)
145145
{
146146
previousIsChinese = false;
147-
resultBuilder.Append(' ');
147+
if (content[i] != ' ')
148+
{
149+
resultBuilder.Append(' ');
150+
}
148151
}
149-
150-
map.AddNewIndex(resultBuilder.Length, resultList[i].Length);
151-
resultBuilder.Append(resultList[i]);
152+
153+
map.AddNewIndex(resultBuilder.Length, 1);
154+
resultBuilder.Append(content[i]);
152155
}
153156
}
154157

155158
map.EndConstruct();
156159

157160
var translation = resultBuilder.ToString();
158161
var result = (translation, map);
159-
162+
160163
return _pinyinCache[content] = result;
161164
}
162165

@@ -185,8 +188,8 @@ private static bool IsChineseCharacter(char c)
185188

186189
private string ToDoublePinyin(string fullPinyin)
187190
{
188-
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
189-
? doublePinyinValue
191+
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
192+
? doublePinyinValue
190193
: fullPinyin;
191194
}
192195
}

Flow.Launcher.Infrastructure/TranslationMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void AddNewIndex(int translatedIndex, int length)
2121
public int MapToOriginalIndex(int translatedIndex)
2222
{
2323
var searchResult = _originalToTranslated.BinarySearch(translatedIndex);
24-
return searchResult >= 0 ? searchResult : ~searchResult;
24+
return searchResult >= 0 ? searchResult + 1 : ~searchResult;
2525
}
2626

2727
public void EndConstruct()

Flow.Launcher.Test/TranslationMappingTest.cs

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,33 @@ public void AddNewIndex_ShouldAddTranslatedIndexPlusLength()
2222
ClassicAssert.AreEqual(10, GetOriginalToTranslatedAt(mapping, 1));
2323
}
2424

25-
[TestCase(0, 0)]
26-
[TestCase(2, 1)]
27-
[TestCase(3, 1)]
28-
[TestCase(5, 2)]
29-
[TestCase(6, 2)]
25+
26+
[TestCase(0, 0)] // "F" -> "F"
27+
[TestCase(1, 1)] // "l" -> "l"
28+
[TestCase(2, 2)] // "o" -> "o"
29+
[TestCase(3, 3)] // "w" -> "w"
30+
[TestCase(4, 4)] // " " -> " "
31+
[TestCase(5, 5)] // "Y" (translated from "用") -> original index 5
32+
[TestCase(6, 5)] // "o" (translated from "用") -> original index 5
33+
[TestCase(7, 5)] // "n" (translated from "用") -> original index 5
34+
[TestCase(8, 5)] // "g" (translated from "用") -> original index 5
35+
[TestCase(10, 6)] // "H" (translated from "户") -> original index 6
36+
[TestCase(11, 6)] // "u" (translated from "户") -> original index 6
3037
public void MapToOriginalIndex_ShouldReturnExpectedIndex(int translatedIndex, int expectedOriginalIndex)
3138
{
3239
var mapping = new TranslationMapping();
33-
// a测试
34-
// a Ce Shi
35-
mapping.AddNewIndex(0, 1);
36-
mapping.AddNewIndex(2, 2);
37-
mapping.AddNewIndex(5, 3);
40+
// Test case :
41+
// 0123456
42+
// Flow 用户
43+
// 012345678901
44+
// Flow Yong Hu
45+
mapping.AddNewIndex(0, 1); // F
46+
mapping.AddNewIndex(1, 1); // l
47+
mapping.AddNewIndex(2, 1); // o
48+
mapping.AddNewIndex(3, 1); // w
49+
mapping.AddNewIndex(4, 1); // ' '
50+
mapping.AddNewIndex(5, 4); // 用 -> Yong
51+
mapping.AddNewIndex(10, 2); // 户 -> Hu
3852

3953
var result = mapping.MapToOriginalIndex(translatedIndex);
4054
ClassicAssert.AreEqual(expectedOriginalIndex, result);

0 commit comments

Comments
 (0)