diff -r ae7f7fbb9cda -r 07e65a4c6611 src/documentmanager.cpp --- a/src/documentmanager.cpp Mon Jul 04 15:37:22 2022 +0300 +++ b/src/documentmanager.cpp Mon Jul 04 19:53:13 2022 +0300 @@ -111,6 +111,7 @@ * @param openType rationale behind opening this file * @returns model id, or no value on error */ +#include std::optional DocumentManager::openModel( const QString& path, QTextStream& errorStream, @@ -119,10 +120,9 @@ QFile file{path}; const QString name = pathToName(QFileInfo{path}); file.open(QFile::ReadOnly | QFile::Text); - std::unique_ptr newModel = std::make_unique(nullptr); - QTextStream textStream{&file}; - Parser parser{textStream}; - parser.parseBody(*newModel); + std::unique_ptr newModel = std::make_unique(nullptr); + newModel->setDocumentLayout(new QPlainTextDocumentLayout{newModel.get()}); + newModel->setPlainText(file.readAll()); std::optional result; if (file.error() == QFile::NoError) { @@ -195,8 +195,7 @@ QSaveFile file{info->path}; file.setDirectWriteFallback(true); if (file.open(QSaveFile::WriteOnly)) { - QTextStream stream{&file}; - ::save(*info->model.get(), &stream); + file.write(info->model->toPlainText().toUtf8()); const bool commitSucceeded = file.commit(); if (not commitSucceeded) { errors << QObject::tr("Could not save: %1").arg(file.errorString()); @@ -332,10 +331,7 @@ } } }; - QObject::connect(model, &Model::dataChanged, modelModified); - QObject::connect(model, &Model::rowsInserted, modelModified); - QObject::connect(model, &Model::rowsRemoved, modelModified); - QObject::connect(model, &Model::modelReset, modelModified); + QObject::connect(model, &QTextDocument::contentsChanged, modelModified); } } @@ -359,9 +355,12 @@ static std::set referenceNames(const Model* model) { std::set result; - iterate>(*model, [&result](const SubfileReference& ref){ - result.insert(ref.name); - }); + for (const QString& line : model->toPlainText().split("\n")) { + const opt parsed = parse(line); + if (parsed.has_value() and std::holds_alternative(*parsed)) { + result.insert(std::get(*parsed).value.name); + } + } return result; }