diff options
-rw-r--r-- | starmath/qa/cppunit/test_nodetotextvisitors.cxx | 3 | ||||
-rw-r--r-- | starmath/source/parse.cxx | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/starmath/qa/cppunit/test_nodetotextvisitors.cxx b/starmath/qa/cppunit/test_nodetotextvisitors.cxx index b0dfaf536971..ffa3f599f932 100644 --- a/starmath/qa/cppunit/test_nodetotextvisitors.cxx +++ b/starmath/qa/cppunit/test_nodetotextvisitors.cxx @@ -658,6 +658,9 @@ void Test::testMiscEquivalent() // check non-BMP Unicode char ParseAndCompare("{\xf0\x9d\x91\x8e}", "\xf0\x9d\x91\x8e", "non-BMP variable in brace"); ParseAndCompare("{ \xf0\x9d\x91\x8e }", "\xf0\x9d\x91\x8e", "non-BMP variable in brace"); + + // tdf#88320 + ParseAndCompare("A_1,B_2", "A_{1},B_2", "Comma between a digit and non-digit delimits subscript"); } void Test::testParser() diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx index ada838aeffa2..6a7d76b5f02e 100644 --- a/starmath/source/parse.cxx +++ b/starmath/source/parse.cxx @@ -460,6 +460,14 @@ void SmParser::NextToken() } else if (aRes.TokenType & KParseType::ANY_NUMBER) { + assert(aRes.EndPos > 0); + if ( m_aBufferString[aRes.EndPos-1] == ',' && + aRes.EndPos < nBufLen && + aCC.getType( m_aBufferString, aRes.EndPos ) != UnicodeType::SPACE_SEPARATOR ) + { + // Comma followed by a non-space char is unlikely for decimal/thousands separator. + --aRes.EndPos; + } sal_Int32 n = aRes.EndPos - nRealStart; OSL_ENSURE( n >= 0, "length < 0" ); m_aCurToken.eType = TNUMBER; |