From 763ce87d144e2775000d2763c9bc5642728a135f Mon Sep 17 00:00:00 2001 From: Evann DREUMONT <53308142+LeGmask@users.noreply.github.com> Date: Wed, 10 Feb 2021 16:16:40 +0100 Subject: [PATCH 1/2] [poincare/parser] Use infinity symbol - Use infinity symbol - Parse inf, oo, infity --- ion/include/ion/unicode/code_point.h | 1 + kandinsky/fonts/code_points.h | 1 + poincare/include/poincare/infinity.h | 2 +- poincare/src/parsing/parser.cpp | 12 +++++++++++- poincare/src/parsing/tokenizer.cpp | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ion/include/ion/unicode/code_point.h b/ion/include/ion/unicode/code_point.h index a1e6ce240..511636149 100644 --- a/ion/include/ion/unicode/code_point.h +++ b/ion/include/ion/unicode/code_point.h @@ -66,5 +66,6 @@ static constexpr CodePoint UCodePointNArySummation = 0x2211; // ∑ static constexpr CodePoint UCodePointSquareRoot = 0x221a; // √ static constexpr CodePoint UCodePointIntegral = 0x222b; // ∫ static constexpr CodePoint UCodePointMathematicalBoldSmallI = 0x1d422; // 𝐢 +static constexpr CodePoint UCodePointInfinity = 0x221e; // ∞ #endif diff --git a/kandinsky/fonts/code_points.h b/kandinsky/fonts/code_points.h index ab981e1cb..1804fc64a 100644 --- a/kandinsky/fonts/code_points.h +++ b/kandinsky/fonts/code_points.h @@ -143,6 +143,7 @@ uint32_t CodePoints[] = { 0x2192, // → // RIGHTWARDS ARROW 0x2211, // ∑ // N-ARY SUMMATION 0x221a, // √ // SQUARE ROOT + 0x221e, // ∞ // INFINITY 0x222b, // ∫ // INTEGRAL 0x2248, // ≈ // ALMOST EQUAL TO 0x2264, // ≤ // LESS-THAN OR EQUAL TO diff --git a/poincare/include/poincare/infinity.h b/poincare/include/poincare/infinity.h index 03740eead..bc17f0101 100644 --- a/poincare/include/poincare/infinity.h +++ b/poincare/include/poincare/infinity.h @@ -56,7 +56,7 @@ public: static Infinity Builder(bool negative); Expression setSign(ExpressionNode::Sign s); static const char * Name() { - return "inf"; + return "∞"; } static int NameSize() { return 4; diff --git a/poincare/src/parsing/parser.cpp b/poincare/src/parsing/parser.cpp index 32a72fbcc..135082316 100644 --- a/poincare/src/parsing/parser.cpp +++ b/poincare/src/parsing/parser.cpp @@ -44,6 +44,9 @@ bool Parser::IsSpecialIdentifierName(const char * name, size_t nameLength) { return ( Token::CompareNonNullTerminatedName(name, nameLength, Symbol::k_ans) == 0 || Token::CompareNonNullTerminatedName(name, nameLength, Infinity::Name()) == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "inf") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "infinity") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "oo") == 0 || Token::CompareNonNullTerminatedName(name, nameLength, Undefined::Name()) == 0 || Token::CompareNonNullTerminatedName(name, nameLength, Unreal::Name()) == 0 || Token::CompareNonNullTerminatedName(name, nameLength, "u") == 0 || @@ -426,7 +429,14 @@ void Parser::parseSequence(Expression & leftHandSide, const char * name, Token:: void Parser::parseSpecialIdentifier(Expression & leftHandSide) { if (m_currentToken.compareTo(Symbol::k_ans) == 0) { leftHandSide = Symbol::Ans(); - } else if (m_currentToken.compareTo(Infinity::Name()) == 0) { + } else if (m_currentToken.compareTo(Infinity::Name()) == 0 || + m_currentToken.compareTo("inf") == 0 || + m_currentToken.compareTo("infinity") == 0 || + m_currentToken.compareTo("oo") == 0 + ) { + + leftHandSide = Infinity::Builder(false); + } else if (m_currentToken.compareTo("inf") == 0) { leftHandSide = Infinity::Builder(false); } else if (m_currentToken.compareTo(Undefined::Name()) == 0) { leftHandSide = Undefined::Builder(); diff --git a/poincare/src/parsing/tokenizer.cpp b/poincare/src/parsing/tokenizer.cpp index 13ae60956..c1c66a184 100644 --- a/poincare/src/parsing/tokenizer.cpp +++ b/poincare/src/parsing/tokenizer.cpp @@ -224,7 +224,7 @@ Token Tokenizer::popToken() { if (c == '}') { return Token(Token::RightBrace); } - if (c == UCodePointSquareRoot) { + if (c == UCodePointSquareRoot || c == UCodePointInfinity) { Token result(Token::Identifier); result.setString(start, UTF8Decoder::CharSizeOfCodePoint(c)); return result; From 391904900abf4e585fd35841cf4e2a030c3e71c7 Mon Sep 17 00:00:00 2001 From: Evann DREUMONT <53308142+LeGmask@users.noreply.github.com> Date: Wed, 10 Feb 2021 17:15:45 +0100 Subject: [PATCH 2/2] [apps/toolbox] Add infinity in maths/calcul toolbox --- apps/math_toolbox.cpp | 1 + apps/shared.universal.i18n | 1 + apps/toolbox.de.i18n | 1 + apps/toolbox.en.i18n | 1 + apps/toolbox.es.i18n | 1 + apps/toolbox.fr.i18n | 1 + apps/toolbox.hu.i18n | 1 + apps/toolbox.it.i18n | 1 + apps/toolbox.nl.i18n | 1 + apps/toolbox.pt.i18n | 1 + 10 files changed, 10 insertions(+) diff --git a/apps/math_toolbox.cpp b/apps/math_toolbox.cpp index f33a0eaa0..ad82cb081 100644 --- a/apps/math_toolbox.cpp +++ b/apps/math_toolbox.cpp @@ -25,6 +25,7 @@ const ToolboxMessageTree calculChildren[] = { ToolboxMessageTree::Leaf(I18n::Message::IntCommandWithArg, I18n::Message::Integral, false, I18n::Message::IntCommand), ToolboxMessageTree::Leaf(I18n::Message::SumCommandWithArg, I18n::Message::Sum, false, I18n::Message::SumCommand), ToolboxMessageTree::Leaf(I18n::Message::ProductCommandWithArg, I18n::Message::Product, false, I18n::Message::ProductCommand), + ToolboxMessageTree::Leaf(I18n::Message::Infinity, I18n::Message::InfinityMessage, false, I18n::Message::Infinity), }; const ToolboxMessageTree complexChildren[] = { diff --git a/apps/shared.universal.i18n b/apps/shared.universal.i18n index 0e8426d04..97c75c00e 100644 --- a/apps/shared.universal.i18n +++ b/apps/shared.universal.i18n @@ -134,6 +134,7 @@ GcdCommandWithArg = "gcd(p,q)" Gon = "gon" ImCommandWithArg = "im(z)" IndentityCommandWithArg = "identity(n)" +Infinity = "infinity" IntCommand = "int(\x11,x,\x11,\x11)" IntCommandWithArg = "int(f(x),x,a,b)" InvBinomialCommandWithArg = "invbinom(a,n,p)" diff --git a/apps/toolbox.de.i18n b/apps/toolbox.de.i18n index 5edd075d3..577af7121 100644 --- a/apps/toolbox.de.i18n +++ b/apps/toolbox.de.i18n @@ -109,6 +109,7 @@ Identity = "Einheitsmatrix der Größe n" Lists = "Listen" HyperbolicTrigonometry = "Hyperbelfunktionen" Fluctuation = "Konfidenzintervall" +InfinityMessage = "Unendlich" DerivateNumber = "Ableitung" Integral = "Integral" Sum = "Summe" diff --git a/apps/toolbox.en.i18n b/apps/toolbox.en.i18n index 7e7f94ae8..7e2884136 100644 --- a/apps/toolbox.en.i18n +++ b/apps/toolbox.en.i18n @@ -110,6 +110,7 @@ Identity = "Identity matrix of size n" Lists = "List" HyperbolicTrigonometry = "Hyperbolic trigonometry" Fluctuation = "Prediction Interval" +InfinityMessage = "Infinity" DerivateNumber = "Derivative" Integral = "Integral" Sum = "Sum" diff --git a/apps/toolbox.es.i18n b/apps/toolbox.es.i18n index bf7aa1121..9c776a3bb 100644 --- a/apps/toolbox.es.i18n +++ b/apps/toolbox.es.i18n @@ -108,6 +108,7 @@ Identity = "Matriz identidad de tamaño n" Lists = "Listas" HyperbolicTrigonometry = "Trigonometría hiperbólica" Fluctuation = "Interval de predicción" +InfinityMessage = "Infinito" DerivateNumber = "Derivada" Integral = "Integral" Sum = "Suma" diff --git a/apps/toolbox.fr.i18n b/apps/toolbox.fr.i18n index 2fc7f9fd9..f33aa140f 100644 --- a/apps/toolbox.fr.i18n +++ b/apps/toolbox.fr.i18n @@ -114,6 +114,7 @@ Identity = "Matrice identité de taille n" Lists = "Listes" HyperbolicTrigonometry = "Trigonométrie hyperbolique" Fluctuation = "Intervalle de fluctuation" +InfinityMessage = "Infini" DerivateNumber = "Nombre derivé de f en a" Integral = "Intégrale de f sur [a;b]" Sum = "Somme" diff --git a/apps/toolbox.hu.i18n b/apps/toolbox.hu.i18n index 6a649d9ab..86e067efb 100644 --- a/apps/toolbox.hu.i18n +++ b/apps/toolbox.hu.i18n @@ -122,6 +122,7 @@ Identity = "n méretü azonosító mátrix" Lists = "Lista" HyperbolicTrigonometry = "Hiperbolikus trigonometria" Fluctuation = "Jósolt intervallum" +InfinityMessage = "Végtelen" DerivateNumber = "Származékos" Integral = "Integral" Sum = "Összeg" diff --git a/apps/toolbox.it.i18n b/apps/toolbox.it.i18n index 2db4534f3..56b219247 100644 --- a/apps/toolbox.it.i18n +++ b/apps/toolbox.it.i18n @@ -110,6 +110,7 @@ Identity = "Matrice identità di dimensione n" Lists = "Elenchi" HyperbolicTrigonometry = "Funzioni iperboliche" Fluctuation = "Intervallo di previsione" +InfinityMessage = "Infinito" DerivateNumber = "Derivata" Integral = "Integrale" Sum = "Somma" diff --git a/apps/toolbox.nl.i18n b/apps/toolbox.nl.i18n index d693ccddf..87562bf74 100644 --- a/apps/toolbox.nl.i18n +++ b/apps/toolbox.nl.i18n @@ -110,6 +110,7 @@ Identity = "Eenheidsmatrix van formaat n" Lists = "Lijst" HyperbolicTrigonometry = "Hyperbolische functies" Fluctuation = "Statistische intervallen" +InfinityMessage = "Eindeloos" DerivateNumber = "Afgeleide" Integral = "Integraal" Sum = "Som" diff --git a/apps/toolbox.pt.i18n b/apps/toolbox.pt.i18n index 2c1cf5a8f..af3f6c824 100644 --- a/apps/toolbox.pt.i18n +++ b/apps/toolbox.pt.i18n @@ -110,6 +110,7 @@ Identity = "Matriz identidade de ordem n" Lists = "Listas" HyperbolicTrigonometry = "Funções hiperbólicas" Fluctuation = "Intervalo de confiança" +InfinityMessage = "Infinito" DerivateNumber = "Derivada" Integral = "Integral" Sum = "Somatório"