Kaydet (Commit) dba6b515 authored tarafından Miklos Vajna's avatar Miklos Vajna

fix import of nested RTF_MF groups

Change-Id: Ibd4f93663d27d997c44f73e201c355a34d6452d3
üst fb66fd63
{\rtf1
{\mmath
{\*\moMath
{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\loch\af34\hich\af34\dbch\af31505\insrsid7024409 \{\hich\af34\dbch\af31505\loch\f34
{\mr\mscr0\msty2
[]()}
}
{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7024409 \}}
}
}
\par
}
......@@ -67,6 +67,7 @@ public:
void testMathSepchr();
void testMathSubscripts();
void testMathVerticalstacks();
void testMathRuns();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
......@@ -96,6 +97,7 @@ public:
CPPUNIT_TEST(testMathSepchr);
CPPUNIT_TEST(testMathSubscripts);
CPPUNIT_TEST(testMathVerticalstacks);
CPPUNIT_TEST(testMathRuns);
#endif
#endif
CPPUNIT_TEST_SUITE_END();
......@@ -397,6 +399,13 @@ void Test::testMathVerticalstacks()
CPPUNIT_ASSERT_EQUAL(OUString("stack { a # stack { b # c } }"), getFormula(getRun(getParagraph(4), 1)));
}
void Test::testMathRuns()
{
roundtrip("math-runs.rtf");
// was [](){}, i.e. first curly bracket had an incorrect position
CPPUNIT_ASSERT_EQUAL(OUString("\\{ left [ right ] left ( right ) \\}"), getFormula(getRun(getParagraph(1), 1)));
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -202,6 +202,19 @@ static util::DateTime lcl_getDateTime(std::stack<RTFParserState>& aStates)
aStates.top().nDay, aStates.top().nMonth, aStates.top().nYear);
}
static void lcl_DestinationToMath(OUStringBuffer& rDestinationText, oox::formulaimport::XmlStreamBuilder& rMathBuffer)
{
OUString aStr = rDestinationText.makeStringAndClear();
if (!aStr.isEmpty())
{
rMathBuffer.appendOpeningTag(M_TOKEN(r));
rMathBuffer.appendOpeningTag(M_TOKEN(t));
rMathBuffer.appendCharacters(aStr);
rMathBuffer.appendClosingTag(M_TOKEN(t));
rMathBuffer.appendClosingTag(M_TOKEN(r));
}
}
RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& xContext,
uno::Reference<io::XInputStream> const& xInputStream,
uno::Reference<lang::XComponent> const& xDstDoc,
......@@ -3131,7 +3144,11 @@ int RTFDocumentImpl::pushState()
if (m_aStates.empty())
aState = m_aDefaultState;
else
{
if (m_aStates.top().nDestinationState == DESTINATION_MR)
lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer);
aState = m_aStates.top();
}
m_aStates.push(aState);
m_aStates.top().aDestinationText.setLength(0);
......@@ -3616,19 +3633,7 @@ int RTFDocumentImpl::popState()
m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
}
break;
case DESTINATION_MR:
{
OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
if (!aStr.isEmpty())
{
m_aMathBuffer.appendOpeningTag(M_TOKEN(r));
m_aMathBuffer.appendOpeningTag(M_TOKEN(t));
m_aMathBuffer.appendCharacters(aStr);
m_aMathBuffer.appendClosingTag(M_TOKEN(t));
m_aMathBuffer.appendClosingTag(M_TOKEN(r));
}
}
break;
case DESTINATION_MR: lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer); break;
case DESTINATION_MF: m_aMathBuffer.appendClosingTag(M_TOKEN(f)); break;
case DESTINATION_MFPR: m_aMathBuffer.appendClosingTag(M_TOKEN(fPr)); break;
case DESTINATION_MCTRLPR: m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr)); break;
......
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