Skip to content

Commit dafb137

Browse files
committed
feat: add Support for acronym matching and others.
add Support for acronym matching, add Intermediate matching is not supported for lowercase letters. Log:
1 parent 0747c96 commit dafb137

1 file changed

Lines changed: 36 additions & 1 deletion

File tree

src/models/searchfilterproxymodel.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,40 @@ bool SearchFilterProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &
3434

3535
QString searchPatternDelBlank = searchPattern.pattern().toLower().remove(" ");
3636

37-
return displayName.contains(searchPatternDelBlank) || nameCopy.contains(searchPatternDelBlank) || transliterated.contains(searchPatternDelBlank) || jianpin.contains(searchPatternDelBlank);
37+
// Get first letters of each word in displayName
38+
QStringList words = displayName.split(" ", Qt::SkipEmptyParts);
39+
QString nameFirstLetters;
40+
for (const QString &word : words) {
41+
if (!word.isEmpty() && word[0].isUpper()) {
42+
nameFirstLetters += word[0].toLower();
43+
}
44+
}
45+
46+
// Check if search pattern starts with numbers
47+
QRegularExpression numberRegex("\\d+");
48+
QRegularExpressionMatch match = numberRegex.match(displayName);
49+
if (match.hasMatch()) {
50+
QString numberInDisplayName = match.captured(0);
51+
if (numberInDisplayName.startsWith(searchPatternDelBlank)) {
52+
return true;
53+
}
54+
return false;
55+
}
56+
57+
// Check if displayName contains only English letters
58+
QRegularExpression englishOnly("^[a-z\\s]+$");
59+
bool isPureEnglish = englishOnly.match(displayName).hasMatch();
60+
if (isPureEnglish) {
61+
return displayName.startsWith(searchPatternDelBlank) ||
62+
nameCopy.startsWith(searchPatternDelBlank) ||
63+
transliterated.startsWith(searchPatternDelBlank) ||
64+
jianpin.startsWith(searchPatternDelBlank) ||
65+
nameFirstLetters.startsWith(searchPatternDelBlank);
66+
}
67+
68+
return displayName.contains(searchPatternDelBlank) ||
69+
nameCopy.contains(searchPatternDelBlank) ||
70+
transliterated.contains(searchPatternDelBlank) ||
71+
jianpin.contains(searchPatternDelBlank) ||
72+
nameFirstLetters.contains(searchPatternDelBlank);
3873
}

0 commit comments

Comments
 (0)