Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
c63c986
Add Acronym Support for Fuzzy Search
taooceros Oct 18, 2020
e264af5
merge one extra condition to the switch case
taooceros Oct 18, 2020
9ad7838
merge one extra condition to the switch case
taooceros Oct 18, 2020
34dc729
Add parentheses to the condition
taooceros Oct 18, 2020
468f889
Add return statement....
taooceros Oct 18, 2020
4d06187
use ?. and ?? instead of if == null
taooceros Oct 20, 2020
706f30a
Add number support (treat number as part of acronuym)
taooceros Oct 24, 2020
61c9797
Merge remote-tracking branch 'upstream/dev' into AcronymFuzzy
taooceros Nov 22, 2020
1ddf83f
Update to DotNet5
taooceros Nov 30, 2020
3607bfd
Change name for publish file
taooceros Dec 1, 2020
e973e1d
Update ModernWPF so that the app can run
taooceros Dec 2, 2020
4ea40ab
Add the new publish profile file
taooceros Dec 4, 2020
e67058e
Merge remote-tracking branch 'upstream/dev' into AcronymFuzzy
taooceros Dec 22, 2020
b7a0ada
Add Mapping to original string after translation. Not sure about the …
taooceros Dec 22, 2020
2c9f414
optimize use
taooceros Dec 22, 2020
75b9941
Use Binary Search instead of Linear search to reduce time complexity.
taooceros Dec 25, 2020
7ceb080
Use inner loop to evaluate acronym match (Big Change)
taooceros Dec 27, 2020
8031ddf
Merge remote-tracking branch 'upstream/dev' into AcronymFuzzy
taooceros Jan 9, 2021
5ab54f8
Merge branch 'RenderImprovement' into dev
taooceros Jan 9, 2021
62009ac
Merge remote-tracking branch 'upstream/dev' into DotNet5Upgrade
taooceros Jan 9, 2021
494312a
Merge dev
taooceros Jan 9, 2021
4b9ed75
Merge branch 'DotNet5Upgrade' into dev
taooceros Jan 9, 2021
dd074f4
change publish profile to Net5 one
taooceros Jan 9, 2021
a626e7b
try trim
taooceros Jan 9, 2021
0fc9f64
image not found issue in build
taooceros Jan 9, 2021
8bd6820
Merge branch 'PluginAsyncModel' into dev
taooceros Jan 9, 2021
94a0477
fix merge issue of result update event
taooceros Jan 12, 2021
a4c11df
use ready to run
taooceros Jan 14, 2021
c54b678
Merge dev
taooceros Jan 14, 2021
f14da72
Add Acronym Support for Fuzzy Search
taooceros Oct 18, 2020
ab9e6a8
merge one extra condition to the switch case
taooceros Oct 18, 2020
b074902
merge one extra condition to the switch case
taooceros Oct 18, 2020
272f411
Add return statement....
taooceros Oct 18, 2020
787e569
use ?. and ?? instead of if == null
taooceros Oct 20, 2020
8a76ad0
Add number support (treat number as part of acronuym)
taooceros Oct 24, 2020
59e61ce
Add Mapping to original string after translation. Not sure about the …
taooceros Dec 22, 2020
1e016d7
optimize use
taooceros Dec 22, 2020
9aa4802
Use Binary Search instead of Linear search to reduce time complexity.
taooceros Dec 25, 2020
2130599
Use inner loop to evaluate acronym match (Big Change)
taooceros Dec 27, 2020
1cd21c0
Fix testing
taooceros Jan 24, 2021
1b7bb5e
Merge remote-tracking branch 'origin/AcronymFuzzy' into AcronymFuzzy
taooceros Jan 24, 2021
ce525b3
Merge branch 'dev' into AcronymFuzzy
jjw24 Jan 26, 2021
cb13985
Merge remote-tracking branch 'origin/dev' into AcronymFuzzy
taooceros Jan 26, 2021
a918e7d
Merge Dev
taooceros Jan 26, 2021
900f009
Revert DotNet 5 update
taooceros Jan 26, 2021
597dc06
revert unexpected personal change
taooceros Jan 26, 2021
67b0bfd
Merge dev
taooceros Jan 26, 2021
f456595
remove unexpected order change
taooceros Jan 26, 2021
f3479f6
fix testing due to API expand
taooceros Jan 26, 2021
715aafd
Merge branch 'dev' into AcronymFuzzy
jjw24 Jan 28, 2021
81733d3
fix formatting
jjw24 Jan 28, 2021
74f1b05
make map variable more clear + formatting
jjw24 Jan 28, 2021
a6ce350
fix formatting
jjw24 Jan 28, 2021
4993eda
fix formatting
jjw24 Jan 28, 2021
d81db91
fix formatting
jjw24 Jan 28, 2021
58b717c
Update summary
taooceros Jan 29, 2021
efdfd06
Merge branch 'AcronymFuzzy' of github.com:taooceros/Flow.Launcher int…
taooceros Jan 29, 2021
c395cc7
move control variable down for readability during debug
jjw24 Jan 31, 2021
bb6a911
add loop to check remaining acronyms if previous matched
jjw24 Jan 31, 2021
99da6f2
move acronym check to method and update scoring to percentage based
jjw24 Feb 1, 2021
8fb2dad
add tests
jjw24 Feb 1, 2021
f32cbaf
Split name matching and desciption matching due to fuzzy change
taooceros Feb 1, 2021
1991824
fix a using
taooceros Feb 1, 2021
838d0ec
combine condition
jjw24 Feb 1, 2021
d9a4836
remove spacing
jjw24 Feb 1, 2021
2bdf69b
separate acronym count and check
jjw24 Feb 1, 2021
f9b7294
Optimize code
taooceros Feb 2, 2021
65a6548
Use int instead of decimal
taooceros Feb 2, 2021
95325a8
Merge pull request #4 from Flow-Launcher/acronym_scoring
taooceros Feb 2, 2021
4331398
update summary, comments & formatting
jjw24 Feb 2, 2021
2602cc0
version bump Program plugin
jjw24 Feb 2, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 110 additions & 14 deletions Flow.Launcher.Infrastructure/PinyinAlphabet.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JetBrains.Annotations;
Expand All @@ -8,22 +9,117 @@

namespace Flow.Launcher.Infrastructure
{
public class TranslationMapping
{
private bool constructed;

private List<int> originalIndexs = new List<int>();
private List<int> translatedIndexs = new List<int>();
private int translaedLength = 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);
translaedLength += length - 1;
}

public int MapToOriginalIndex(int translatedIndex)
{
if (translatedIndex > translatedIndexs.Last())
return translatedIndex - translaedLength - 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;
}
}

public interface IAlphabet
{
string Translate(string stringToTranslate);
public (string translation, TranslationMapping map) Translate(string stringToTranslate);
}

public class PinyinAlphabet : IAlphabet
{
private ConcurrentDictionary<string, string> _pinyinCache = new ConcurrentDictionary<string, string>();
private ConcurrentDictionary<string, (string translation, TranslationMapping map)> _pinyinCache =
new ConcurrentDictionary<string, (string translation, TranslationMapping map)>();

private Settings _settings;

public void Initialize([NotNull] Settings settings)
{
_settings = settings ?? throw new ArgumentNullException(nameof(settings));
}

public string Translate(string content)
public (string translation, TranslationMapping map) Translate(string content)
{
if (_settings.ShouldUsePinyin)
{
Expand All @@ -34,21 +130,15 @@ public string Translate(string content)
var resultList = WordsHelper.GetPinyinList(content);

StringBuilder resultBuilder = new StringBuilder();

for (int i = 0; i < resultList.Length; i++)
{
if (content[i] >= 0x3400 && content[i] <= 0x9FD5)
resultBuilder.Append(resultList[i].First());
}

resultBuilder.Append(' ');
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;
Expand All @@ -60,15 +150,21 @@ public string Translate(string content)
pre = false;
resultBuilder.Append(' ');
}

resultBuilder.Append(resultList[i]);
}
}

return _pinyinCache[content] = resultBuilder.ToString();
map.endConstruct();

var key = resultBuilder.ToString();
map.setKey(key);

return _pinyinCache[content] = (key, map);
}
else
{
return content;
return (content, null);
}
}
else
Expand All @@ -78,7 +174,7 @@ public string Translate(string content)
}
else
{
return content;
return (content, null);
}
}
}
Expand Down
Loading