File indexing completed on 2024-05-12 09:56:57
0001 /* 0002 SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com> 0003 SPDX-FileCopyrightText: 2020 Tomaz Canabrava <tcanabrava@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "RegExpFilter.h" 0009 0010 #include "RegExpFilterHotspot.h" 0011 0012 using namespace Konsole; 0013 0014 RegExpFilter::RegExpFilter() 0015 : _searchText(QRegularExpression()) 0016 { 0017 } 0018 0019 void RegExpFilter::setRegExp(const QRegularExpression ®Exp) 0020 { 0021 _searchText = regExp; 0022 _searchText.optimize(); 0023 } 0024 0025 QRegularExpression RegExpFilter::regExp() const 0026 { 0027 return _searchText; 0028 } 0029 0030 void RegExpFilter::process() 0031 { 0032 const QString *text = buffer(); 0033 0034 Q_ASSERT(text); 0035 0036 if (!_searchText.isValid() || _searchText.pattern().isEmpty()) { 0037 return; 0038 } 0039 0040 QRegularExpressionMatchIterator iterator(_searchText.globalMatch(*text)); 0041 int prevline = 0; 0042 while (iterator.hasNext()) { 0043 QRegularExpressionMatch match(iterator.next()); 0044 std::pair<int, int> start = getLineColumn(prevline, match.capturedStart()); 0045 prevline = start.first; 0046 std::pair<int, int> end = getLineColumn(prevline, match.capturedEnd()); 0047 prevline = end.first; 0048 0049 QSharedPointer<HotSpot> spot(newHotSpot(start.first, start.second, end.first, end.second, match.capturedTexts())); 0050 0051 if (spot == nullptr) { 0052 continue; 0053 } 0054 0055 addHotSpot(spot); 0056 } 0057 } 0058 0059 QSharedPointer<HotSpot> RegExpFilter::newHotSpot(int startLine, int startColumn, int endLine, int endColumn, const QStringList &capturedTexts) 0060 { 0061 return QSharedPointer<HotSpot>(new RegExpFilterHotSpot(startLine, startColumn, endLine, endColumn, capturedTexts)); 0062 }