Kaydet (Commit) 435011a6 authored tarafından Takeshi Abe's avatar Takeshi Abe

starmath: Refrain from skipping an extra token at missing "}"

which requires closing "matrix {".

Change-Id: I40cad5a29862d29cd2eda7f5641e732620bac217
Reviewed-on: https://gerrit.libreoffice.org/35785Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarTakeshi Abe <tabe@fixedpoint.jp>
üst 19ae5ff9
......@@ -2096,58 +2096,56 @@ SmStructureNode *SmParser::DoMatrix()
{
std::unique_ptr<SmMatrixNode> pMNode(new SmMatrixNode(m_aCurToken));
NextToken();
if (m_aCurToken.eType == TLGROUP)
{
sal_uInt16 c = 0;
do
{
NextToken();
m_aNodeStack.emplace_front(DoAlign());
c++;
}
while (m_aCurToken.eType == TPOUND);
if (m_aCurToken.eType != TLGROUP)
return DoError(SmParseError::LgroupExpected);
sal_uInt16 r = 1;
SmNodeArray aExprArr;
do
{
NextToken();
aExprArr.push_back(DoAlign());
}
while (m_aCurToken.eType == TPOUND);
while (m_aCurToken.eType == TDPOUND)
size_t nCol = aExprArr.size();
size_t nRow = 1;
while (m_aCurToken.eType == TDPOUND)
{
NextToken();
for (size_t i = 0; i < nCol; i++)
{
NextToken();
for (sal_uInt16 i = 0; i < c; i++)
std::unique_ptr<SmNode> pNode(DoAlign());
if (i < (nCol - 1))
{
m_aNodeStack.emplace_front(DoAlign());
if (i < (c - 1))
{
if (m_aCurToken.eType == TPOUND)
{
NextToken();
}
else
Error(SmParseError::PoundExpected);
}
if (m_aCurToken.eType == TPOUND)
NextToken();
else
pNode.reset(DoError(SmParseError::PoundExpected));
}
r++;
aExprArr.push_back(pNode.release());
}
++nRow;
}
size_t nRC = static_cast<size_t>(r) * c;
SmNodeArray ExpressionArray(nRC);
for (auto rIt = ExpressionArray.rbegin(), rEnd = ExpressionArray.rend(); rIt != rEnd; ++rIt)
if (m_aCurToken.eType == TRGROUP)
NextToken();
else
{
auto pENode = DoError(SmParseError::RgroupExpected);
if (aExprArr.empty())
nRow = nCol = 1;
else
{
*rIt = popOrZero(m_aNodeStack);
delete aExprArr.back();
aExprArr.pop_back();
}
if (m_aCurToken.eType != TRGROUP)
Error(SmParseError::RgroupExpected);
pMNode->SetSubNodes(ExpressionArray);
pMNode->SetRowCol(r, c);
NextToken();
return pMNode.release();
aExprArr.push_back(pENode);
}
return DoError(SmParseError::LgroupExpected);
pMNode->SetSubNodes(aExprArr);
pMNode->SetRowCol(static_cast<sal_uInt16>(nRow),
static_cast<sal_uInt16>(nCol));
return pMNode.release();
}
SmSpecialNode *SmParser::DoSpecial()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment