/
SerZok
/
LIDE
Обзор
Документация
Войти
/
SerZok
/
LIDE
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/util/repl_console/repl_controller.cpp
131 строка
3 KB
SerZok
fix [Парсер]: Доведение парсера до ума
08 апр 2026, 11:40
08 апр 2026, 11:40
82e8a7a
Код
Авторство
О чём код?
#include "repl_controller.h" #include <QDebug> ReplController::ReplController(QObject* parent) : QObject(parent) , m_settings(Settings::instance()) { setupConnections(); } ReplController::~ReplController() { stop(); } void ReplController::setupConnections() { connect(&process, &ReplProcess::stdoutData, &parser, &ReplParser::pushData); connect(&process, &ReplProcess::stderrData, &parser, &ReplParser::pushData); connect(&process, &ReplProcess::started, this, &ReplController::onProcessStarted); connect(&process, &ReplProcess::finished, this, &ReplController::onProcessFinished); connect(&process, &ReplProcess::errorOccurred, this, &ReplController::onProcessError); connect(&parser, &ReplParser::messageReady, this, &ReplController::onParserMessage); connect(&parser, &ReplParser::errorLocationAvailable, this, &ReplController::errorLocationAvailable); connect(&parser, &ReplParser::sbclTerminated, this, [this]() { if (m_settings->replAutoRestart()) { qDebug() << "[ReplController] SBCL terminated, auto-restarting..."; restart(); } }); } void ReplController::start() { if (!process.start()) { ReplMessage msg; msg.type = ReplMessageType::Error; msg.text = "Failed to start SBCL"; emit messageReady(msg); } } void ReplController::stop() { if (!process.isRunning()) return; process.stop(); } void ReplController::restart() { if (process.isRunning()) { m_restartPending = true; stop(); } else { start(); } } void ReplController::sendCommand(const QString& cmd) { if (cmd.isEmpty()) { interrupt(); return; } QString command = cmd; if (!command.endsWith('\n')) { command += '\n'; } // Нормализация переносов command.replace(QChar(0x2028), "\n"); command.replace(QChar(0x2029), "\n"); command.replace("\r\n", "\n"); if (!command.endsWith('\n')) command += '\n'; qDebug() << "Отправка команды:" << command; process.send(command); } void ReplController::interrupt() { process.interrupt(); } void ReplController::setFormattedOutput(bool enabled) { m_formattedOutput = enabled; } void ReplController::onProcessStarted() { parser.reset(); emit started(); } void ReplController::onProcessFinished() { emit finished(); if (m_restartPending) { m_restartPending = false; start(); } } void ReplController::onProcessError(const QString& error) { ReplMessage msg; msg.type = ReplMessageType::Error; msg.text = error; emit messageReady(msg); } void ReplController::onParserMessage(const ReplMessage& msg) { emit messageReady(msg); } bool ReplController::isRunning() { if (process.isRunning()) return true; return false; }