forked from qt-creator/qt-creator
more cosmetic changes
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
** 1.2, included in the file GPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
***************************************************************************/
|
||||
|
||||
#include "filesearch.h"
|
||||
|
||||
#include <QtCore/QFile>
|
||||
@@ -44,162 +45,164 @@
|
||||
using namespace Core::Utils;
|
||||
|
||||
namespace {
|
||||
void runFileSearch(QFutureInterface<FileSearchResult> &future,
|
||||
QString searchTerm,
|
||||
QStringList files,
|
||||
QTextDocument::FindFlags flags)
|
||||
{
|
||||
future.setProgressRange(0, files.size());
|
||||
int numFilesSearched = 0;
|
||||
int numMatches = 0;
|
||||
|
||||
bool caseInsensitive = !(flags & QTextDocument::FindCaseSensitively);
|
||||
bool wholeWord = (flags & QTextDocument::FindWholeWords);
|
||||
void runFileSearch(QFutureInterface<FileSearchResult> &future,
|
||||
QString searchTerm,
|
||||
QStringList files,
|
||||
QTextDocument::FindFlags flags)
|
||||
{
|
||||
future.setProgressRange(0, files.size());
|
||||
int numFilesSearched = 0;
|
||||
int numMatches = 0;
|
||||
|
||||
QByteArray sa = searchTerm.toUtf8();
|
||||
int scMaxIndex = sa.length()-1;
|
||||
const char *sc = sa.constData();
|
||||
bool caseInsensitive = !(flags & QTextDocument::FindCaseSensitively);
|
||||
bool wholeWord = (flags & QTextDocument::FindWholeWords);
|
||||
|
||||
QByteArray sal = searchTerm.toLower().toUtf8();
|
||||
const char *scl = sal.constData();
|
||||
QByteArray sa = searchTerm.toUtf8();
|
||||
int scMaxIndex = sa.length()-1;
|
||||
const char *sc = sa.constData();
|
||||
|
||||
QByteArray sau = searchTerm.toUpper().toUtf8();
|
||||
const char *scu = sau.constData();
|
||||
QByteArray sal = searchTerm.toLower().toUtf8();
|
||||
const char *scl = sal.constData();
|
||||
|
||||
int chunkSize = qMax(100000, sa.length());
|
||||
QByteArray sau = searchTerm.toUpper().toUtf8();
|
||||
const char *scu = sau.constData();
|
||||
|
||||
foreach (QString s, files) {
|
||||
if (future.isPaused())
|
||||
future.waitForResume();
|
||||
if (future.isCanceled()) {
|
||||
future.setProgressValueAndText(numFilesSearched,
|
||||
qApp->translate("FileSearch", "%1: canceled. %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
break;
|
||||
}
|
||||
QFile file(s);
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
continue;
|
||||
int lineNr = 1;
|
||||
const char *startOfLastLine = NULL;
|
||||
int chunkSize = qMax(100000, sa.length());
|
||||
|
||||
bool firstChunk = true;
|
||||
while (!file.atEnd()) {
|
||||
if (!firstChunk)
|
||||
file.seek(file.pos()-sa.length()+1);
|
||||
foreach (QString s, files) {
|
||||
if (future.isPaused())
|
||||
future.waitForResume();
|
||||
if (future.isCanceled()) {
|
||||
future.setProgressValueAndText(numFilesSearched,
|
||||
qApp->translate("FileSearch", "%1: canceled. %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
break;
|
||||
}
|
||||
QFile file(s);
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
continue;
|
||||
int lineNr = 1;
|
||||
const char *startOfLastLine = NULL;
|
||||
|
||||
const QByteArray chunk = file.read(chunkSize);
|
||||
const char *chunkPtr = chunk.constData();
|
||||
startOfLastLine = chunkPtr;
|
||||
for (const char *regionPtr = chunkPtr; regionPtr < chunkPtr + chunk.length()-scMaxIndex; ++regionPtr) {
|
||||
const char *regionEnd = regionPtr + scMaxIndex;
|
||||
bool firstChunk = true;
|
||||
while (!file.atEnd()) {
|
||||
if (!firstChunk)
|
||||
file.seek(file.pos()-sa.length()+1);
|
||||
|
||||
if (*regionPtr == '\n') {
|
||||
startOfLastLine = regionPtr + 1;
|
||||
++lineNr;
|
||||
const QByteArray chunk = file.read(chunkSize);
|
||||
const char *chunkPtr = chunk.constData();
|
||||
startOfLastLine = chunkPtr;
|
||||
for (const char *regionPtr = chunkPtr; regionPtr < chunkPtr + chunk.length()-scMaxIndex; ++regionPtr) {
|
||||
const char *regionEnd = regionPtr + scMaxIndex;
|
||||
|
||||
if (*regionPtr == '\n') {
|
||||
startOfLastLine = regionPtr + 1;
|
||||
++lineNr;
|
||||
}
|
||||
else if (
|
||||
// case sensitive
|
||||
(!caseInsensitive && *regionPtr == sc[0] && *regionEnd == sc[scMaxIndex])
|
||||
||
|
||||
// case insensitive
|
||||
(caseInsensitive && (*regionPtr == scl[0] || *regionPtr == scu[0])
|
||||
&& (*regionEnd == scl[scMaxIndex] || *regionEnd == scu[scMaxIndex]))
|
||||
) {
|
||||
const char *afterRegion = regionEnd + 1;
|
||||
const char *beforeRegion = regionPtr - 1;
|
||||
bool equal = true;
|
||||
if (wholeWord &&
|
||||
( ((*beforeRegion >= '0' && *beforeRegion <= '9') || *beforeRegion >= 'A')
|
||||
|| ((*afterRegion >= '0' && *afterRegion <= '9') || *afterRegion >= 'A')))
|
||||
{
|
||||
equal = false;
|
||||
}
|
||||
else if (
|
||||
// case sensitive
|
||||
(!caseInsensitive && *regionPtr == sc[0] && *regionEnd == sc[scMaxIndex])
|
||||
||
|
||||
// case insensitive
|
||||
(caseInsensitive && (*regionPtr == scl[0] || *regionPtr == scu[0])
|
||||
&& (*regionEnd == scl[scMaxIndex] || *regionEnd == scu[scMaxIndex]))
|
||||
) {
|
||||
const char *afterRegion = regionEnd + 1;
|
||||
const char *beforeRegion = regionPtr - 1;
|
||||
bool equal = true;
|
||||
if (wholeWord &&
|
||||
( ((*beforeRegion >= '0' && *beforeRegion <= '9') || *beforeRegion >= 'A')
|
||||
|| ((*afterRegion >= '0' && *afterRegion <= '9') || *afterRegion >= 'A')))
|
||||
{
|
||||
equal = false;
|
||||
}
|
||||
|
||||
int regionIndex = 1;
|
||||
for (const char *regionCursor = regionPtr + 1; regionCursor < regionEnd; ++regionCursor, ++regionIndex) {
|
||||
if ( // case sensitive
|
||||
(!caseInsensitive && equal && *regionCursor != sc[regionIndex])
|
||||
||
|
||||
// case insensitive
|
||||
(caseInsensitive && equal && *regionCursor != sc[regionIndex] && *regionCursor != scl[regionIndex] && *regionCursor != scu[regionIndex])
|
||||
) {
|
||||
equal = false;
|
||||
}
|
||||
int regionIndex = 1;
|
||||
for (const char *regionCursor = regionPtr + 1; regionCursor < regionEnd; ++regionCursor, ++regionIndex) {
|
||||
if ( // case sensitive
|
||||
(!caseInsensitive && equal && *regionCursor != sc[regionIndex])
|
||||
||
|
||||
// case insensitive
|
||||
(caseInsensitive && equal && *regionCursor != sc[regionIndex] && *regionCursor != scl[regionIndex] && *regionCursor != scu[regionIndex])
|
||||
) {
|
||||
equal = false;
|
||||
}
|
||||
if (equal) {
|
||||
int textLength = chunk.length() - (startOfLastLine - chunkPtr);
|
||||
if (textLength > 0) {
|
||||
QByteArray res;
|
||||
res.reserve(256);
|
||||
int i = 0;
|
||||
int n = 0;
|
||||
while (startOfLastLine[i] != '\n' && startOfLastLine[i] != '\r' && i < textLength && n++ < 256)
|
||||
res.append(startOfLastLine[i++]);
|
||||
future.reportResult(FileSearchResult(QDir::toNativeSeparators(s), lineNr, QString(res),
|
||||
regionPtr - startOfLastLine, sa.length()));
|
||||
++numMatches;
|
||||
}
|
||||
}
|
||||
if (equal) {
|
||||
int textLength = chunk.length() - (startOfLastLine - chunkPtr);
|
||||
if (textLength > 0) {
|
||||
QByteArray res;
|
||||
res.reserve(256);
|
||||
int i = 0;
|
||||
int n = 0;
|
||||
while (startOfLastLine[i] != '\n' && startOfLastLine[i] != '\r' && i < textLength && n++ < 256)
|
||||
res.append(startOfLastLine[i++]);
|
||||
future.reportResult(FileSearchResult(QDir::toNativeSeparators(s), lineNr, QString(res),
|
||||
regionPtr - startOfLastLine, sa.length()));
|
||||
++numMatches;
|
||||
}
|
||||
}
|
||||
}
|
||||
firstChunk = false;
|
||||
}
|
||||
++numFilesSearched;
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 of %4 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched).arg(files.size()));
|
||||
firstChunk = false;
|
||||
}
|
||||
if (!future.isCanceled())
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
++numFilesSearched;
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 of %4 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched).arg(files.size()));
|
||||
}
|
||||
if (!future.isCanceled())
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
}
|
||||
|
||||
void runFileSearchRegExp(QFutureInterface<FileSearchResult> &future,
|
||||
QString searchTerm,
|
||||
QStringList files,
|
||||
QTextDocument::FindFlags flags)
|
||||
{
|
||||
future.setProgressRange(0, files.size());
|
||||
int numFilesSearched = 0;
|
||||
int numMatches = 0;
|
||||
if (flags & QTextDocument::FindWholeWords)
|
||||
searchTerm = QString("\b%1\b").arg(searchTerm);
|
||||
Qt::CaseSensitivity caseSensitivity = (flags & QTextDocument::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive;
|
||||
QRegExp expression(searchTerm, caseSensitivity);
|
||||
void runFileSearchRegExp(QFutureInterface<FileSearchResult> &future,
|
||||
QString searchTerm,
|
||||
QStringList files,
|
||||
QTextDocument::FindFlags flags)
|
||||
{
|
||||
future.setProgressRange(0, files.size());
|
||||
int numFilesSearched = 0;
|
||||
int numMatches = 0;
|
||||
if (flags & QTextDocument::FindWholeWords)
|
||||
searchTerm = QString("\b%1\b").arg(searchTerm);
|
||||
Qt::CaseSensitivity caseSensitivity = (flags & QTextDocument::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive;
|
||||
QRegExp expression(searchTerm, caseSensitivity);
|
||||
|
||||
foreach (QString s, files) {
|
||||
if (future.isPaused())
|
||||
future.waitForResume();
|
||||
if (future.isCanceled()) {
|
||||
future.setProgressValueAndText(numFilesSearched,
|
||||
qApp->translate("FileSearch", "%1: canceled. %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
break;
|
||||
}
|
||||
QFile file(s);
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
continue;
|
||||
QTextStream stream(&file);
|
||||
int lineNr = 1;
|
||||
QString line;
|
||||
while (!stream.atEnd()) {
|
||||
line = stream.readLine();
|
||||
int pos = 0;
|
||||
while ((pos = expression.indexIn(line, pos)) != -1) {
|
||||
future.reportResult(FileSearchResult(QDir::toNativeSeparators(s), lineNr, line,
|
||||
pos, expression.matchedLength()));
|
||||
pos += expression.matchedLength();
|
||||
}
|
||||
++lineNr;
|
||||
}
|
||||
++numFilesSearched;
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 of %4 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched).arg(files.size()));
|
||||
foreach (QString s, files) {
|
||||
if (future.isPaused())
|
||||
future.waitForResume();
|
||||
if (future.isCanceled()) {
|
||||
future.setProgressValueAndText(numFilesSearched,
|
||||
qApp->translate("FileSearch", "%1: canceled. %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
break;
|
||||
}
|
||||
if (!future.isCanceled())
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
QFile file(s);
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
continue;
|
||||
QTextStream stream(&file);
|
||||
int lineNr = 1;
|
||||
QString line;
|
||||
while (!stream.atEnd()) {
|
||||
line = stream.readLine();
|
||||
int pos = 0;
|
||||
while ((pos = expression.indexIn(line, pos)) != -1) {
|
||||
future.reportResult(FileSearchResult(QDir::toNativeSeparators(s), lineNr, line,
|
||||
pos, expression.matchedLength()));
|
||||
pos += expression.matchedLength();
|
||||
}
|
||||
++lineNr;
|
||||
}
|
||||
++numFilesSearched;
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 of %4 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched).arg(files.size()));
|
||||
}
|
||||
if (!future.isCanceled())
|
||||
future.setProgressValueAndText(numFilesSearched, qApp->translate("FileSearch", "%1: %2 occurrences found in %3 files.").
|
||||
arg(searchTerm).arg(numMatches).arg(numFilesSearched));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user