KFuzzyMatcher
Classes | |
struct | Result |
Functions | |
KCOREADDONS_EXPORT Result | match (QStringView pattern, QStringView str) |
KCOREADDONS_EXPORT bool | matchSimple (QStringView pattern, QStringView str) |
Detailed Description
This namespace contains functions for fuzzy matching a list of strings against a pattern.
This code is ported to Qt from lib_fts: https://github.com/forrestthewoods/lib_fts which tries to replicate SublimeText like fuzzy matching.
- Note
- All character matches will happen sequentially. That means that this function is not typo tolerant i.e., "gti" will not match "git", but "gt" will. All methods in here are stateless i.e., the input string will not be modified. Also note that strings in all the functions in this namespace will be matched case-insensitively.
Limitations:
- Currently this will match only strings with length < 256 correctly. This is because we intend on matching a pattern against words / short strings and not paragraphs.
- No more than 256 matches will happen.
If you are using this with QSortFilterProxyModel
, you need to override both QSortFilterProxyModel::lessThan
and QSortFilterProxyModel::filterAcceptsRow
. A simple example:
Additionally you must not use invalidateFilter()
if you go with the above approach. Instead use beginResetModel()/
endResetModel()
:
Namespace for fuzzy matching of strings
Function Documentation
KFuzzyMatcher::Result KFuzzyMatcher::match | ( | QStringView | pattern, |
QStringView | str | ||
) |
This is the main function which does scored fuzzy matching.
The return value of this function contains Result::score which should be used to sort the results. Without sorting of the results this function won't very effective.
If pattern
is empty, the function will return true
- Parameters
-
pattern to search for. For e.g., text entered by a user to filter a list or model str the current string from your list of strings
- Returns
- A Result type with score of this match and whether the match was successful. If there is no match, score is zero. If the match is successful, score must be used to sort the results.
- Since
- 5.79
Simple substring matching to flush out non-matching strings
Definition at line 232 of file kfuzzymatcher.cpp.
bool KFuzzyMatcher::matchSimple | ( | QStringView | pattern, |
QStringView | str | ||
) |
Simple fuzzy matching of chars in pattern
with chars in str
sequentially.
If there is a match, it will return true and false otherwise. There is no scoring. You should use this if score is not important for you and only matching is important.
If pattern
is empty, the function will return true
- Parameters
-
pattern to search for. For e.g., text entered by a user to filter a list str the current string from your list of strings
- Returns
true
on sucessful match
- Since
- 5.79
Instead of doing
strIt.toLower() == patternIt.toLower()
we convert patternIt to Upper / Lower as needed and compare with strIt. This saves us from calling toLower() on both strings, making things a little bit faster
Definition at line 206 of file kfuzzymatcher.cpp.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Thu Apr 22 2021 23:02:15 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.