Skip to content

Commit d27284c

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 d27284c

1 file changed

Lines changed: 45 additions & 1 deletion

File tree

src/models/searchfilterproxymodel.cpp

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

0 commit comments

Comments
 (0)