diff options
Diffstat (limited to 'src/plugins/projectexplorer/ansifilterparser.cpp')
-rw-r--r-- | src/plugins/projectexplorer/ansifilterparser.cpp | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/src/plugins/projectexplorer/ansifilterparser.cpp b/src/plugins/projectexplorer/ansifilterparser.cpp deleted file mode 100644 index a2db2c1a6f..0000000000 --- a/src/plugins/projectexplorer/ansifilterparser.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "ansifilterparser.h" - -namespace { -enum AnsiState { - PLAIN, - ANSI_START, - ANSI_CSI, - ANSI_SEQUENCE, - ANSI_WAITING_FOR_ST, - ANSI_ST_STARTED -}; -} // namespace - -using namespace ProjectExplorer; - -AnsiFilterParser::AnsiFilterParser() -{ - setObjectName(QLatin1String("AnsiFilterParser")); -} - -void AnsiFilterParser::stdOutput(const QString &line) -{ - IOutputParser::stdOutput(filterLine(line)); -} - -void AnsiFilterParser::stdError(const QString &line) -{ - IOutputParser::stdError(filterLine(line)); -} - -QString AnsiFilterParser::filterLine(const QString &line) -{ - QString result; - result.reserve(line.count()); - - static AnsiState state = PLAIN; - foreach (const QChar c, line) { - unsigned int val = c.unicode(); - switch (state) { - case PLAIN: - if (val == 27) // 'ESC' - state = ANSI_START; - else if (val == 155) // equivalent to 'ESC'-'[' - state = ANSI_CSI; - else - result.append(c); - break; - case ANSI_START: - if (val == 91) // [ - state = ANSI_CSI; - else if (val == 80 || val == 93 || val == 94 || val == 95) // 'P', ']', '^' and '_' - state = ANSI_WAITING_FOR_ST; - else if (val >= 64 && val <= 95) - state = PLAIN; - else - state = ANSI_SEQUENCE; - break; - case ANSI_CSI: - if (val >= 64 && val <= 126) // Anything between '@' and '~' - state = PLAIN; - break; - case ANSI_SEQUENCE: - if (val >= 64 && val <= 95) // Anything between '@' and '_' - state = PLAIN; - break; - case ANSI_WAITING_FOR_ST: - if (val == 7) // 'BEL' - state = PLAIN; - if (val == 27) // 'ESC' - state = ANSI_ST_STARTED; - break; - case ANSI_ST_STARTED: - if (val == 92) // '\' - state = PLAIN; - else - state = ANSI_WAITING_FOR_ST; - break; - } - } - return result; -} - -// Unit tests: -#ifdef WITH_TESTS -# include <QTest> - -# include "projectexplorer.h" -# include "outputparser_test.h" -# include "task.h" - -void ProjectExplorerPlugin::testAnsiFilterOutputParser_data() -{ - QTest::addColumn<QString>("input"); - QTest::addColumn<OutputParserTester::Channel>("inputChannel"); - QTest::addColumn<QString>("childStdOutLines"); - QTest::addColumn<QString>("childStdErrLines"); - QTest::addColumn<QString>("outputLines"); - - QTest::newRow("pass-through stdout") - << QString::fromLatin1("Sometext") << OutputParserTester::STDOUT - << QString::fromLatin1("Sometext\n") << QString(); - QTest::newRow("pass-through stderr") - << QString::fromLatin1("Sometext") << OutputParserTester::STDERR - << QString() << QString::fromLatin1("Sometext\n"); - - QString input = QString::fromLatin1("te") + QChar(27) + QString::fromLatin1("Nst"); - QTest::newRow("ANSI: ESC-N") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("^ignored") + QChar(27) + QLatin1String("\\st"); - QTest::newRow("ANSI: ESC-^ignoredESC-\\") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("]0;ignored") + QChar(7) + QLatin1String("st"); - QTest::newRow("ANSI: window title change") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("[Ast"); - QTest::newRow("ANSI: cursor up") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("[2Ast"); - QTest::newRow("ANSI: cursor up (with int parameter)") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("[2;3Hst"); - QTest::newRow("ANSI: position cursor") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); - input = QString::fromLatin1("te") + QChar(27) + QLatin1String("[31;1mst"); - QTest::newRow("ANSI: bold red") - << input << OutputParserTester::STDOUT - << QString::fromLatin1("test\n") << QString(); -} - -void ProjectExplorerPlugin::testAnsiFilterOutputParser() -{ - OutputParserTester testbench; - testbench.appendOutputParser(new AnsiFilterParser); - QFETCH(QString, input); - QFETCH(OutputParserTester::Channel, inputChannel); - QFETCH(QString, childStdOutLines); - QFETCH(QString, childStdErrLines); - - testbench.testParsing(input, inputChannel, - Tasks(), childStdOutLines, childStdErrLines, - QString()); -} - -#endif |