|
|
@@ -863,6 +863,21 @@ void VEditor::highlightIncrementalSearchedWord(const QTextCursor &p_cursor)
|
|
|
highlightExtraSelections(true);
|
|
|
}
|
|
|
|
|
|
+static bool isRegularExpressionSupported(const QRegExp &p_reg)
|
|
|
+{
|
|
|
+ if (!p_reg.isValid()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // FIXME: hang bug in Qt's find().
|
|
|
+ QRegExp test("[$^]+");
|
|
|
+ if (test.exactMatch(p_reg.pattern())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
// Use QPlainTextEdit::find() instead of QTextDocument::find() because the later has
|
|
|
// bugs in searching backward.
|
|
|
bool VEditor::findTextHelper(const QString &p_text,
|
|
|
@@ -884,14 +899,11 @@ bool VEditor::findTextHelper(const QString &p_text,
|
|
|
QRegExp exp;
|
|
|
if (useRegExp) {
|
|
|
useRegExp = true;
|
|
|
- // FIXME: hang bug in Qt's find().
|
|
|
- QRegExp test("[$^]+");
|
|
|
- if (test.exactMatch(p_text)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
exp = QRegExp(p_text,
|
|
|
caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive);
|
|
|
+ if (!isRegularExpressionSupported(exp)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Store current state of the cursor.
|
|
|
@@ -1553,7 +1565,7 @@ QList<QTextCursor> VEditor::findTextAllInRange(const QTextDocument *p_doc,
|
|
|
int p_end)
|
|
|
{
|
|
|
QList<QTextCursor> results;
|
|
|
- if (!p_reg.isValid()) {
|
|
|
+ if (!isRegularExpressionSupported(p_reg)) {
|
|
|
return results;
|
|
|
}
|
|
|
|