File indexing completed on 2024-04-28 11:20:31

0001 /*
0002     SPDX-FileCopyrightText: 2009 Aleix Pol <aleixpol@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "kalgebraexpression.h"
0008 
0009 #include "textresult.h"
0010 #include "helpresult.h"
0011 #include "kalgebrasession.h"
0012 #include <KLocalizedString>
0013 
0014 #include <analitza/expression.h>
0015 #include <analitza/expressionstream.h>
0016 #include <analitza/analyzer.h>
0017 
0018 KAlgebraExpression::KAlgebraExpression( KAlgebraSession* session, bool internal)
0019     : Cantor::Expression(session, internal)
0020 {}
0021 
0022 void KAlgebraExpression::evaluate()
0023 {
0024     setStatus(Cantor::Expression::Computing);
0025 
0026     Analitza::Analyzer* a=static_cast<KAlgebraSession*>(session())->analyzer();
0027     Analitza::Expression res;
0028     QString cmd = command();
0029     QTextStream stream(&cmd);
0030 
0031     Analitza::ExpressionStream s(&stream);
0032     for(; !s.atEnd();) {
0033         a->setExpression(s.next());
0034         res = a->evaluate();
0035 
0036         if(!a->isCorrect())
0037             break;
0038     }
0039 
0040     if(a->isCorrect()) {
0041         setResult(new Cantor::TextResult(res.toString()));
0042         setStatus(Cantor::Expression::Done);
0043     } else {
0044         setErrorMessage(i18n("Error: %1", a->errors().join(QLatin1String("\n"))));
0045         setStatus(Cantor::Expression::Error);
0046     }
0047 }