mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 03:55:47 +08:00
fix bug ooxml->odf. writing tests
This commit is contained in:
@ -33,9 +33,9 @@ namespace StarMath
|
||||
m_pXmlWrite->WriteNodeEnd(L"w",true,false);
|
||||
m_pXmlWrite->WriteString(m_wsAnnotationStarMath);
|
||||
EndOdf();
|
||||
//NSFile::CFileBinary oOriginal;
|
||||
//oOriginal.CreateFile(L"X:/Rabotka/Original.txt");
|
||||
//oOriginal.WriteStringUTF8(m_pXmlWrite->GetXmlString());
|
||||
NSFile::CFileBinary oOriginal;
|
||||
oOriginal.CreateFile(L"X:/Rabotka/Original.txt");
|
||||
oOriginal.WriteStringUTF8(m_pXmlWrite->GetXmlString());
|
||||
}
|
||||
void COOXml2Odf::NodeDefinition(OOX::WritingElement *pNode,const bool& bMatrix)
|
||||
{
|
||||
@ -381,6 +381,11 @@ namespace StarMath
|
||||
m_wsAnnotationStarMath += L"right " + BracketForAnnotation(stDelPr.m_wsEndBracket,false) + L" ";
|
||||
m_pXmlWrite->WriteNodeEnd(L"mrow",false,false);
|
||||
StyleClosing(iStyle,m_pXmlWrite);
|
||||
if(iStyle && !m_stAttribute.empty())
|
||||
{
|
||||
m_stAttribute.top()->Release();
|
||||
m_stAttribute.pop();
|
||||
}
|
||||
}
|
||||
std::wstring COOXml2Odf::BracketForAnnotation(const std::wstring &wsBracket, const bool &bBeg)
|
||||
{
|
||||
@ -502,12 +507,16 @@ namespace StarMath
|
||||
if(pMRun == nullptr) return arLine;
|
||||
if(pMRun->m_oRPr.GetPointer() != nullptr)
|
||||
stRpr = ConversionRunProperties(pMRun->m_oRPr.GetPointer());
|
||||
else if (pMRun->m_oARPr.GetPointer() != nullptr)
|
||||
ConversionARpr(pMRun->m_oARPr.GetPointer(),stRpr);
|
||||
if(pMRun->m_oMRPr.GetPointer() != nullptr)
|
||||
ConversionMRunProperties(pMRun->m_oMRPr.GetPointer(),stRpr);
|
||||
if(pMRun->m_oMText.GetPointer() != nullptr)
|
||||
arLine = ConversionMT(pMRun->m_oMText.GetPointer(),stRpr);
|
||||
if(stRpr != nullptr && !arLine.empty())
|
||||
{
|
||||
if(!m_stAttribute.empty())
|
||||
AttributeCheck(m_stAttribute.top(),stRpr);
|
||||
for(int i = 0; i<arLine.size();i++)
|
||||
{
|
||||
if(i != 0 )
|
||||
@ -526,7 +535,7 @@ namespace StarMath
|
||||
StValuePr pMdPr;
|
||||
if(pDelPr == nullptr)
|
||||
return pMdPr;
|
||||
iStyle = ConversionCtrlPr(pDelPr->m_oCtrlPr.GetPointer());
|
||||
iStyle = ConversionCtrlPr(pDelPr->m_oCtrlPr.GetPointer(),true);
|
||||
pMdPr.m_wsBegBracket = ConversionBegBracket(dynamic_cast<OOX::Logic::CBegChr*>(pDelPr->m_oBegChr.GetPointer()));
|
||||
pMdPr.m_wsEndBracket = ConversionEndBracket(dynamic_cast<OOX::Logic::CEndChr*>(pDelPr->m_oEndChr.GetPointer()));
|
||||
return pMdPr;
|
||||
@ -617,6 +626,22 @@ namespace StarMath
|
||||
else
|
||||
return false;
|
||||
}
|
||||
void COOXml2Odf::AttributeCheck(StValuePr *&pParent, StValuePr *&pChild)
|
||||
{
|
||||
if(pParent == nullptr || pChild == nullptr)
|
||||
return;
|
||||
else
|
||||
{
|
||||
if(pParent->m_wsColor == pChild->m_wsColor)
|
||||
pChild->m_wsColor.clear();
|
||||
if(pParent->m_iSize == pChild->m_iSize)
|
||||
pChild->m_iSize = 0;
|
||||
if(pParent->m_enStyle == pChild->m_enStyle)
|
||||
pChild->m_enStyle = SimpleTypes::EStyle::stylePlain;
|
||||
if(pParent->m_enFont == pChild->m_enFont)
|
||||
pChild->m_enFont = StarMath::TypeFont::empty;
|
||||
}
|
||||
}
|
||||
void COOXml2Odf::ConversionAcc(OOX::Logic::CAcc *pAcc)
|
||||
{
|
||||
std::wstring wsSymbol = pAcc->m_oAccPr->m_oChr.IsInit() ? pAcc->m_oAccPr->m_oChr.get().m_val->GetValue() : L"",wsSign;
|
||||
@ -879,6 +904,11 @@ namespace StarMath
|
||||
}
|
||||
m_pXmlWrite->WriteNodeEnd(L"mtable",false,false);
|
||||
StyleClosing(iStyle,m_pXmlWrite);
|
||||
if(iStyle != 0 && !m_stAttribute.empty())
|
||||
{
|
||||
m_stAttribute.top()->Release();
|
||||
m_stAttribute.pop();
|
||||
}
|
||||
m_wsAnnotationStarMath += L"} ";
|
||||
}
|
||||
void COOXml2Odf::ConversionMr(OOX::Logic::CMr *pMr)
|
||||
@ -899,15 +929,23 @@ namespace StarMath
|
||||
}
|
||||
m_pXmlWrite->WriteNodeEnd(L"mtr",false,false);
|
||||
}
|
||||
unsigned int COOXml2Odf::ConversionCtrlPr(OOX::Logic::CCtrlPr *pCtrlPr)
|
||||
unsigned int COOXml2Odf::ConversionCtrlPr(OOX::Logic::CCtrlPr *pCtrlPr, const bool &bDelimiter)
|
||||
{
|
||||
if(pCtrlPr == nullptr)
|
||||
return 0;
|
||||
StValuePr* pValue;
|
||||
unsigned int iStyle(0);
|
||||
if(pCtrlPr->m_oRPr.GetPointer() != nullptr)
|
||||
pValue = ConversionRunProperties(pCtrlPr->m_oRPr.GetPointer());
|
||||
else if(pCtrlPr->m_oARPr.GetPointer() != nullptr)
|
||||
ConversionARpr(pCtrlPr->m_oARPr.GetPointer(),pValue);
|
||||
if(pValue != nullptr)
|
||||
{
|
||||
unsigned int iStyle(0);
|
||||
StValuePr* pValue = ConversionRunProperties(dynamic_cast<OOX::Logic::CRunProperty*>(pCtrlPr->m_oRPr.GetPointer()));
|
||||
COneElement::ConversionAttribute(pValue,iStyle,m_pXmlWrite,m_wsAnnotationStarMath);
|
||||
if(!m_stAttribute.empty())
|
||||
AttributeCheck(m_stAttribute.top(),pValue);
|
||||
COneElement::ConversionAttribute(pValue,iStyle,m_pXmlWrite,m_wsAnnotationStarMath,bDelimiter);
|
||||
if(bDelimiter)
|
||||
m_stAttribute.push(pValue);
|
||||
return iStyle;
|
||||
}
|
||||
return 0;
|
||||
@ -916,7 +954,7 @@ namespace StarMath
|
||||
{
|
||||
if(pMPr == nullptr)
|
||||
return 0;
|
||||
return ConversionCtrlPr(dynamic_cast<OOX::Logic::CCtrlPr*>(pMPr->m_oCtrlPr.GetPointer()));
|
||||
return ConversionCtrlPr(dynamic_cast<OOX::Logic::CCtrlPr*>(pMPr->m_oCtrlPr.GetPointer()),true);
|
||||
}
|
||||
std::wstring COOXml2Odf::GetOdf()
|
||||
{
|
||||
@ -978,7 +1016,7 @@ namespace StarMath
|
||||
return;
|
||||
ConversionVectorWritingElement(pDeg->m_arrItems);
|
||||
}
|
||||
void COOXml2Odf::ConversionGroupChr(OOX::Logic::CGroupChr *pGroup)
|
||||
void COOXml2Odf::ConversionGroupChr(OOX::Logic::CGroupChr *pGroup, const bool &bElement)
|
||||
{
|
||||
if(pGroup == nullptr)
|
||||
return;
|
||||
@ -1005,27 +1043,43 @@ namespace StarMath
|
||||
}
|
||||
}
|
||||
}
|
||||
m_pXmlWrite->WriteNodeBegin(wsNode,false);
|
||||
if(!wsAnnotation.empty())
|
||||
{
|
||||
m_pXmlWrite->WriteNodeBegin(wsNode,false);
|
||||
ConversionElement(pGroup->m_oElement.GetPointer());
|
||||
RecordingMoNode(stGroupPr.m_wsChr,m_pXmlWrite);
|
||||
m_wsAnnotationStarMath += wsAnnotation;
|
||||
m_pXmlWrite->WriteNodeEnd(wsNode,false,false);
|
||||
m_pXmlWrite->WriteNodeBegin(L"mspace",true);
|
||||
m_pXmlWrite->WriteNodeEnd(L"w",true,true);
|
||||
m_wsAnnotationStarMath += L"` ";
|
||||
if(bElement)
|
||||
{
|
||||
WritingbBracketsFromTopBottom(wsNode,stGroupPr.m_wsChr,wsAnnotation,pGroup->m_oElement.GetPointer());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pXmlWrite->WriteNodeBegin(wsNode,false);
|
||||
WritingbBracketsFromTopBottom(wsNode,stGroupPr.m_wsChr,wsAnnotation,pGroup->m_oElement.GetPointer());
|
||||
m_pXmlWrite->WriteNodeBegin(L"mspace",true);
|
||||
m_pXmlWrite->WriteNodeEnd(L"w",true,true);
|
||||
m_wsAnnotationStarMath += L"` ";
|
||||
m_pXmlWrite->WriteNodeEnd(wsNode,false,false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pXmlWrite->WriteNodeBegin(wsNode,false);
|
||||
ConversionElement(pGroup->m_oElement.GetPointer());
|
||||
m_pXmlWrite->WriteNodeBegin(L"mtext",false);
|
||||
m_pXmlWrite->WriteString(stGroupPr.m_wsChr);
|
||||
m_pXmlWrite->WriteNodeEnd(L"mtext",false,false);
|
||||
m_wsAnnotationStarMath += wsNode == L"mover"? L"csup ":L"csub ";
|
||||
m_wsAnnotationStarMath += L"\u0026quot;" + stGroupPr.m_wsChr + L"\u0026quot; ";
|
||||
m_pXmlWrite->WriteNodeEnd(wsNode,false,false);
|
||||
}
|
||||
}
|
||||
void COOXml2Odf::WritingbBracketsFromTopBottom(const std::wstring &wsNode, const std::wstring &wsChr, const std::wstring &wsAnnotation, OOX::Logic::CElement *pElement)
|
||||
{
|
||||
m_pXmlWrite->WriteNodeBegin(wsNode,false);
|
||||
ConversionElement(pElement);
|
||||
if(!wsChr.empty())
|
||||
RecordingMoNode(wsChr,m_pXmlWrite);
|
||||
else
|
||||
RecordingMoNode(L"\u23DF",m_pXmlWrite);
|
||||
m_wsAnnotationStarMath += wsAnnotation;
|
||||
m_pXmlWrite->WriteNodeEnd(wsNode,false,false);
|
||||
}
|
||||
StValuePr COOXml2Odf::ConversionGroupChrPr(OOX::Logic::CGroupChrPr *pGroupPr)
|
||||
@ -1140,8 +1194,13 @@ namespace StarMath
|
||||
if(pLimLow == nullptr)
|
||||
return;
|
||||
m_pXmlWrite->WriteNodeBegin(L"munder",false);
|
||||
ConversionElement(pLimLow->m_oElement.GetPointer());
|
||||
m_wsAnnotationStarMath += L"csub ";
|
||||
if(pLimLow->m_oElement.GetPointer()->m_arrItems.size() == 1 && pLimLow->m_oElement.GetPointer()->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr)
|
||||
ConversionGroupChr(dynamic_cast<OOX::Logic::CGroupChr*>(pLimLow->m_oElement.GetPointer()->m_arrItems[0]),true);
|
||||
else
|
||||
{
|
||||
ConversionElement(pLimLow->m_oElement.GetPointer());
|
||||
m_wsAnnotationStarMath += L"csub ";
|
||||
}
|
||||
ConversionLim(pLimLow->m_oLim.GetPointer());
|
||||
m_pXmlWrite->WriteNodeEnd(L"munder",false,false);
|
||||
}
|
||||
@ -1150,8 +1209,13 @@ namespace StarMath
|
||||
if(pLimUpp == nullptr)
|
||||
return;
|
||||
m_pXmlWrite->WriteNodeBegin(L"mover",false);
|
||||
ConversionElement(pLimUpp->m_oElement.GetPointer());
|
||||
m_wsAnnotationStarMath += L"csup ";
|
||||
if(pLimUpp->m_oElement.GetPointer()->m_arrItems.size() == 1 && pLimUpp->m_oElement.GetPointer()->m_arrItems[0]->getType() == OOX::EElementType::et_m_groupChr)
|
||||
ConversionGroupChr(dynamic_cast<OOX::Logic::CGroupChr*>(pLimUpp->m_oElement.GetPointer()->m_arrItems[0]),true);
|
||||
else
|
||||
{
|
||||
ConversionElement(pLimUpp->m_oElement.GetPointer());
|
||||
m_wsAnnotationStarMath += L"csup ";
|
||||
}
|
||||
ConversionLim(pLimUpp->m_oLim.GetPointer());
|
||||
m_pXmlWrite->WriteNodeEnd(L"mover",false,false);
|
||||
}
|
||||
@ -1253,7 +1317,7 @@ namespace StarMath
|
||||
{
|
||||
return m_stAttribute;
|
||||
}
|
||||
void COneElement::ConversionAttribute(StValuePr* pAttribute, unsigned int &iStyle, XmlUtils::CXmlWriter *pXmlWrite, std::wstring &wsAnnotation)
|
||||
void COneElement::ConversionAttribute(StValuePr* pAttribute, unsigned int &iStyle, XmlUtils::CXmlWriter *pXmlWrite, std::wstring &wsAnnotation,const bool& bDelimiter)
|
||||
{
|
||||
if(pAttribute == nullptr)
|
||||
return;
|
||||
@ -1330,8 +1394,8 @@ namespace StarMath
|
||||
pXmlWrite->WriteNodeEnd(L"w",true,false);
|
||||
iStyle++;
|
||||
}
|
||||
// delete pAttribute;
|
||||
pAttribute->Release();
|
||||
if(!bDelimiter)
|
||||
pAttribute->Release();
|
||||
}
|
||||
bool COneElement::CheckStyle()
|
||||
{
|
||||
@ -1825,6 +1889,60 @@ namespace StarMath
|
||||
else if(L"\u22EE" == wsSymbol) return L"dotsvert";
|
||||
else if(L"\u22F0" == wsSymbol) return L"dotsup";
|
||||
else if(L"\u22F1" == wsSymbol) return L"dotsdown";
|
||||
else if(L"\u0391" == wsSymbol) return L"%ALPHA";
|
||||
else if(L"\u03B1" == wsSymbol) return L"%alpha";
|
||||
else if(L"\u0396" == wsSymbol) return L"%ZETA";
|
||||
else if(L"\u03B6" == wsSymbol) return L"%zeta";
|
||||
else if(L"\u039B" == wsSymbol) return L"%LAMBDA";
|
||||
else if(L"\u03BB" == wsSymbol) return L"%lambda";
|
||||
else if(L"\u03A0" == wsSymbol) return L"%PI";
|
||||
else if(L"\u03C0" == wsSymbol) return L"%pi";
|
||||
else if(L"\u03A6" == wsSymbol) return L"%PHI";
|
||||
else if(L"\u03C6" == wsSymbol) return L"%phi";
|
||||
else if(L"\u03B5" == wsSymbol) return L"%varepsilon";
|
||||
else if(L"\u03B9" == wsSymbol) return L"%iota";
|
||||
else if(L"\u0399" == wsSymbol) return L"%IOTA";
|
||||
else if(L"\u03BE" == wsSymbol) return L"%xi";
|
||||
else if(L"\u039E" == wsSymbol) return L"%XI";
|
||||
else if(L"\u03F1" == wsSymbol) return L"%varrho";
|
||||
else if(L"\u0392" == wsSymbol) return L"%BETA";
|
||||
else if(L"\u03B2" == wsSymbol) return L"%beta";
|
||||
else if(L"\u0397" == wsSymbol) return L"%ETA";
|
||||
else if(L"\u03B7" == wsSymbol) return L"%eta";
|
||||
else if(L"\u039C" == wsSymbol) return L"%MU";
|
||||
else if(L"\u03BC" == wsSymbol) return L"%mu";
|
||||
else if(L"\u03A1" == wsSymbol) return L"%RHO";
|
||||
else if(L"\u03C1" == wsSymbol) return L"%rho";
|
||||
else if(L"\u03A7" == wsSymbol) return L"%CHI";
|
||||
else if( L"\u03C7" == wsSymbol) return L"%chi";
|
||||
else if(L"\u03BA" == wsSymbol) return L"%kappa";
|
||||
else if(L"\u039A" == wsSymbol) return L"%KAPPA";
|
||||
else if(L"\u039F" == wsSymbol) return L"%OMICRON";
|
||||
else if(L"\u03BF" == wsSymbol) return L"%omicron";
|
||||
else if(L"\u03A3" == wsSymbol) return L"%SIGMA";
|
||||
else if(L"\u03C3" == wsSymbol) return L"%sigma";
|
||||
else if(L"\u03C6" == wsSymbol) return L"%varphi";
|
||||
else if(L"\u0393" == wsSymbol) return L"%GAMMA";
|
||||
else if(L"\u03B3" == wsSymbol) return L"%gamma";
|
||||
else if(L"\u0398" == wsSymbol) return L"%THETA";
|
||||
else if(L"\u03B8" == wsSymbol) return L"%theta";
|
||||
else if(L"\u039D" == wsSymbol) return L"%NU";
|
||||
else if(L"\u03BD" == wsSymbol) return L"%nu";
|
||||
else if(L"\u03A8" == wsSymbol) return L"%PSI";
|
||||
else if(L"\u03C8" == wsSymbol) return L"%psi";
|
||||
else if(L"\u03DB" == wsSymbol) return L"%varsigma";
|
||||
else if(L"\u0394" == wsSymbol) return L"%DELTA";
|
||||
else if(L"\u03B4" == wsSymbol) return L"%delta";
|
||||
else if(L"\u03A4" == wsSymbol) return L"%TAU";
|
||||
else if(L"\u03C4" == wsSymbol) return L"%tau";
|
||||
else if(L"\u03A9" == wsSymbol) return L"%OMEGA";
|
||||
else if(L"\u03C9" == wsSymbol) return L"%omega";
|
||||
else if(L"\u03D6" == wsSymbol) return L"%varphi";
|
||||
else if(L"\u0395" == wsSymbol) return L"%EPSILON";
|
||||
else if(L"\u03B5" == wsSymbol) return L"%epsilon";
|
||||
else if(L"\u03A5" == wsSymbol) return L"%UPSILON";
|
||||
else if(L"\u03C5" == wsSymbol) return L"%upsilon";
|
||||
else if(L"\u03D1" == wsSymbol) return L"%vartheta";
|
||||
else return L"";
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
#include <utility>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
#include <stack>
|
||||
|
||||
namespace StarMath
|
||||
{
|
||||
@ -52,7 +53,7 @@ namespace StarMath
|
||||
void ConversionMath(OOX::Logic::COMath* pMath);
|
||||
std::vector<COneElement *> ConversionMT(OOX::Logic::CMText* pMt, const StValuePr* pValue);
|
||||
void ConversionMF(OOX::Logic::CFraction* pMf);
|
||||
unsigned int ConversionCtrlPr(OOX::Logic::CCtrlPr* pCtrlPr);
|
||||
unsigned int ConversionCtrlPr(OOX::Logic::CCtrlPr* pCtrlPr, const bool& bDelimiter = false);
|
||||
unsigned int ConversionCMPr(OOX::Logic::CMPr* pMPr);
|
||||
StValuePr ConversionFpr(OOX::Logic::CFPr* pFpr);
|
||||
std::wstring ConversionType(OOX::Logic::CType* pType);
|
||||
@ -78,8 +79,9 @@ namespace StarMath
|
||||
void ConversionRad(OOX::Logic::CRad* pRad);
|
||||
unsigned int ConversionRadPr(OOX::Logic::CRadPr* pRadPr,bool& bDeg);
|
||||
void ConversionDeg(OOX::Logic::CDeg* pDeg);
|
||||
void ConversionGroupChr(OOX::Logic::CGroupChr* pGroup);
|
||||
void ConversionGroupChr(OOX::Logic::CGroupChr* pGroup,const bool& bElement = false);
|
||||
StValuePr ConversionGroupChrPr(OOX::Logic::CGroupChrPr* pGroupPr);
|
||||
void WritingbBracketsFromTopBottom(const std::wstring& wsNode,const std::wstring& wsChr,const std::wstring& wsAnnotation,OOX::Logic::CElement* pElement);
|
||||
void ConversionBar(OOX::Logic::CBar* pBar);
|
||||
StValuePr ConversionBarPr(OOX::Logic::CBarPr* pBarPr,unsigned int& iStyle);
|
||||
void ConversionSPre(OOX::Logic::CSPre* pSPre);
|
||||
@ -106,6 +108,7 @@ namespace StarMath
|
||||
static bool IsAlpha(const std::wstring& wsAlpha);
|
||||
static void StyleClosing(const unsigned int &iStyle, XmlUtils::CXmlWriter* pXmlWrite);
|
||||
bool ComparingAttributes(StValuePr* pRight, StValuePr* pLeft);
|
||||
void AttributeCheck(StValuePr*& pParent, StValuePr*& pChild);
|
||||
void EndOdf();
|
||||
std::wstring GetOdf();
|
||||
std::wstring GetAnnotation();
|
||||
@ -113,6 +116,7 @@ namespace StarMath
|
||||
private:
|
||||
XmlUtils::CXmlWriter* m_pXmlWrite;
|
||||
std::wstring m_wsAnnotationStarMath,m_wsSemantic;
|
||||
std::stack<StValuePr*> m_stAttribute;
|
||||
};
|
||||
class COneElement
|
||||
{
|
||||
@ -127,7 +131,7 @@ namespace StarMath
|
||||
TypeElement GetType();
|
||||
void SetAttribute(StValuePr* stAttribute);
|
||||
StValuePr* GetAttribute();
|
||||
static void ConversionAttribute(StValuePr* pAttribute,unsigned int & iStyle ,XmlUtils::CXmlWriter* pXmlWrite,std::wstring& wsAnnotation);
|
||||
static void ConversionAttribute(StValuePr* pAttribute, unsigned int & iStyle , XmlUtils::CXmlWriter* pXmlWrite, std::wstring& wsAnnotation, const bool &bDelimiter = false);
|
||||
bool CheckStyle();
|
||||
unsigned int GetStyle();
|
||||
private:
|
||||
|
||||
@ -401,6 +401,80 @@ TEST(OOXml2OdfTest,Func)
|
||||
StCorrect.m_wsAnnotation = L"coth 5 ";
|
||||
EXPECT_EQ(StResult,StCorrect);
|
||||
}
|
||||
TEST(OOXml2OdfTest,LimUpp)
|
||||
{
|
||||
XmlUtils::CXmlLiteReader oReader;
|
||||
OOX::WritingElement* pElement = new OOX::Logic::CLimUpp;
|
||||
if(oReader.FromString(L"<m:limUpp> <m:limUppPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:i/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:limUppPr> <m:e> <m:groupChr> <m:groupChrPr> <m:chr m:val=\"\u23DE\"/> <m:pos m:val=\"top\"/> <m:vertJc m:val=\"bot\"/> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:i/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:groupChrPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>1</m:t> </m:r> </m:e> </m:groupChr> </m:e> <m:lim> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2</m:t> </m:r> </m:lim> </m:limUpp>") && oReader.ReadNextNode())
|
||||
pElement->fromXML(oReader);
|
||||
StarMath::COOXml2Odf oTest;
|
||||
oTest.NodeDefinition(pElement);
|
||||
StMath StCorrect,StResult;
|
||||
StResult.m_wsSemantic = oTest.GetOdf();
|
||||
StResult.m_wsAnnotation = oTest.GetAnnotation();
|
||||
StCorrect.m_wsSemantic = L"<mover><mover><mn>1</mn><mo stretchy=\"false\">\u23DE</mo></mover><mn>2</mn></mover>";
|
||||
StCorrect.m_wsAnnotation = L"1 overbrace 2 ";
|
||||
EXPECT_EQ(StResult,StCorrect);
|
||||
}
|
||||
TEST(OOXml2OdfTest,LimLowWithGroup)
|
||||
{
|
||||
XmlUtils::CXmlLiteReader oReader;
|
||||
OOX::WritingElement* pElement = new OOX::Logic::CLimLow();
|
||||
if(oReader.FromString(L"<m:limLow> <m:limLowPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:i/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:limLowPr> <m:e> <m:groupChr> <m:groupChrPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:i/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:groupChrPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>3</m:t> </m:r> </m:e> </m:groupChr> </m:e> <m:lim> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>4</m:t> </m:r> </m:lim> </m:limLow>") && oReader.ReadNextNode())
|
||||
pElement->fromXML(oReader);
|
||||
StarMath::COOXml2Odf oTest;
|
||||
oTest.NodeDefinition(pElement);
|
||||
StMath StCorrect,StResult;
|
||||
StResult.m_wsSemantic = oTest.GetOdf();
|
||||
StResult.m_wsAnnotation = oTest.GetAnnotation();
|
||||
StCorrect.m_wsSemantic = L"<munder><munder><mn>3</mn><mo stretchy=\"false\">\u23DF</mo></munder><mn>4</mn></munder>";
|
||||
StCorrect.m_wsAnnotation = L"3 underbrace 4 ";
|
||||
EXPECT_EQ(StResult,StCorrect);
|
||||
}
|
||||
TEST(OOXml2OdfTest,Example2)
|
||||
{
|
||||
XmlUtils::CXmlLiteReader oReader;
|
||||
OOX::WritingElement* pElement = new OOX::Logic::COMathPara();
|
||||
if(oReader.FromString(L"<m:oMathPara> <m:oMath> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>=</m:t> </m:r> <m:f> <m:fPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:fPr> <m:num> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>-</m:t> </m:r> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>b</m:t> </m:r> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>\u00B1</m:t> </m:r> <m:rad> <m:radPr> <m:degHide m:val=\"1\"/> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:radPr> <m:deg/> <m:e> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>b</m:t> </m:r> </m:e> <m:sup> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2</m:t> </m:r> </m:sup> </m:sSup> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>-4</m:t> </m:r> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>ac</m:t> </m:r> </m:e> </m:rad> </m:num> <m:den> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2</m:t> </m:r> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>a</m:t> </m:r> </m:den> </m:f> </m:oMath> </m:oMathPara>") && oReader.ReadNextNode())
|
||||
pElement->fromXML(oReader);
|
||||
StarMath::COOXml2Odf oTest;
|
||||
oTest.StartConversion(pElement);
|
||||
std::wstring wsOdf = L"<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mrow><mi mathvariant=\"italic\">x</mi><mo stretchy=\"false\">=</mo></mrow><mfrac><mrow><mrow><mo stretchy=\"false\">-</mo><mi mathvariant=\"italic\">b</mi></mrow><mo stretchy=\"false\">\u00B1</mo></mrow><sqrt><msup><mi mathvariant=\"italic\">b</mi><mn>2</mn></msup><mrow><mo stretchy=\"false\">-</mo><mn>4</mn></mrow><mi mathvariant=\"italic\">ac</mi></sqrt><mn>2a</mn></mfrac></mrow><annotation encoding=\"StarMath 5.0\">x = { - b +- sqrt { b ^ {2 } - 4 ac } } over { 2a } </annotation></semantics></math>";
|
||||
EXPECT_EQ(oTest.GetOdf(),wsOdf);
|
||||
}
|
||||
//TEST(OOXml2OdfTest,Example5)
|
||||
//{
|
||||
// XmlUtils::CXmlLiteReader oReader;
|
||||
// OOX::WritingElement* pElement = new OOX::Logic::COMathPara();
|
||||
// if(oReader.FromString(L"<m:oMathPara> <m:oMath> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>e</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> </m:sup> </m:sSup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>=1+</m:t> </m:r> <m:f> <m:fPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:fPr> <m:num> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> </m:num> <m:den> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>1\u0021</m:t> </m:r> </m:den> </m:f> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>+</m:t> </m:r> <m:f> <m:fPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:fPr> <m:num> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2</m:t> </m:r> </m:sup> </m:sSup> </m:num> <m:den> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2\u0021</m:t> </m:r> </m:den> </m:f> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>+</m:t> </m:r> <m:f> <m:fPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:fPr> <m:num> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>3</m:t> </m:r> </m:sup> </m:sSup> </m:num> <m:den> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>3\u0021</m:t> </m:r> </m:den> </m:f> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>+\u2026,</m:t> </m:r> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t xml:space=\"preserve\"> </m:t> </m:r> <m:r> <m:rPr> <m:sty m:val=\"p\"/> </m:rPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t xml:space=\"preserve\"> </m:t> </m:r> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>-\u221E\u003Cx\u003C\u221E</m:t> </m:r> </m:oMath> </m:oMathPara> ") && oReader.ReadNextNode())
|
||||
// pElement->fromXML(oReader);
|
||||
// StarMath::COOXml2Odf oTest;
|
||||
// oTest.StartConversion(pElement);
|
||||
// std::wstring wsOdf = L"<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><msup><mi mathvariant=\"italic\">e</mi><mi mathvariant=\"italic\">x</mi></msup><mrow><mrow><mo stretchy=\"false\">=</mo><mn>1</mn></mrow><mo stretchy=\"false\">+</mo></mrow><mfrac><mi mathvariant=\"italic\">x</mi><mn>1</mn><mtext>\u0021</mtext></mfrac><mrow><mo stretchy=\"false\">+</mo></mrow><mfrac><msup><mi mathvariant=\"italic\">x</mi><mn>2</mn></msup><mn>2</mn><mtext>\u0021</mtext></mfrac><mrow><mo stretchy=\"false\">+</mo></mrow><mfrac><msup><mi mathvariant=\"italic\">x</mi><mn>3</mn></msup><mn>3</mn><mtext>\u0021</mtext></mfrac><mrow><mo stretchy=\"false\">+</mo><mi mathvariant=\"normal\">\u2026</mi></mrow><mtext>,</mtext><mspace /><mspace /><mrow><mrow><mrow><mo stretchy=\"false\">-</mo><mi mathvariant=\"normal\">\u221E</mi></mrow><mo stretchy=\"false\"><</mo><mi mathvariant=\"italic\">x</mi></mrow><mo stretchy=\"false\"><</mo><mi mathvariant=\"normal\">\221E</mi></mrow></mrow><annotation encoding=\"StarMath 5.0\">e ^ {x } = 1 + { x } over { 1 "\u0021" } + { x ^ {2 } } over { 2 "\u0021" } + { x ^ {3 } } over { 3 "\u0021" } + dotslow "," ` ` - infinity < x < infinity </annotation></semantics></math>";
|
||||
// EXPECT_EQ(oTest.GetOdf(),wsOdf);
|
||||
//}
|
||||
TEST(OOXml2OdfTest,Example1)
|
||||
{
|
||||
XmlUtils::CXmlLiteReader oReader;
|
||||
OOX::WritingElement* pElement = new OOX::Logic::COMathPara();
|
||||
if(oReader.FromString(L"<m:oMathPara> <m:oMath> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:d> <m:dPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:dPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x+a</m:t> </m:r> </m:e> </m:d> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>n</m:t> </m:r> </m:sup> </m:sSup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>=</m:t> </m:r> <m:nary> <m:naryPr> <m:chr m:val=\"\u2211\"/> <m:grow m:val=\"1\"/> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:naryPr> <m:sub> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>k=0</m:t> </m:r> </m:sub> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>n</m:t> </m:r> </m:sup> <m:e> <m:d> <m:dPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:dPr> <m:e> <m:f> <m:fPr> <m:type m:val=\"noBar\"/> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:fPr> <m:num> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>n</m:t> </m:r> </m:num> <m:den> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>k</m:t> </m:r> </m:den> </m:f> </m:e> </m:d> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>x</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>k</m:t> </m:r> </m:sup> </m:sSup> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>a</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:eastAsia=\"Cambria Math\" w:hAnsi=\"Cambria Math\" w:cs=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>n-k</m:t> </m:r> </m:sup> </m:sSup> </m:e> </m:nary> </m:oMath> </m:oMathPara>") && oReader.ReadNextNode())
|
||||
pElement->fromXML(oReader);
|
||||
StarMath::COOXml2Odf oTest;
|
||||
oTest.StartConversion(pElement);
|
||||
std::wstring wsOdf = L"<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><msup><mrow><mo fence=\"true\" form=\"prefix\" stretchy=\"true\" />(<mrow><mrow><mi mathvariant=\"italic\">x</mi><mo stretchy=\"false\">+</mo><mi mathvariant=\"italic\">a</mi></mrow></mrow><mo fence=\"true\" form=\"postfix\" stretchy=\"true\" />)</mrow><mi mathvariant=\"italic\">n</mi></msup><mrow><mo stretchy=\"false\">=</mo></mrow><munderover><mo stretchy=\"false\">\u2211</mo><mrow><mi mathvariant=\"italic\">k</mi><mo stretchy=\"false\">=</mo><mn>0</mn></mrow><mi mathvariant=\"italic\">n</mi></munderover><mrow><mo fence=\"true\" form=\"prefix\" stretchy=\"true\" />(<mrow><mtable><mtr><mtd><mi mathvariant=\"italic\">n</mi></mtd></mtr><mtr><mtd><mi mathvariant=\"italic\">k</mi></mtd></mtr></mtable></mrow><mo fence=\"true\" form=\"postfix\" stretchy=\"true\" />)</mrow><msup><mi mathvariant=\"italic\">x</mi><mi mathvariant=\"italic\">k</mi></msup><msup><mi mathvariant=\"italic\">a</mi><mrow><mi mathvariant=\"italic\">n</mi><mo stretchy=\"false\">-</mo><mi mathvariant=\"italic\">k</mi></mrow></msup></mrow><annotation encoding=\"StarMath 5.0\">left ( x + a right ) ^ {n } = sum from {k = 0 } to {n } left ( binom { n } { k } right ) x ^ {k } a ^ {n - k } </annotation></semantics></math>";
|
||||
EXPECT_EQ(oTest.GetOdf(),wsOdf);
|
||||
}
|
||||
TEST(OOXml2OdfTest,Example3)
|
||||
{
|
||||
XmlUtils::CXmlLiteReader oReader;
|
||||
OOX::WritingElement* pElement = new OOX::Logic::COMathPara();
|
||||
if(oReader.FromString(L"<m:oMathPara> <m:oMath> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>A=\u03C0</m:t> </m:r> <m:sSup> <m:sSupPr> <m:ctrlPr> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> </m:ctrlPr> </m:sSupPr> <m:e> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>r</m:t> </m:r> </m:e> <m:sup> <m:r> <w:rPr> <w:rFonts w:ascii=\"Cambria Math\" w:hAnsi=\"Cambria Math\"/> <w:lang w:val=\"en-US\"/> </w:rPr> <m:t>2</m:t> </m:r> </m:sup> </m:sSup> </m:oMath> </m:oMathPara>") && oReader.ReadNextNode())
|
||||
pElement->fromXML(oReader);
|
||||
StarMath::COOXml2Odf oTest;
|
||||
oTest.StartConversion(pElement);
|
||||
std::wstring wsOdf = L"<math xmlns=\"http://www.w3.org/1998/Math/MathML\" display=\"block\"><semantics><mrow><mrow><mi mathvariant=\"italic\">A</mi><mo stretchy=\"false\">=</mo><mi mathvariant=\"normal\">\u03C0</mi></mrow><msup><mi mathvariant=\"italic\">r</mi><mn>2</mn></msup></mrow><annotation encoding=\"StarMath 5.0\">A = %pi r ^ {2 } </annotation></semantics></math>";
|
||||
EXPECT_EQ(oTest.GetOdf(),wsOdf);
|
||||
}
|
||||
//TEST(OOXml2OdfTest,MathTemp)
|
||||
//{
|
||||
// XmlUtils::CXmlLiteReader oReader;
|
||||
|
||||
Reference in New Issue
Block a user