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;