Translation formula.
--HG-- branch : feature
This commit is contained in:
parent
b94ab9bda6
commit
0f4cd08eed
|
@ -40,20 +40,7 @@ int Calculator::iVal = -1;
|
||||||
Calculator::Calculator(const VContainer *data)
|
Calculator::Calculator(const VContainer *data)
|
||||||
:QmuParser(), vVarVal(nullptr)
|
:QmuParser(), vVarVal(nullptr)
|
||||||
{
|
{
|
||||||
//String with all unique symbols for supported alpabets.
|
InitCharacterSets();
|
||||||
// See script alphabets.py for generation and more information.
|
|
||||||
const QString symbols = QStringLiteral("ցЀĆЈVӧĎАғΕĖӅИқΝĞơРңњΥĦШҫ̆جگĮаҳѕεشԶиһνԾрυلՆӝшËՎҔPÓՖXӛӟŞӣզhëծpóӞնxßվāŁЃֆĉЋCŬđ"
|
|
||||||
"ҐГΒęҘЛΚŘġҠУGاհЫدԱҰгβطԹõлκKՁÀуςهՉÈыvیՑÐSOřӘћաőcӐթèkàѓżűðsķչøӥӔĀփїІĈЎґĐΗЖҙĘȚ"
|
|
||||||
"ΟОҡĠآΧЦتЮұİزηжԸغοоÁՀقχцÉՈيюÑՐђӋіәťӆўáŠĺѐfөըnñŰӤӨӹոľЁրăЉŭċБӸēłΔҖЙŤěΜӜDСձģΤӰ"
|
|
||||||
"ЩīņحҮбưԳصδHйԻŇμӲӴсՃمτƠщՋєLQŹՓŕÖYśÞaգĽæiŽիӓîqճöyջþĂօЄӦĊЌΑĒДҗјΙȘĚМΡéĵĢФūӚΩبĪ"
|
|
||||||
"ЬүќαذԲдҷιظԺмρՂфÇωوՊьÏՒTŚĻJբdçժlïӪղtպӫAւąЇčŃЏĕӯЗΖEțŮĝПΞأĥĹЧΦثÆӳЯIسŲԵзζԽпξكՅ"
|
|
||||||
"ÄчφNMՍӌяӢՕÔWÎŝÜџёźեägխoӒյôwĶBžսüЂĄև̈ЊČƏљΓВҕĔӮΛКĜΣТҥĤکЪƯخγвŅԴŪضλкԼĴσтÅՄنъÍՌR"
|
|
||||||
"ӕՔZÝŜbåդﻩjíլļrӵմzýռپêЅքćچЍďӱҒЕůėژșΘØҚНğńءΠFҢХħΨҪЭųįҶرҲеԷňعθҺнԿفπÂхՇψÊэšՏÒU"
|
|
||||||
"əÚѝŻşҤӑâeէŐımկòuշÕúտŔ");
|
|
||||||
|
|
||||||
// Defining identifier character sets
|
|
||||||
DefineNameChars(QStringLiteral("0123456789_") + symbols);
|
|
||||||
DefineOprtChars(symbols + QStringLiteral("+-*^/?<>=#!$%&|~'_"));
|
|
||||||
|
|
||||||
// Add variables
|
// Add variables
|
||||||
InitVariables(data);
|
InitVariables(data);
|
||||||
|
@ -62,8 +49,35 @@ Calculator::Calculator(const VContainer *data)
|
||||||
DefinePostfixOprt(cm_Oprt, CmUnit);
|
DefinePostfixOprt(cm_Oprt, CmUnit);
|
||||||
DefinePostfixOprt(mm_Oprt, MmUnit);
|
DefinePostfixOprt(mm_Oprt, MmUnit);
|
||||||
DefinePostfixOprt(in_Oprt, InchUnit);
|
DefinePostfixOprt(in_Oprt, InchUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
Calculator::Calculator(const QString &formula, bool fromUser)
|
||||||
|
:QmuParser(), vVarVal(nullptr)
|
||||||
|
{
|
||||||
|
InitCharacterSets();
|
||||||
SetVarFactory(AddVariable, this);
|
SetVarFactory(AddVariable, this);
|
||||||
|
|
||||||
|
// Add unary operators
|
||||||
|
if(fromUser)
|
||||||
|
{
|
||||||
|
DefinePostfixOprt(qApp->PostfixOperator(cm_Oprt), CmUnit);
|
||||||
|
DefinePostfixOprt(qApp->PostfixOperator(mm_Oprt), MmUnit);
|
||||||
|
DefinePostfixOprt(qApp->PostfixOperator(in_Oprt), InchUnit);
|
||||||
|
|
||||||
|
QLocale loc = QLocale();
|
||||||
|
SetDecSep(loc.decimalPoint().toLatin1());
|
||||||
|
SetThousandsSep(loc.groupSeparator().toLatin1());
|
||||||
|
SetArgSep(';');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DefinePostfixOprt(cm_Oprt, CmUnit);
|
||||||
|
DefinePostfixOprt(mm_Oprt, MmUnit);
|
||||||
|
DefinePostfixOprt(in_Oprt, InchUnit);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetExpr(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
Calculator::~Calculator()
|
Calculator::~Calculator()
|
||||||
|
@ -210,6 +224,24 @@ void Calculator::InitVariables(const VContainer *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Calculator::InitCharacterSets()
|
||||||
|
{
|
||||||
|
//String with all unique symbols for supported alpabets.
|
||||||
|
// See script alphabets.py for generation and more information.
|
||||||
|
const QString symbols = QStringLiteral("ցЀĆЈVӧĎАғΕĖӅИқΝĞơРңњΥĦШҫ̆جگĮаҳѕεشԶиһνԾрυلՆӝшËՎҔPÓՖXӛӟŞӣզhëծpóӞնxßվāŁЃֆĉЋCŬđ"
|
||||||
|
"ҐГΒęҘЛΚŘġҠУGاհЫدԱҰгβطԹõлκKՁÀуςهՉÈыvیՑÐSOřӘћաőcӐթèkàѓżűðsķչøӥӔĀփїІĈЎґĐΗЖҙĘȚ"
|
||||||
|
"ΟОҡĠآΧЦتЮұİزηжԸغοоÁՀقχцÉՈيюÑՐђӋіәťӆўáŠĺѐfөըnñŰӤӨӹոľЁրăЉŭċБӸēłΔҖЙŤěΜӜDСձģΤӰ"
|
||||||
|
"ЩīņحҮбưԳصδHйԻŇμӲӴсՃمτƠщՋєLQŹՓŕÖYśÞaգĽæiŽիӓîqճöyջþĂօЄӦĊЌΑĒДҗјΙȘĚМΡéĵĢФūӚΩبĪ"
|
||||||
|
"ЬүќαذԲдҷιظԺмρՂфÇωوՊьÏՒTŚĻJբdçժlïӪղtպӫAւąЇčŃЏĕӯЗΖEțŮĝПΞأĥĹЧΦثÆӳЯIسŲԵзζԽпξكՅ"
|
||||||
|
"ÄчφNMՍӌяӢՕÔWÎŝÜџёźեägխoӒյôwĶBžսüЂĄև̈ЊČƏљΓВҕĔӮΛКĜΣТҥĤکЪƯخγвŅԴŪضλкԼĴσтÅՄنъÍՌR"
|
||||||
|
"ӕՔZÝŜbåդﻩjíլļrӵմzýռپêЅքćچЍďӱҒЕůėژșΘØҚНğńءΠFҢХħΨҪЭųįҶرҲеԷňعθҺнԿفπÂхՇψÊэšՏÒU"
|
||||||
|
"əÚѝŻşҤӑâeէŐımկòuշÕúտŔ");
|
||||||
|
|
||||||
|
// Defining identifier character sets
|
||||||
|
DefineNameChars(QStringLiteral("0123456789_") + symbols);
|
||||||
|
DefineOprtChars(symbols + QStringLiteral("+-*^/?<>=#!$%&|~'_"));
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
qreal Calculator::CmUnit(qreal val)
|
qreal Calculator::CmUnit(qreal val)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,7 +37,8 @@ using namespace qmu;
|
||||||
class Calculator:public QmuParser
|
class Calculator:public QmuParser
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit Calculator(const VContainer *data);
|
Calculator(const VContainer *data);
|
||||||
|
Calculator(const QString &formula, bool fromUser = true);
|
||||||
~Calculator();
|
~Calculator();
|
||||||
qreal EvalFormula(const QString &formula);
|
qreal EvalFormula(const QString &formula);
|
||||||
private:
|
private:
|
||||||
|
@ -45,6 +46,7 @@ private:
|
||||||
qreal *vVarVal;
|
qreal *vVarVal;
|
||||||
static int iVal;
|
static int iVal;
|
||||||
void InitVariables(const VContainer *data);
|
void InitVariables(const VContainer *data);
|
||||||
|
void InitCharacterSets();
|
||||||
static qreal CmUnit(qreal val);
|
static qreal CmUnit(qreal val);
|
||||||
static qreal MmUnit(qreal val);
|
static qreal MmUnit(qreal val);
|
||||||
static qreal InchUnit(qreal val);
|
static qreal InchUnit(qreal val);
|
||||||
|
|
|
@ -119,7 +119,7 @@ void DialogAlongLine::setFirstPointId(const quint32 &value, const quint32 &id)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogAlongLine::setFormula(const QString &value)
|
void DialogAlongLine::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,7 +157,7 @@ inline QString DialogAlongLine::getTypeLine() const
|
||||||
|
|
||||||
inline QString DialogAlongLine::getFormula() const
|
inline QString DialogAlongLine::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline quint32 DialogAlongLine::getFirstPointId() const
|
inline quint32 DialogAlongLine::getFirstPointId() const
|
||||||
|
|
|
@ -128,7 +128,7 @@ void DialogBisector::setTypeLine(const QString &value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogBisector::setFormula(const QString &value)
|
void DialogBisector::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -167,7 +167,7 @@ inline QString DialogBisector::getTypeLine() const
|
||||||
|
|
||||||
inline QString DialogBisector::getFormula() const
|
inline QString DialogBisector::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline quint32 DialogBisector::getFirstPointId() const
|
inline quint32 DialogBisector::getFirstPointId() const
|
||||||
|
|
|
@ -91,7 +91,7 @@ void DialogCutArc::setArcId(const quint32 &value, const quint32 &id)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutArc::setFormula(const QString &value)
|
void DialogCutArc::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ public:
|
||||||
* @brief getFormula return string with formula length
|
* @brief getFormula return string with formula length
|
||||||
* @return formula
|
* @return formula
|
||||||
*/
|
*/
|
||||||
QString getFormula() const {return formula;}
|
QString getFormula() const {return qApp->FormulaFromUser(formula);}
|
||||||
/**
|
/**
|
||||||
* @brief setFormula set string with formula length
|
* @brief setFormula set string with formula length
|
||||||
* @param value string with formula
|
* @param value string with formula
|
||||||
|
|
|
@ -70,7 +70,7 @@ void DialogCutSpline::setPointName(const QString &value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutSpline::setFormula(const QString &value)
|
void DialogCutSpline::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ inline QString DialogCutSpline::getPointName() const
|
||||||
|
|
||||||
inline QString DialogCutSpline::getFormula() const
|
inline QString DialogCutSpline::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline quint32 DialogCutSpline::getSplineId() const
|
inline quint32 DialogCutSpline::getSplineId() const
|
||||||
|
|
|
@ -71,7 +71,7 @@ void DialogCutSplinePath::setPointName(const QString &value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogCutSplinePath::setFormula(const QString &value)
|
void DialogCutSplinePath::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ inline QString DialogCutSplinePath::getPointName() const
|
||||||
|
|
||||||
inline QString DialogCutSplinePath::getFormula() const
|
inline QString DialogCutSplinePath::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline quint32 DialogCutSplinePath::getSplinePathId() const
|
inline quint32 DialogCutSplinePath::getSplinePathId() const
|
||||||
|
|
|
@ -89,7 +89,7 @@ void DialogEndLine::setTypeLine(const QString &value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogEndLine::setFormula(const QString &value)
|
void DialogEndLine::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -152,7 +152,7 @@ inline QString DialogEndLine::getTypeLine() const
|
||||||
|
|
||||||
inline QString DialogEndLine::getFormula() const
|
inline QString DialogEndLine::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline qreal DialogEndLine::getAngle() const
|
inline qreal DialogEndLine::getAngle() const
|
||||||
|
|
|
@ -128,7 +128,7 @@ void DialogNormal::setAngle(const qreal &value)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogNormal::setFormula(const QString &value)
|
void DialogNormal::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ inline QString DialogNormal::getTypeLine() const
|
||||||
|
|
||||||
inline QString DialogNormal::getFormula() const
|
inline QString DialogNormal::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline qreal DialogNormal::getAngle() const
|
inline qreal DialogNormal::getAngle() const
|
||||||
|
|
|
@ -145,7 +145,7 @@ void DialogShoulderPoint::setP1Line(const quint32 &value, const quint32 &id)
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void DialogShoulderPoint::setFormula(const QString &value)
|
void DialogShoulderPoint::setFormula(const QString &value)
|
||||||
{
|
{
|
||||||
formula = value;
|
formula = qApp->FormulaToUser(value);
|
||||||
ui->lineEditFormula->setText(formula);
|
ui->lineEditFormula->setText(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,7 @@ inline QString DialogShoulderPoint::getTypeLine() const
|
||||||
|
|
||||||
inline QString DialogShoulderPoint::getFormula() const
|
inline QString DialogShoulderPoint::getFormula() const
|
||||||
{
|
{
|
||||||
return formula;
|
return qApp->FormulaFromUser(formula);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline quint32 DialogShoulderPoint::getP1Line() const
|
inline quint32 DialogShoulderPoint::getP1Line() const
|
||||||
|
|
|
@ -332,8 +332,9 @@ void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
const QString formula = qApp->FormulaFromUser(edit->text());
|
||||||
Calculator cal(data);
|
Calculator cal(data);
|
||||||
const qreal result = cal.EvalFormula(edit->text());
|
const qreal result = cal.EvalFormula(formula);
|
||||||
|
|
||||||
label->setText(QString().setNum(result));
|
label->setText(QString().setNum(result));
|
||||||
flag = true;
|
flag = true;
|
||||||
|
@ -345,7 +346,7 @@ void DialogTool::Eval(QLineEdit *edit, bool &flag, QTimer *timer, QLabel *label)
|
||||||
label->setText(tr("Error"));
|
label->setText(tr("Error"));
|
||||||
flag = false;
|
flag = false;
|
||||||
palette.setColor(labelEditFormula->foregroundRole(), Qt::red);
|
palette.setColor(labelEditFormula->foregroundRole(), Qt::red);
|
||||||
emit ToolTip(e.GetMsg());
|
emit ToolTip("Parser error: "+e.GetMsg());
|
||||||
qDebug() << "\nMath parser error:\n"
|
qDebug() << "\nMath parser error:\n"
|
||||||
<< "--------------------------------------\n"
|
<< "--------------------------------------\n"
|
||||||
<< "Message: " << e.GetMsg() << "\n"
|
<< "Message: " << e.GetMsg() << "\n"
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
|
#include <container/calculator.h>
|
||||||
|
|
||||||
const qreal VApplication::PrintDPI = 96.0;
|
const qreal VApplication::PrintDPI = 96.0;
|
||||||
|
|
||||||
#define DefWidth 1.2//mm
|
#define DefWidth 1.2//mm
|
||||||
|
@ -632,6 +634,7 @@ void VApplication::InitFunctions()
|
||||||
functions.insert(avg_F, VTranslation::translate(context, avg_F, QStringLiteral("mean value of all arguments")));
|
functions.insert(avg_F, VTranslation::translate(context, avg_F, QStringLiteral("mean value of all arguments")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VApplication::InitPostfixOperators()
|
void VApplication::InitPostfixOperators()
|
||||||
{
|
{
|
||||||
const QString context = QStringLiteral("PostfixOperators");
|
const QString context = QStringLiteral("PostfixOperators");
|
||||||
|
@ -641,6 +644,86 @@ void VApplication::InitPostfixOperators()
|
||||||
postfixOperators.insert(in_Oprt, VTranslation::translate(context, in_Oprt, QStringLiteral("inch")));
|
postfixOperators.insert(in_Oprt, VTranslation::translate(context, in_Oprt, QStringLiteral("inch")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VApplication::Measurements(QString &newFormula, int position, const QString &token)
|
||||||
|
{
|
||||||
|
QMap<QString, VTranslation>::const_iterator i = measurements.constBegin();
|
||||||
|
while (i != measurements.constEnd())
|
||||||
|
{
|
||||||
|
if(token == i.value().translate())
|
||||||
|
{
|
||||||
|
newFormula.replace(position, token.length(), i.key());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VApplication::VariablesFromUser(QString &newFormula, int position, const QString &token)
|
||||||
|
{
|
||||||
|
QMap<QString, VTranslation>::const_iterator i = variables.constBegin();
|
||||||
|
while (i != variables.constEnd())
|
||||||
|
{
|
||||||
|
if(token.indexOf( i.value().translate() ) == 0)
|
||||||
|
{
|
||||||
|
newFormula.replace(position, i.value().translate().length(), i.key());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VApplication::PostfixOperators(QString &newFormula, int position, const QString &token)
|
||||||
|
{
|
||||||
|
QMap<QString, VTranslation>::const_iterator i = postfixOperators.constBegin();
|
||||||
|
while (i != postfixOperators.constEnd())
|
||||||
|
{
|
||||||
|
if(token == i.value().translate())
|
||||||
|
{
|
||||||
|
newFormula.replace(position, token.length(), i.key());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VApplication::Functions(QString &newFormula, int position, const QString &token)
|
||||||
|
{
|
||||||
|
QMap<QString, VTranslation>::const_iterator i = functions.constBegin();
|
||||||
|
while (i != functions.constEnd())
|
||||||
|
{
|
||||||
|
if(token == i.value().translate())
|
||||||
|
{
|
||||||
|
newFormula.replace(position, token.length(), i.key());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
bool VApplication::VariablesToUser(QString &newFormula, int position, const QString &token)
|
||||||
|
{
|
||||||
|
QMap<QString, VTranslation>::const_iterator i = variables.constBegin();
|
||||||
|
while (i != variables.constEnd())
|
||||||
|
{
|
||||||
|
if(token.indexOf( i.key() ) == 0)
|
||||||
|
{
|
||||||
|
newFormula.replace(position, variables.value(i.key()).translate().length(), i.value().translate());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
void VApplication::setPatternUnit(const Valentina::Units &patternUnit)
|
void VApplication::setPatternUnit(const Valentina::Units &patternUnit)
|
||||||
{
|
{
|
||||||
|
@ -677,3 +760,175 @@ QString VApplication::Function(const QString &name) const
|
||||||
{
|
{
|
||||||
return functions.value(name).translate();
|
return functions.value(name).translate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QString VApplication::PostfixOperator(const QString &name) const
|
||||||
|
{
|
||||||
|
return postfixOperators.value(name).translate();
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QString VApplication::FormulaFromUser(const QString &formula)
|
||||||
|
{
|
||||||
|
QString newFormula = formula;
|
||||||
|
|
||||||
|
QMap<int, QString> tokens;
|
||||||
|
QMap<int, QString> numbers;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Calculator cal(formula);
|
||||||
|
tokens = cal.GetTokens();
|
||||||
|
numbers = cal.GetNumbers();
|
||||||
|
}
|
||||||
|
catch(qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
qDebug() << "\nMath parser error:\n"
|
||||||
|
<< "--------------------------------------\n"
|
||||||
|
<< "Message: " << e.GetMsg() << "\n"
|
||||||
|
<< "Expression: " << e.GetExpr() << "\n"
|
||||||
|
<< "--------------------------------------";
|
||||||
|
return newFormula;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<int, QString>::const_iterator i = tokens.constBegin();
|
||||||
|
while (i != tokens.constEnd())
|
||||||
|
{
|
||||||
|
if(Measurements(newFormula, i.key(), i.value()))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(VariablesFromUser(newFormula, i.key(), i.value()))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PostfixOperators(newFormula, i.key(), i.value()))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Functions(newFormula, i.key(), i.value()))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
QLocale loc = QLocale();
|
||||||
|
if(loc != QLocale(QLocale::C))
|
||||||
|
{
|
||||||
|
QMap<int, QString>::const_iterator i = numbers.constBegin();
|
||||||
|
while (i != numbers.constEnd())
|
||||||
|
{
|
||||||
|
QLocale::setDefault(QLocale::C);
|
||||||
|
bool ok = false;
|
||||||
|
qreal d = QString(i.value()).toDouble(&ok);
|
||||||
|
if(ok == false)
|
||||||
|
{
|
||||||
|
qDebug()<<"Can't convert to double token"<<i.value();
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(qFloor (d) < d)
|
||||||
|
{
|
||||||
|
QLocale::setDefault(QLocale::system());
|
||||||
|
QLocale loc = QLocale();
|
||||||
|
QString dStr = loc.toString(d);
|
||||||
|
newFormula.replace(i.key(), i.value().length(), dStr);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newFormula;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QString VApplication::FormulaToUser(const QString &formula)
|
||||||
|
{
|
||||||
|
QString newFormula = formula;
|
||||||
|
|
||||||
|
QMap<int, QString> tokens;
|
||||||
|
QMap<int, QString> numbers;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Calculator cal(formula);
|
||||||
|
tokens = cal.GetTokens();
|
||||||
|
numbers = cal.GetNumbers();
|
||||||
|
}
|
||||||
|
catch (qmu::QmuParserError &e)
|
||||||
|
{
|
||||||
|
qDebug() << "\nMath parser error:\n"
|
||||||
|
<< "--------------------------------------\n"
|
||||||
|
<< "Message: " << e.GetMsg() << "\n"
|
||||||
|
<< "Expression: " << e.GetExpr() << "\n"
|
||||||
|
<< "--------------------------------------";
|
||||||
|
return newFormula;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<int, QString>::const_iterator i = tokens.constBegin();
|
||||||
|
while (i != tokens.constEnd())
|
||||||
|
{
|
||||||
|
if (measurements.contains(i.value()))
|
||||||
|
{
|
||||||
|
newFormula.replace(i.key(), i.value().length(), measurements.value(i.value()).translate());
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (functions.contains(i.value()))
|
||||||
|
{
|
||||||
|
newFormula.replace(i.key(), i.value().length(), functions.value(i.value()).translate());
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (postfixOperators.contains(i.value()))
|
||||||
|
{
|
||||||
|
newFormula.replace(i.key(), i.value().length(), postfixOperators.value(i.value()).translate());
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(VariablesToUser(newFormula, i.key(), i.value()))
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QLocale loc = QLocale();
|
||||||
|
if(loc != QLocale::C)
|
||||||
|
{
|
||||||
|
QMap<int, QString>::const_iterator i = numbers.constBegin();
|
||||||
|
while (i != numbers.constEnd())
|
||||||
|
{
|
||||||
|
bool ok = false;
|
||||||
|
qreal d = QString(i.value()).toDouble(&ok);
|
||||||
|
if(ok == false)
|
||||||
|
{
|
||||||
|
qDebug()<<"Can't convert to double token"<<i.value();
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(qFloor (d) < d)
|
||||||
|
{
|
||||||
|
QLocale::setDefault(QLocale::C);
|
||||||
|
QLocale loc = QLocale();
|
||||||
|
QString dStr = loc.toString(d);
|
||||||
|
newFormula.replace(i.key(), i.value().length(), dStr);
|
||||||
|
QLocale::setDefault(QLocale::system());
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newFormula;
|
||||||
|
}
|
||||||
|
|
|
@ -77,6 +77,9 @@ public:
|
||||||
QString Description(const QString &measurement) const;
|
QString Description(const QString &measurement) const;
|
||||||
QString Variable(const QString &name) const;
|
QString Variable(const QString &name) const;
|
||||||
QString Function(const QString &name) const;
|
QString Function(const QString &name) const;
|
||||||
|
QString PostfixOperator(const QString &name) const;
|
||||||
|
QString FormulaFromUser(const QString &formula);
|
||||||
|
QString FormulaToUser(const QString &formula);
|
||||||
private:
|
private:
|
||||||
Valentina::Units _patternUnit;
|
Valentina::Units _patternUnit;
|
||||||
Pattern::Measurements _patternType;
|
Pattern::Measurements _patternType;
|
||||||
|
@ -94,6 +97,11 @@ private:
|
||||||
void InitVariables();
|
void InitVariables();
|
||||||
void InitFunctions();
|
void InitFunctions();
|
||||||
void InitPostfixOperators();
|
void InitPostfixOperators();
|
||||||
|
bool Measurements(QString &newFormula, int position, const QString &token);
|
||||||
|
bool VariablesFromUser(QString &newFormula, int position, const QString &token);
|
||||||
|
bool PostfixOperators(QString &newFormula, int position, const QString &token);
|
||||||
|
bool Functions(QString &newFormula, int position, const QString &token);
|
||||||
|
bool VariablesToUser(QString &newFormula, int position, const QString &token);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline Valentina::Units VApplication::patternUnit() const
|
inline Valentina::Units VApplication::patternUnit() const
|
||||||
|
|
Loading…
Reference in New Issue
Block a user