@ -22,6 +22,17 @@
# include "element_group.hpp"
# include "../qtutil/util.hpp"
// WORKAROUND:
// - Qt::SplitBehavior introduced in 5.14, QString::SplitBehavior was removed in Qt6
// - Support required part of Qt::SplitBehavior from 5.15 for older Qt versions
# if QT_VERSION < QT_VERSION_CHECK(5, 15, 0)
namespace Qt {
static constexpr QString : : SplitBehavior SkipEmptyParts = QString : : SkipEmptyParts ;
}
# endif
namespace cvv
{
namespace stfl
@ -162,7 +173,7 @@ template <typename Element> class STFLEngine
}
QList < Element > elemList ;
QStringList cmdStrings =
query . split ( " # " , QS tring : : SkipEmptyParts ) ;
query . split ( " # " , Qt : : SkipEmptyParts ) ;
elemList = executeFilters ( elements , cmdStrings ) ;
elemList = executeSortCmds ( elemList , cmdStrings ) ;
auto groups = executeGroupCmds ( elemList , cmdStrings ) ;
@ -549,7 +560,7 @@ private:
{
using namespace std : : placeholders ;
QStringList arr =
cmdString . split ( " " , QS tring : : SkipEmptyParts ) ;
cmdString . split ( " " , Qt : : SkipEmptyParts ) ;
QString cmd ;
if ( arr . empty ( ) )
{
@ -570,7 +581,7 @@ private:
else if ( isFilterCSCmd ( cmd ) )
{
QStringList arguments = arr . join ( " " ) . split (
" , " , QS tring : : SkipEmptyParts ) ;
" , " , Qt : : SkipEmptyParts ) ;
std : : for_each ( arguments . begin ( ) ,
arguments . end ( ) , [ ] ( QString & str )
{ str . replace ( " \\ , " , " , " ) ; } ) ;
@ -609,7 +620,7 @@ private:
for ( QString cmdString : cmdStrings )
{
QStringList arr =
cmdString . split ( " " , QS tring : : SkipEmptyParts ) ;
cmdString . split ( " " , Qt : : SkipEmptyParts ) ;
if ( arr . size ( ) < 2 )
{
continue ;
@ -619,7 +630,7 @@ private:
{
arr . removeFirst ( ) ;
}
arr = arr . join ( " " ) . split ( " , " , QS tring : : SkipEmptyParts ) ;
arr = arr . join ( " " ) . split ( " , " , Qt : : SkipEmptyParts ) ;
for ( QString cmdPart : arr )
{
cmdPart = cmdPart . trimmed ( ) ;
@ -647,7 +658,7 @@ private:
if ( sortCmd . second )
{
auto sortFunc = sortFuncs [ sortCmd . first ] ;
qStableS ort( resList . begin ( ) , resList . end ( ) ,
std : : stable_s ort( resList . begin ( ) , resList . end ( ) ,
[ & ] ( const Element & elem1 ,
const Element & elem2 )
{ return sortFunc ( elem1 , elem2 ) ; } ) ;
@ -655,7 +666,7 @@ private:
else
{
auto sortFunc = sortFuncs [ sortCmd . first ] ;
qStableS ort( resList . begin ( ) , resList . end ( ) ,
std : : stable_s ort( resList . begin ( ) , resList . end ( ) ,
[ & ] ( const Element & elem1 ,
const Element & elem2 )
{ return sortFunc ( elem2 , elem1 ) ; } ) ;
@ -675,7 +686,7 @@ private:
for ( QString cmdString : cmdStrings )
{
QStringList arr =
cmdString . split ( " " , QS tring : : SkipEmptyParts ) ;
cmdString . split ( " " , Qt : : SkipEmptyParts ) ;
if ( arr . size ( ) < 2 )
{
continue ;
@ -689,7 +700,7 @@ private:
{
arr . removeFirst ( ) ;
}
arr = arr . join ( " " ) . split ( " , " , QS tring : : SkipEmptyParts ) ;
arr = arr . join ( " " ) . split ( " , " , Qt : : SkipEmptyParts ) ;
for ( QString cmdPart : arr )
{
QStringList cmdPartList = cmdPart . split ( " " ) ;
@ -720,7 +731,7 @@ private:
for ( auto it = groups . begin ( ) ; it ! = groups . end ( ) ; + + it )
{
ElementGroup < Element > elementGroup (
it - > first . split ( " \\ | " , QS tring : : SkipEmptyParts ) ,
it - > first . split ( " \\ | " , Qt : : SkipEmptyParts ) ,
it - > second ) ;
groupList . push_back ( elementGroup ) ;
}
@ -733,7 +744,7 @@ private:
for ( QString cmdString : cmdStrings )
{
QStringList arr =
cmdString . split ( " " , QS tring : : SkipEmptyParts ) ;
cmdString . split ( " " , Qt : : SkipEmptyParts ) ;
if ( arr . isEmpty ( ) )
{
continue ;
@ -743,7 +754,7 @@ private:
{
continue ;
}
arr = arr . join ( " " ) . split ( " , " , QS tring : : SkipEmptyParts ) ;
arr = arr . join ( " " ) . split ( " , " , Qt : : SkipEmptyParts ) ;
additionalCommandFuncs [ cmd ] ( arr , groups ) ;
}
}
@ -762,11 +773,11 @@ private:
if ( cmd = = " group " | | cmd = = " sort " )
{
int frontCut =
std : : min ( 1 + ( hasByString ? 1 : 0 ) , tokens . size ( ) ) ;
tokens = cmdQuery . split ( " " , QS tring : : SkipEmptyParts )
std : : min ( size_t ( hasByString ? 2 : 1 ) , size_t ( tokens . size ( ) ) ) ;
tokens = cmdQuery . split ( " " , Qt : : SkipEmptyParts )
. mid ( frontCut , tokens . size ( ) ) ;
QStringList args = tokens . join ( " " ) . split (
" , " , QS tring : : SkipEmptyParts ) ;
" , " , Qt : : SkipEmptyParts ) ;
args . removeDuplicates ( ) ;
for ( auto & arg : args )
{
@ -806,7 +817,7 @@ private:
else
{
QStringList args = rejoined . split (
" , " , QS tring : : SkipEmptyParts ) ;
" , " , Qt : : SkipEmptyParts ) ;
if ( isFilterCmd ( cmd ) )
{
suggs = getSuggestionsForFilterCSCmd ( cmd , args ) ;
@ -902,7 +913,7 @@ private:
QStringList getSuggestionsForFilterCmd ( const QString & cmd ,
const QString & argument )
{
QStringList pool ( filterPool [ cmd ] . toList ( ) ) ;
QStringList pool ( filterPool [ cmd ] . values ( ) ) ;
return sortStringsByStringEquality ( pool , argument ) ;
}
@ -918,7 +929,7 @@ private:
{
last = args [ args . size ( ) - 1 ] ;
}
QStringList pool ( filterCSPool [ cmd ] . toList ( ) ) ;
QStringList pool ( filterCSPool [ cmd ] . values ( ) ) ;
QStringList list = sortStringsByStringEquality ( pool , last ) ;
for ( QString & item : list )
{
@ -1022,7 +1033,7 @@ private:
void addQueryToStore ( QString query )
{
QStringList storedCmds = getStoredCmds ( ) ;
QStringList cmds = query . split ( " # " , QS tring : : SkipEmptyParts ) ;
QStringList cmds = query . split ( " # " , Qt : : SkipEmptyParts ) ;
cmds . removeDuplicates ( ) ;
for ( QString cmd : cmds )
{
@ -1082,12 +1093,12 @@ private:
{
QMap < int , QStringList > weightedStrings ;
auto compareWithWords =
compareWith . split ( " " , QS tring : : SkipEmptyParts ) ;
compareWith . split ( " " , Qt : : SkipEmptyParts ) ;
for ( const QString & str : strings )
{
int strEqu = 0xFFFFFF ; // infinity...
for ( auto word :
str . split ( " " , QS tring : : SkipEmptyParts ) )
str . split ( " " , Qt : : SkipEmptyParts ) )
{
auto wordA = word . leftJustified ( 15 , ' ' ) ;
for ( const auto & word2 : compareWithWords )