Python / lint-format (pull_request) Successful in 26s
Lint & Format (JS/TS) / lint-format (pull_request) Successful in 30s
Python / test (pull_request) Successful in 50s
Lint & Format (Rust) / lint-format (pull_request) Successful in 1m43s
C++ / build (pull_request) Successful in 2m25s
57 lines
1.2 KiB
C++
57 lines
1.2 KiB
C++
#include "qalculator.hpp"
|
|
|
|
#include <libqalculate/qalculate.h>
|
|
|
|
namespace ZShell {
|
|
|
|
Qalculator::Qalculator(QObject* parent) : QObject(parent) {
|
|
int x;
|
|
if (!CALCULATOR) {
|
|
new Calculator();
|
|
CALCULATOR->loadExchangeRates();
|
|
CALCULATOR->loadGlobalDefinitions();
|
|
CALCULATOR->loadLocalDefinitions();
|
|
}
|
|
}
|
|
|
|
QString Qalculator::eval(const QString& expr, bool printExpr) const {
|
|
if (expr.isEmpty()) {
|
|
return QString();
|
|
}
|
|
|
|
EvaluationOptions eo;
|
|
PrintOptions po;
|
|
|
|
std::string parsed;
|
|
std::string result = CALCULATOR->calculateAndPrint(
|
|
CALCULATOR->unlocalizeExpression(expr.toStdString(), eo.parse_options),
|
|
100,
|
|
eo,
|
|
po,
|
|
&parsed);
|
|
|
|
std::string error;
|
|
while (CALCULATOR->message()) {
|
|
if (!CALCULATOR->message()->message().empty()) {
|
|
if (CALCULATOR->message()->type() == MESSAGE_ERROR) {
|
|
error += "error: ";
|
|
} else if (CALCULATOR->message()->type() == MESSAGE_WARNING) {
|
|
error += "warning: ";
|
|
}
|
|
error += CALCULATOR->message()->message();
|
|
}
|
|
CALCULATOR->nextMessage();
|
|
}
|
|
if (!error.empty()) {
|
|
return QString::fromStdString(error);
|
|
}
|
|
|
|
if (printExpr) {
|
|
return QString("%1 = %2").arg(parsed).arg(result);
|
|
}
|
|
|
|
return QString::fromStdString(result);
|
|
}
|
|
|
|
} // namespace ZShell
|