diff --git a/ion/include/ion/charset.h b/ion/include/ion/charset.h index 2bbb41d0c..980c14431 100644 --- a/ion/include/ion/charset.h +++ b/ion/include/ion/charset.h @@ -22,6 +22,8 @@ enum Charset : char { Root = (char)144, LessEqual = (char)145, GreaterEqual = (char)146, + MultiplicationSign = (char)147, + MiddleDot = (char)148, }; } diff --git a/ion/src/shared/events.cpp b/ion/src/shared/events.cpp index 67857e39d..d3a95a302 100644 --- a/ion/src/shared/events.cpp +++ b/ion/src/shared/events.cpp @@ -31,6 +31,7 @@ static constexpr const char k_complexI[2] = {Ion::Charset::IComplex, 0}; static constexpr const char k_exponential[5] = {Ion::Charset::Exponential, '^', '(', ')', 0}; static constexpr const char k_sto[2] = {Ion::Charset::Sto, 0}; static constexpr const char k_exponent[2] = {Ion::Charset::Exponent, 0}; +static constexpr const char k_multiplicationSign[2] = {Ion::Charset::MultiplicationSign, 0}; static constexpr EventData s_dataForEvent[4*Event::PageSize] = { // Plain @@ -40,7 +41,7 @@ static constexpr EventData s_dataForEvent[4*Event::PageSize] = { T(k_exponential), T("ln()"), T("log()"), T(k_complexI), T(","), T("^"), T("sin()"), T("cos()"), T("tan()"), T(k_pi), T(k_root), T("^2"), T("7"), T("8"), T("9"), T("("), T(")"), U(), - T("4"), T("5"), T("6"), T("*"), T("/"), U(), + T("4"), T("5"), T("6"), T(k_multiplicationSign), T("/"), U(), T("1"), T("2"), T("3"), T("+"), T("-"), U(), T("0"), T("."), T(k_exponent), TL(), TL(), U(), // Shift diff --git a/kandinsky/fonts/unicode_for_symbol.c b/kandinsky/fonts/unicode_for_symbol.c index 949cf53c8..1b27552af 100644 --- a/kandinsky/fonts/unicode_for_symbol.c +++ b/kandinsky/fonts/unicode_for_symbol.c @@ -2,4 +2,4 @@ wchar_t codePointForSymbol[NUMBER_OF_SYMBOLS] = {0x222b, 0x0078, 0x0305, 0x0079, 0x0305, 0x0393, 0x03a3, 0x03b8, 0x03bb, 0x03bc, 0x03c0, 0x03c3, 0x0456, - 0x1D07, 0x2032, 0x212e, 0x2192, 0x221A, 0x2264, 0x2265}; + 0x1D07, 0x2032, 0x212e, 0x2192, 0x221A, 0x2264, 0x2265, 0x00D7, 0x00B7}; diff --git a/kandinsky/fonts/unicode_for_symbol.h b/kandinsky/fonts/unicode_for_symbol.h index d7fcaf323..0944e32df 100644 --- a/kandinsky/fonts/unicode_for_symbol.h +++ b/kandinsky/fonts/unicode_for_symbol.h @@ -3,7 +3,7 @@ #include -#define NUMBER_OF_SYMBOLS 20 +#define NUMBER_OF_SYMBOLS 22 extern wchar_t codePointForSymbol[NUMBER_OF_SYMBOLS]; diff --git a/poincare/include/poincare/addition.h b/poincare/include/poincare/addition.h index 1e74794df..0e037f0d4 100644 --- a/poincare/include/poincare/addition.h +++ b/poincare/include/poincare/addition.h @@ -40,7 +40,7 @@ private: int writeTextInBuffer(char * buffer, int bufferSize) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, name()); } - const char * name() const { return "+"; } + static const char * name() { return "+"; } /* Simplification */ Expression * immediateBeautify(Context & context, AngleUnit angleUnit) override; Expression * factorizeOnCommonDenominator(Context & context, AngleUnit angleUnit); diff --git a/poincare/include/poincare/division.h b/poincare/include/poincare/division.h index ec2987bf3..b9e1553e0 100644 --- a/poincare/include/poincare/division.h +++ b/poincare/include/poincare/division.h @@ -33,8 +33,9 @@ private: ExpressionLayout * privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const override; int writeTextInBuffer(char * buffer, int bufferSize) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, "/"); + return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, name()); } + static const char * name() { return "/"; } Expression * factorOfTypeInOperand(Type type, int operandIndex, int k); }; diff --git a/poincare/include/poincare/multiplication.h b/poincare/include/poincare/multiplication.h index defd61485..23ecfa3bf 100644 --- a/poincare/include/poincare/multiplication.h +++ b/poincare/include/poincare/multiplication.h @@ -42,7 +42,7 @@ private: int writeTextInBuffer(char * buffer, int bufferSize) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, name()); } - const char * name() const { return "*"; } + static const char * name(); /* Simplification */ void factorize(Context & context, AngleUnit angleUnit); void factorizeBase(Expression * e1, Expression * e2, Context & context, AngleUnit angleUnit); diff --git a/poincare/include/poincare/power.h b/poincare/include/poincare/power.h index 5f2792610..e21deb07b 100644 --- a/poincare/include/poincare/power.h +++ b/poincare/include/poincare/power.h @@ -35,9 +35,9 @@ private: ExpressionLayout * privateCreateLayout(FloatDisplayMode floatDisplayMode, ComplexFormat complexFormat) const override; int writeTextInBuffer(char * buffer, int bufferSize) const override { - return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, "^"); + return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, name()); } - + static const char * name() { return "^"; } int compareToGreaterTypeExpression(const Expression * e) const override; int compareToSameTypeExpression(const Expression * e) const override; /* Simplification */ diff --git a/poincare/include/poincare/subtraction.h b/poincare/include/poincare/subtraction.h index cc3487ba4..754b2af4a 100644 --- a/poincare/include/poincare/subtraction.h +++ b/poincare/include/poincare/subtraction.h @@ -38,7 +38,7 @@ private: int writeTextInBuffer(char * buffer, int bufferSize) const override { return LayoutEngine::writeInfixExpressionTextInBuffer(this, buffer, bufferSize, name()); } - const char * name() const { return "-"; } + static const char * name() { return "-"; } }; } diff --git a/poincare/src/expression_lexer.l b/poincare/src/expression_lexer.l index db3a0e80f..9e66fb285 100644 --- a/poincare/src/expression_lexer.l +++ b/poincare/src/expression_lexer.l @@ -145,6 +145,7 @@ inf { poincare_expression_yylval.expression = new Undefined(); return UNDEFINED; \x8f { return STO; } \+ { return PLUS; } \- { return MINUS; } +\x93 { return MULTIPLY; } \* { return MULTIPLY; } \/ { return DIVIDE; } \^ { return POW; } diff --git a/poincare/src/multiplication.cpp b/poincare/src/multiplication.cpp index 6c7b9ec20..f364eafe5 100644 --- a/poincare/src/multiplication.cpp +++ b/poincare/src/multiplication.cpp @@ -14,6 +14,7 @@ extern "C" { #include #include #include +#include #include "layout/string_layout.h" #include "layout/horizontal_layout.h" #include "layout/parenthesis_layout.h" @@ -361,6 +362,11 @@ void Multiplication::leastCommonMultiple(Expression * factor, Context & context, sortChildren(); } +static_assert('\x94' == Ion::Charset::MiddleDot, "Unicode error"); +const char * Multiplication::name() { + return "\x94"; +} + template Poincare::Evaluation* Poincare::Multiplication::computeOnComplexAndMatrix(Poincare::Complex const*, Poincare::Evaluation*); template Poincare::Evaluation* Poincare::Multiplication::computeOnComplexAndMatrix(Poincare::Complex const*, Poincare::Evaluation*); } diff --git a/poincare/src/square_root.cpp b/poincare/src/square_root.cpp index d02205ffb..fd14b765c 100644 --- a/poincare/src/square_root.cpp +++ b/poincare/src/square_root.cpp @@ -19,7 +19,7 @@ Expression * SquareRoot::clone() const { return a; } -static_assert('\x90' == Ion::Charset::Root, "Incorrect"); +static_assert('\x90' == Ion::Charset::Root, "Unicode error"); int SquareRoot::writeTextInBuffer(char * buffer, int bufferSize) const { return LayoutEngine::writePrefixExpressionTextInBuffer(this, buffer, bufferSize, "\x90"); } diff --git a/poincare/src/store.cpp b/poincare/src/store.cpp index b74112e9d..026e60516 100644 --- a/poincare/src/store.cpp +++ b/poincare/src/store.cpp @@ -10,7 +10,6 @@ extern "C" { #include #include "layout/horizontal_layout.h" #include "layout/string_layout.h" -#include namespace Poincare { diff --git a/poincare/src/trigonometry.cpp b/poincare/src/trigonometry.cpp index 2ac6be40e..070d94549 100644 --- a/poincare/src/trigonometry.cpp +++ b/poincare/src/trigonometry.cpp @@ -60,7 +60,7 @@ Expression * Trigonometry::immediateSimplify(Context& context, AngleUnit angleUn return this; } -static_assert('\x89' == Ion::Charset::SmallPi, "Incorrect"); +static_assert('\x89' == Ion::Charset::SmallPi, "Unicode error"); constexpr const char * cheatTable[Trigonometry::k_numberOfEntries][3] = {{"\x89", "\x89*(-2)^(-1)", "-1"}, {"\x89*11*12^(-1)", "\x89*(-5)*12^(-1)", "(-1)*6^(1/2)*4^(-1)-2^(1/2)*4^(-1)"}, diff --git a/poincare/test/simplify_easy.cpp b/poincare/test/simplify_easy.cpp index fd31201b8..b28c26487 100644 --- a/poincare/test/simplify_easy.cpp +++ b/poincare/test/simplify_easy.cpp @@ -34,6 +34,7 @@ void assert_parsed_expression_simplify_to(const char * expression, const char * QUIZ_CASE(poincare_simplify_easy) { + assert_parsed_expression_simplify_to("X^(P)*X^(5)", "X^(P+5)"); assert_parsed_expression_simplify_to("0000.000000", "0"); assert_parsed_expression_simplify_to(".000000", "0"); assert_parsed_expression_simplify_to("0000", "0");