Skip to content

Commit a7ef785

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 a7ef785

1 file changed

Lines changed: 50 additions & 1 deletion

File tree

src/models/searchfilterproxymodel.cpp

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,54 @@ 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+
// Only check for number matches if search pattern contains numbers
50+
QRegularExpression searchNumberCheck("\\d+");
51+
if (searchNumberCheck.match(searchPatternDelBlank).hasMatch()) {
52+
QRegularExpression numberRegex("\\d+");
53+
QRegularExpressionMatchIterator matches = numberRegex.globalMatch(displayName);
54+
bool hasNumberMatch = false;
55+
56+
while (matches.hasNext()) {
57+
QRegularExpressionMatch match = matches.next();
58+
QString numberInDisplayName = match.captured(0);
59+
hasNumberMatch = true;
60+
if (numberInDisplayName.startsWith(searchPatternDelBlank)) {
61+
return true;
62+
}
63+
}
64+
65+
// If there are numbers but none match the pattern
66+
if (hasNumberMatch) {
67+
return false;
68+
}
69+
}
70+
71+
// Check if displayName contains only English letters
72+
QRegularExpression englishOnly("^[a-z\\s]+$");
73+
bool isPureEnglish = englishOnly.match(displayName).hasMatch();
74+
if (isPureEnglish) {
75+
return displayName.startsWith(searchPatternDelBlank) ||
76+
nameCopy.startsWith(searchPatternDelBlank) ||
77+
transliterated.startsWith(searchPatternDelBlank) ||
78+
jianpin.startsWith(searchPatternDelBlank) ||
79+
nameFirstLetters.startsWith(searchPatternDelBlank);
80+
}
81+
82+
return displayName.contains(searchPatternDelBlank) ||
83+
nameCopy.contains(searchPatternDelBlank) ||
84+
transliterated.contains(searchPatternDelBlank) ||
85+
jianpin.contains(searchPatternDelBlank) ||
86+
nameFirstLetters.contains(searchPatternDelBlank);
3887
}

0 commit comments

Comments
 (0)