diff --git a/src/chatlog/content/text.cpp b/src/chatlog/content/text.cpp index 0f419df73..bc89709b0 100644 --- a/src/chatlog/content/text.cpp +++ b/src/chatlog/content/text.cpp @@ -450,7 +450,7 @@ void Text::selectText(QTextCursor& cursor, const std::pair& point) cursor.endEditBlock(); QTextCharFormat format; - format.setBackground(QBrush(QColor("#ff7626"))); + format.setBackground(QBrush(colorHighlight)); cursor.mergeCharFormat(format); regenerate(); diff --git a/src/chatlog/content/text.h b/src/chatlog/content/text.h index 633a8a06f..c0eb1d7ce 100644 --- a/src/chatlog/content/text.h +++ b/src/chatlog/content/text.h @@ -97,6 +97,7 @@ private: QFont defFont; QString defStyleSheet; QColor color; + const QColor colorHighlight{"#ff7626"}; }; #endif // TEXT_H diff --git a/src/widget/form/searchsettingsform.h b/src/widget/form/searchsettingsform.h index dfdc59428..bf9c15d8c 100644 --- a/src/widget/form/searchsettingsform.h +++ b/src/widget/form/searchsettingsform.h @@ -2,7 +2,7 @@ #define SEARCHSETTINGSFORM_H #include -#include "../searchtypes.h" +#include "src/widget/searchtypes.h" namespace Ui { class SearchSettingsForm; diff --git a/src/widget/searchtypes.h b/src/widget/searchtypes.h index 0f1141ffb..be618dba1 100644 --- a/src/widget/searchtypes.h +++ b/src/widget/searchtypes.h @@ -2,6 +2,7 @@ #define SEARCHTYPES_H #include +#include enum class FilterSearch { None, @@ -39,24 +40,34 @@ struct ParameterSearch { class SearchExtraFunctions { public: + /** + * @brief generateFilterWordsOnly generate string for filter "Whole words only" for correct search phrase + * containing symbols "\[]/^$.|?*+(){}" + * @param phrase for search + * @return new phrase for search + */ static QString generateFilterWordsOnly(const QString &phrase) { - QString filter = phrase; + QString filter = QRegularExpression::escape(phrase); - if (filter.contains("\\")) { - filter.replace("\\", "\\\\"); + QString symbols = {"\\[]/^$.|?*+(){}"}; - if (filter.front() != '\\') { + if (filter != phrase) { + if (filter.left(1) != QLatin1String("\\")) { filter = "\\b" + filter; + } else { + filter = "(^|\\s)" + filter; } - if (filter.back() != '\\') { + if (!symbols.contains(filter.right(1))) { filter += "\\b"; + } else { + filter += "($|\\s)"; } } else { filter = QStringLiteral("\\b%1\\b").arg(filter); } return filter; - }; + } }; #endif //SEARCHTYPES_H