Skip to content

Commit 490d7ab

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 490d7ab

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

src/models/searchfilterproxymodel.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,43 @@ 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()) {
42+
QChar firstChar = word[0];
43+
if (firstChar.isLetter()) {
44+
nameFirstLetters += firstChar.toLower();
45+
}
46+
}
47+
}
48+
49+
// Check if search pattern starts with numbers
50+
QRegularExpression numberRegex("\\d+");
51+
QRegularExpressionMatch match = numberRegex.match(displayName);
52+
if (match.hasMatch()) {
53+
QString numberInDisplayName = match.captured(0);
54+
if (numberInDisplayName.startsWith(searchPatternDelBlank)) {
55+
return true;
56+
}
57+
return false;
58+
}
59+
60+
// Check if displayName contains only English letters
61+
QRegularExpression englishOnly("^[a-z\\s]+$");
62+
bool isPureEnglish = englishOnly.match(displayName).hasMatch();
63+
if (isPureEnglish) {
64+
return displayName.startsWith(searchPatternDelBlank) ||
65+
nameCopy.startsWith(searchPatternDelBlank) ||
66+
transliterated.startsWith(searchPatternDelBlank) ||
67+
jianpin.startsWith(searchPatternDelBlank) ||
68+
nameFirstLetters.startsWith(searchPatternDelBlank);
69+
}
70+
71+
return displayName.contains(searchPatternDelBlank) ||
72+
nameCopy.contains(searchPatternDelBlank) ||
73+
transliterated.contains(searchPatternDelBlank) ||
74+
jianpin.contains(searchPatternDelBlank) ||
75+
nameFirstLetters.contains(searchPatternDelBlank);
3876
}

0 commit comments

Comments
 (0)