Commit abd736ea authored by Sergey.Tsarkov's avatar Sergey.Tsarkov Committed by Alexander Trofimov

(2.0.0.184): ASCOfficeDocxFile2

подключены формулы на чтение.
поправлены ф-лы на чтение из doc

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@58550 954022d7-b5bf-4e40-9824-e11837661b57
parent 00011eb5
...@@ -16,7 +16,6 @@ namespace MathEquation ...@@ -16,7 +16,6 @@ namespace MathEquation
{ {
public: public:
NSBinPptxRW::CBinaryFileWriter &m_oStream; NSBinPptxRW::CBinaryFileWriter &m_oStream;
//Streams::CBufferedStream &m_oStream;
std::stack<int> m_aEquationStack; std::stack<int> m_aEquationStack;
std::stack<int> m_aNArrayStack; std::stack<int> m_aNArrayStack;
std::stack<int> m_aRunStack; std::stack<int> m_aRunStack;
...@@ -26,6 +25,11 @@ namespace MathEquation ...@@ -26,6 +25,11 @@ namespace MathEquation
std::stack<int> m_aMatrixStack; std::stack<int> m_aMatrixStack;
std::stack<int> m_aLimitStack; std::stack<int> m_aLimitStack;
std::stack<int> m_aLimitElemsStack; std::stack<int> m_aLimitElemsStack;
std::stack<int> m_aScriptStack;
std::stack<int> m_aAccentStack;
LONG nTextSize;
LONG nCtrlSize;
public: public:
BinaryEquationWriter(NSBinPptxRW::CBinaryFileWriter &oStream) : bEmbel(false), m_oStream(oStream) BinaryEquationWriter(NSBinPptxRW::CBinaryFileWriter &oStream) : bEmbel(false), m_oStream(oStream)
{ {
...@@ -56,6 +60,49 @@ namespace MathEquation ...@@ -56,6 +60,49 @@ namespace MathEquation
m_oStream.WriteLONG(nEnd - nStart - 4); m_oStream.WriteLONG(nEnd - nStart - 4);
m_oStream.SetPosition(nEnd); m_oStream.SetPosition(nEnd);
} }
void WriteRPR(TMathFont* &pFont, LONG nSize, BOOL bIsOpen)
{
if (NULL != pFont)
{
int nCurPos;
if (bIsOpen)
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::RPr);
else
nCurPos = WriteItemStart(BinDocxRW::c_oSerRunType::rPr);
if (false != pFont->bBold)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::Bold);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Byte);
m_oStream.WriteBOOL(true);
}
if (false != pFont->bItalic)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::Italic);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Byte);
m_oStream.WriteBOOL(true);
}
CString sFontName;
sFontName.Format(_T("%S"), pFont->sName.c_str());
if (sFontName)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::FontAscii);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Variable);
m_oStream.WriteStringW(sFontName);
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::FontHAnsi);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Variable);
m_oStream.WriteStringW(sFontName);
}
if (nTextSize)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::FontSize);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Long);
m_oStream.WriteLONG(nSize);
}
WriteItemEnd(nCurPos);
}
}
virtual void BeginEquation() virtual void BeginEquation()
...@@ -88,12 +135,32 @@ namespace MathEquation ...@@ -88,12 +135,32 @@ namespace MathEquation
} }
virtual void SetSize(uint16_t nSize) virtual void SetSize(uint16_t nSize)
{ {
nTextSize = nSize*2;
if (!m_aCommandStack.empty())
{
ECommandType type;
type = m_aCommandStack.top()->GetCommand();
int i = 1;
}
} }
virtual void BeginChar(Unicode_t uChar, uint8_t nTypeFace, bool bSpecialSymbol) virtual void BeginChar(Unicode_t uChar, uint8_t nTypeFace, bool bSpecialSymbol)
{ {
BOOL bIsOpen;
if (!m_aCommandStack.empty())
bIsOpen = m_aCommandStack.top()->IsOpenNode(); // false ctrlPrp
else
bIsOpen = true;
if (m_aRunStack.empty()); if (m_aRunStack.empty());
{ {
int nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::MRun); int nCurPos;
if (bIsOpen)
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::MRun);
else
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::CtrlPr);
m_aRunStack.push(nCurPos); m_aRunStack.push(nCurPos);
} }
...@@ -119,53 +186,67 @@ namespace MathEquation ...@@ -119,53 +186,67 @@ namespace MathEquation
m_oStream.WriteStringW(str); m_oStream.WriteStringW(str);
WriteItemEnd(nCurPos1); WriteItemEnd(nCurPos1);
} }
TMathFont* pFont = GetFont(nTypeFace); TMathFont* pFont = GetFont(nTypeFace);
WriteRPR(pFont, nTextSize, bIsOpen);
if (NULL != pFont)
{
int nCurPos2 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::RPr);
if (false != pFont->bBold)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::Bold);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Byte);
m_oStream.WriteBOOL(true);
} }
if (false != pFont->bItalic) virtual void AddCharEmbel(MEMBELTYPE eType)
{
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::Italic);
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Byte);
m_oStream.WriteBOOL(true);
}
CString sFontName;
sFontName.Format(_T("%S"), pFont->sName.c_str());
if (sFontName)
{ {
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::FontAscii); bEmbel = true;
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Variable); int nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Acc);
m_oStream.WriteStringW(sFontName); int nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::AccPr);
CString str;
m_oStream.WriteBYTE(BinDocxRW::c_oSerProp_rPrType::FontHAnsi); switch (eType)
m_oStream.WriteBYTE(BinDocxRW::c_oSerPropLenType::Variable); {
m_oStream.WriteStringW(sFontName); /*case embelDot: str.Insert(0," dot "); break;
} case embelDDot: str.Insert(0," ddot "); break;
case embelDDDot: str.Insert(0," dddot "); break;
WriteItemEnd(nCurPos2); case embelPrime: str.Insert(0," prime "); break;
case embelDPrime: str.Insert(0," double prime "); break;
case embelLPrime: str.Insert(0," left prime "); break;
case embelTilde: str.Insert(0," tilde "); break;
case embelHat: str.Insert(0," hat "); break;
case embelSlash: str.Insert(0," slash "); break;
case embelLArrow: str.Insert(0," left arrow "); break;
case embelRArrow: str.Insert(0," right arrow "); break;*/
case embelDArrow: str.Insert(0, 0x2194); break;
/*case embelLHarpoon: str.Insert(0," left harpoon "); break;
case embelRHarpoon: str.Insert(0," right harpoon "); break;
case embelStrikeout: str.Insert(0," strikeout "); break;
case embelBar: str.Insert(0," bar "); break;
case embelTPrime: str.Insert(0," triple prime "); break;
case embelFrown: str.Insert(0," frown "); break;
case embelSmile: str.Insert(0," smiple "); break;*/
} }
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemEnd(nCurPos1);
bEmbel = false; int nCurPos2 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element);
m_aAccentStack.push(nCurPos2);
} m_aAccentStack.push(nCurPos);
virtual void AddCharEmbel(MEMBELTYPE eType)
{
} }
virtual void EndChar() virtual void EndChar()
{ {
int nCurPos = m_aRunStack.top(); int nCurPos = m_aRunStack.top();
WriteItemEnd(nCurPos); WriteItemEnd(nCurPos);
m_aRunStack.pop(); m_aRunStack.pop();
if (bEmbel)
{
int nCurPos;
if (!m_aAccentStack.empty())
{
nCurPos = m_aAccentStack.top();
m_aAccentStack.pop();
WriteItemEnd(nCurPos);
}
if (!m_aAccentStack.empty())
{
nCurPos = m_aAccentStack.top();
m_aAccentStack.pop();
WriteItemEnd(nCurPos);
}
bEmbel = false;
}
} }
virtual void BeginMatrix(uint8_t nVAlign, MMATRIXHORALIGN eHorAlign, MMATRIXVERALIGN eVerAlign, bool bEqualRows, bool bEqualCols, uint8_t nRows, uint8_t nCols, uint8_t* pVerBorders, uint8_t* pHorBorders) virtual void BeginMatrix(uint8_t nVAlign, MMATRIXHORALIGN eHorAlign, MMATRIXVERALIGN eVerAlign, bool bEqualRows, bool bEqualCols, uint8_t nRows, uint8_t nCols, uint8_t* pVerBorders, uint8_t* pHorBorders)
{ {
...@@ -174,12 +255,14 @@ namespace MathEquation ...@@ -174,12 +255,14 @@ namespace MathEquation
int nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Matrix); int nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Matrix);
m_aMatrixStack.push(nCurPos); m_aMatrixStack.push(nCurPos);
int nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::MPr);
WriteItemValLong(BinDocxRW::c_oSer_OMathBottomNodesType::Row, nRows);
int nCurPos2 = WriteItemStart(BinDocxRW::c_oSer_OMathBottomNodesType::Mcs); int nCurPos2 = WriteItemStart(BinDocxRW::c_oSer_OMathBottomNodesType::Mcs);
int nCurPos3 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Mc); int nCurPos3 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Mc);
int nCurPos4 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::McPr); int nCurPos4 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::McPr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::Count, nCols); WriteItemValLong(BinDocxRW::c_oSer_OMathBottomNodesType::Count, nCols);
BYTE horAlign; BYTE horAlign;
switch(eHorAlign) switch(eHorAlign)
...@@ -195,7 +278,7 @@ namespace MathEquation ...@@ -195,7 +278,7 @@ namespace MathEquation
WriteItemEnd(nCurPos4); WriteItemEnd(nCurPos4);
WriteItemEnd(nCurPos3); WriteItemEnd(nCurPos3);
WriteItemEnd(nCurPos2); WriteItemEnd(nCurPos2);
WriteItemEnd(nCurPos1);
} }
virtual void EndMatrix() virtual void EndMatrix()
...@@ -208,9 +291,22 @@ namespace MathEquation ...@@ -208,9 +291,22 @@ namespace MathEquation
} }
virtual void StartPile(uint8_t nHAlign, uint8_t nVAlign) virtual void StartPile(uint8_t nHAlign, uint8_t nVAlign)
{ {
if (!m_aCommandStack.empty())
m_aCommandStack.top()->SetPile(true);
} }
virtual void EndPile() virtual void EndPile()
{ {
if (!m_aCommandStack.empty())
{
m_aCommandStack.top()->SetPile(false);
CBaseCommand* pCommand = TopCommand();
pCommand->WriteEndBlock(this);
ECommandType type;
type = pCommand->GetCommand();
if (type == commandIntegral || type == commandNArray)
pCommand->Next();
}
} }
virtual void BeginBrackets(MBRACKETSTYPE eType, bool bOpen, bool bClose) virtual void BeginBrackets(MBRACKETSTYPE eType, bool bOpen, bool bClose)
{ {
...@@ -332,10 +428,54 @@ namespace MathEquation ...@@ -332,10 +428,54 @@ namespace MathEquation
{ {
CScriptCommand* pCommand = (CScriptCommand*)PushCommand(commandScript); CScriptCommand* pCommand = (CScriptCommand*)PushCommand(commandScript);
pCommand->SetProps(bInline, bBase, bSup, bSub); pCommand->SetProps(bInline, bBase, bSup, bSub);
int nCurPos;
int nCurPos1;
if (bBase)
{
switch(eAlign)
{
case scriptalignRight:
if (bSub)
{
if (bSup)
{
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSubSup);
nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSubSupPr);
}
else
{
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSub);
nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSubPr);
}
}
else if (bSup)
{
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSup);
nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SSupPr);
}
break;
case scriptalignCenter: break;
case scriptalignLeft:
{
nCurPos = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SPre);
nCurPos1 = WriteItemStart(BinDocxRW::c_oSer_OMathContentType::SPrePr);
}
break;
}
if (bInline)
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::AlnScr, true);
WriteItemEnd(nCurPos1);
m_aScriptStack.push(nCurPos);
}
} }
virtual void EndScript () virtual void EndScript ()
{ {
PopCommand(); PopCommand();
int nCurPos = m_aScriptStack.top();
WriteItemEnd(nCurPos);
m_aScriptStack.pop();
} }
virtual void BeginBar(MBARTYPE eType, bool bTop) virtual void BeginBar(MBARTYPE eType, bool bTop)
{ {
...@@ -648,13 +788,13 @@ namespace MathEquation ...@@ -648,13 +788,13 @@ namespace MathEquation
case narySumCSub: case narySumCSub:
str.Insert(0,0x2211); str.Insert(0,0x2211);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case narySumCSubSup: case narySumCSubSup:
str.Insert(0,0x2211); str.Insert(0,0x2211);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
break; break;
case narySum: case narySum:
str.Insert(0,0x2211); str.Insert(0,0x2211);
...@@ -666,133 +806,133 @@ namespace MathEquation ...@@ -666,133 +806,133 @@ namespace MathEquation
case narySumRSub: case narySumRSub:
str.Insert(0,0x2211); str.Insert(0,0x2211);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case narySumRSubSup: case narySumRSubSup:
str.Insert(0,0x2211); str.Insert(0,0x2211);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
break; break;
case naryProdCSub: case naryProdCSub:
str.Insert(0,0x220F); str.Insert(0,0x220F);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryProdCSubSup: case naryProdCSubSup:
str.Insert(0,0x220F); str.Insert(0,0x220F);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
break; break;
case naryProd: case naryProd:
str.Insert(0,0x220F); str.Insert(0,0x220F);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true);
break; break;
case naryProdRSub: case naryProdRSub:
str.Insert(0,0x220F); str.Insert(0,0x220F);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryProdRSubSup: case naryProdRSubSup:
str.Insert(0,0x220F); str.Insert(0,0x220F);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
break; break;
case naryCoProdCSub: case naryCoProdCSub:
str.Insert(0,0x2210); str.Insert(0,0x2210);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryCoProdCSubSup: case naryCoProdCSubSup:
str.Insert(0,0x2210); str.Insert(0,0x2210);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
break; break;
case naryCoProd: case naryCoProd:
str.Insert(0,0x2210); str.Insert(0,0x2210);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true);
break; break;
case naryCoProdRSub: case naryCoProdRSub:
str.Insert(0,0x2210); str.Insert(0,0x2210);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryCoProdRSubSup: case naryCoProdRSubSup:
str.Insert(0,0x2210); str.Insert(0,0x2210);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
break; break;
case naryUnionCSub: case naryUnionCSub:
str.Insert(0,0x22C3); str.Insert(0,0x22C3);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryUnionCSubSup: case naryUnionCSubSup:
str.Insert(0,0x22C3); str.Insert(0,0x22C3);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
break; break;
case naryUnion: case naryUnion:
str.Insert(0,0x22C3); str.Insert(0,0x22C3);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true);
break; break;
case naryUnionRSub: case naryUnionRSub:
str.Insert(0,0x22C3); str.Insert(0,0x22C3);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryUnionRSubSup: case naryUnionRSubSup:
str.Insert(0,0x22C3); str.Insert(0,0x22C3);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
break; break;
case naryIntersectCSub: case naryIntersectCSub:
str.Insert(0,0x22C2); str.Insert(0,0x22C2);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryIntersectCSubSup: case naryIntersectCSubSup:
str.Insert(0,0x22C2); str.Insert(0,0x22C2);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
break; break;
case naryIntersect: case naryIntersect:
str.Insert(0,0x22C2); str.Insert(0,0x22C2);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SubHide, true);
break; break;
case naryIntersectRSub: case naryIntersectRSub:
str.Insert(0,0x22C2); str.Insert(0,0x22C2);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::SupHide, true);
break; break;
case naryIntersectRSubSup: case naryIntersectRSubSup:
str.Insert(0,0x22C2); str.Insert(0,0x22C2);
WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str); WriteItemValStr(BinDocxRW::c_oSer_OMathBottomNodesType::Chr, str);
WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocUndOvr); WriteItemVal(BinDocxRW::c_oSer_OMathBottomNodesType::LimLoc, SimpleTypes::limLocSubSup);
break; break;
} }
...@@ -846,7 +986,7 @@ namespace MathEquation ...@@ -846,7 +986,7 @@ namespace MathEquation
WriteItemEnd(nCurPos); WriteItemEnd(nCurPos);
} }
void WriteItemVal(BYTE name, LONG val) void WriteItemValLong(BYTE name, LONG val)
{ {
int nCurPos = WriteItemStart(name); int nCurPos = WriteItemStart(name);
...@@ -898,7 +1038,7 @@ namespace MathEquation ...@@ -898,7 +1038,7 @@ namespace MathEquation
{ {
public: public:
CBaseCommand() : nBlockNum(-1) CBaseCommand() : nBlockNum(-1), bPile(false), bEqArrayStart(false)
{ {
} }
...@@ -908,19 +1048,89 @@ namespace MathEquation ...@@ -908,19 +1048,89 @@ namespace MathEquation
void Next() void Next()
{ {
BOOL bCurPile;
bCurPile = GetPile();
if (!bCurPile || (nBlockNum == -1))
nBlockNum++; nBlockNum++;
} }
BOOL IsOpenNode()
{
return bOpenNode;
}
void SetPile(BOOL bSetPile)
{
bPile = bSetPile;
bEqArrayStart = !bSetPile;
}
bool GetPile()
{
return bPile;
}
int GetBlockNum() int GetBlockNum()
{ {
return nBlockNum; return nBlockNum;
} }
void WriteBeginNode(BinaryEquationWriter* pWriter, BYTE elem)
{
int nElemPos;
if (bEqArrayStart)
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element);
else
nElemPos = pWriter->WriteItemStart(elem);
m_aBaseStack.push(nElemPos);
if (bPile && !bEqArrayStart)
{
bEqArrayStart = true;
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::EqArr);
m_aBaseStack.push(nElemPos);
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::EqArrPr);
pWriter->WriteItemEnd(nElemPos);
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element);
m_aBaseStack.push(nElemPos);
}
}
void WriteEndNode(BinaryEquationWriter* pWriter)
{
int nCurPos;
if (!m_aBaseStack.empty())
{
nCurPos = m_aBaseStack.top();
m_aBaseStack.pop();
}
if (bPile && bEqArrayStart)
pWriter->WriteItemEnd(nCurPos);
else if (!bPile && !bEqArrayStart)
pWriter->WriteItemEnd(nCurPos);
else if (!bPile && bEqArrayStart)
{
bEqArrayStart = false;
pWriter->WriteItemEnd(nCurPos);//eqArr
if (!m_aBaseStack.empty())
{
nCurPos = m_aBaseStack.top();
m_aBaseStack.pop();
}
pWriter->WriteItemEnd(nCurPos);
}
}
virtual ECommandType GetCommand() = 0; virtual ECommandType GetCommand() = 0;
virtual void WriteBeginBlock(BinaryEquationWriter* pWriter) = 0; virtual void WriteBeginBlock(BinaryEquationWriter* pWriter) = 0;
virtual void WriteEndBlock(BinaryEquationWriter* pWriter) = 0; virtual void WriteEndBlock(BinaryEquationWriter* pWriter) = 0;
protected: protected:
std::stack<int> m_aBaseStack;
BOOL bOpenNode;
BOOL bPile;
BOOL bEqArrayStart;
int nBlockNum; int nBlockNum;
}; };
...@@ -976,12 +1186,21 @@ namespace MathEquation ...@@ -976,12 +1186,21 @@ namespace MathEquation
virtual void WriteBeginBlock(BinaryEquationWriter* pWriter) virtual void WriteBeginBlock(BinaryEquationWriter* pWriter)
{ {
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element); Write(pWriter, true);
} }
virtual void WriteEndBlock(BinaryEquationWriter* pWriter) virtual void WriteEndBlock(BinaryEquationWriter* pWriter)
{ {
pWriter->WriteItemEnd(nElemPos); Write(pWriter, false);
}
void Write(BinaryEquationWriter* pWriter, bool bBeginNode)
{
if (0 == nBlockNum)
{
if (bBeginNode)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
} }
private: private:
int nElemPos; int nElemPos;
...@@ -992,19 +1211,31 @@ namespace MathEquation ...@@ -992,19 +1211,31 @@ namespace MathEquation
CRootCommand() {} CRootCommand() {}
virtual ~CRootCommand() {} virtual ~CRootCommand() {}
virtual ECommandType GetCommand(){return commandRoot;} virtual ECommandType GetCommand(){return commandRoot;}
virtual void WriteBeginBlock(BinaryEquationWriter* pWriter) virtual void WriteBeginBlock(BinaryEquationWriter* pWriter)
{ {
if (0 == nBlockNum) Write(pWriter, true);
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element);
else if (1 == nBlockNum)
nDegPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Deg);
} }
virtual void WriteEndBlock(BinaryEquationWriter* pWriter) virtual void WriteEndBlock(BinaryEquationWriter* pWriter)
{
Write(pWriter, false);
}
void Write(BinaryEquationWriter* pWriter, bool bBeginNode)
{ {
if (0 == nBlockNum) if (0 == nBlockNum)
pWriter->WriteItemEnd(nElemPos); {
if (bBeginNode)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
else if (1 == nBlockNum) else if (1 == nBlockNum)
pWriter->WriteItemEnd(nDegPos); {
if (bBeginNode)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Deg);
else
WriteEndNode(pWriter);
}
} }
private: private:
int nElemPos; int nElemPos;
...@@ -1016,23 +1247,32 @@ namespace MathEquation ...@@ -1016,23 +1247,32 @@ namespace MathEquation
CFractionCommand() {} CFractionCommand() {}
virtual ~CFractionCommand() {} virtual ~CFractionCommand() {}
virtual ECommandType GetCommand(){return commandFraction;} virtual ECommandType GetCommand(){return commandFraction;}
virtual void WriteBeginBlock(BinaryEquationWriter* pWriter) virtual void WriteBeginBlock(BinaryEquationWriter* pWriter)
{ {
if (0 == nBlockNum) Write(pWriter, true);
nNumPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Num);
else if (1 == nBlockNum)
nDenPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Den);
} }
virtual void WriteEndBlock(BinaryEquationWriter* pWriter) virtual void WriteEndBlock(BinaryEquationWriter* pWriter)
{
Write(pWriter, false);
}
void Write(BinaryEquationWriter* pWriter, bool bBeginNode)
{ {
if (0 == nBlockNum) if (0 == nBlockNum)
pWriter->WriteItemEnd(nNumPos); {
if (bBeginNode)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Num);
else
WriteEndNode(pWriter);
}
else if (1 == nBlockNum) else if (1 == nBlockNum)
pWriter->WriteItemEnd(nDenPos); {
if (bBeginNode)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Den);
else
WriteEndNode(pWriter);
}
} }
private:
int nNumPos;
int nDenPos;
}; };
class CScriptCommand : public CBaseCommand class CScriptCommand : public CBaseCommand
{ {
...@@ -1057,7 +1297,6 @@ namespace MathEquation ...@@ -1057,7 +1297,6 @@ namespace MathEquation
{ {
Write(pWriter, false); Write(pWriter, false);
} }
private: private:
void Write(BinaryEquationWriter* pWriter, bool bBegin) void Write(BinaryEquationWriter* pWriter, bool bBegin)
...@@ -1067,61 +1306,127 @@ namespace MathEquation ...@@ -1067,61 +1306,127 @@ namespace MathEquation
if (0 == nBlockNum) if (0 == nBlockNum)
{ {
if (bBase) if (bBase)
WriteNode("base", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
else if (bSub) else if (bSub)
WriteNode("sub", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sub);
else
WriteEndNode(pWriter);
}
else if (bSup) else if (bSup)
WriteNode("sup", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
}
} }
else if (1 == nBlockNum) else if (1 == nBlockNum)
{ {
if (bBase) if (bBase)
{ {
if (bSub) if (bSub)
WriteNode("sub", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sub);
else
WriteEndNode(pWriter);
}
else if (bSup) else if (bSup)
WriteNode("sup", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
}
} }
else if (bSub && bSup) else if (bSub && bSup)
{ {
WriteNode("sup", pWriter, bBegin); if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
} }
} }
else if (2 == nBlockNum) else if (2 == nBlockNum)
{ {
if (bBase && bSub && bSup) if (bSup)
WriteNode("sup", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
}
} }
} }
else else
{ {
if (0 == nBlockNum) if (0 == nBlockNum) //sSubSup
{ {
if (bSub) if (bSub)
WriteNode("sub", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sub);
else
WriteEndNode(pWriter);
}
else if (bSup) else if (bSup)
WriteNode("sup", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
}
else if (bBase) else if (bBase)
WriteNode("base", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
} }
else if (1 == nBlockNum) else if (1 == nBlockNum)
{ {
if (bSub) if (bSub)
{ {
if (bSup) if (bSup)
WriteNode("sup", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else
WriteEndNode(pWriter);
}
else if (bBase) else if (bBase)
WriteNode("base", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
} }
else if (bSup && bBase) else if (bSup && bBase)
{ {
WriteNode("base", pWriter, bBegin); if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
} }
} }
else if (2 == nBlockNum) else if (2 == nBlockNum)
{ {
if (bBase && bSub && bSup) if (bBase && bSub && bSup)
WriteNode("base", pWriter, bBegin); {
if (bBegin)
WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else
WriteEndNode(pWriter);
}
} }
} }
} }
...@@ -1193,7 +1498,6 @@ namespace MathEquation ...@@ -1193,7 +1498,6 @@ namespace MathEquation
{ {
Write(pWriter, false); Write(pWriter, false);
} }
private: private:
void Write(BinaryEquationWriter* pWriter, bool bBeginNode) void Write(BinaryEquationWriter* pWriter, bool bBeginNode)
...@@ -1201,30 +1505,25 @@ namespace MathEquation ...@@ -1201,30 +1505,25 @@ namespace MathEquation
if (0 == nBlockNum) if (0 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else else
pWriter->WriteItemEnd(nElemPos); WriteEndNode(pWriter);
} }
else if (1 == nBlockNum) else if (1 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nSubPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Sub); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sub);
else else
pWriter->WriteItemEnd(nSubPos); WriteEndNode(pWriter);
} }
else if (2 == nBlockNum) else if (2 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nSupPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Sup); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else else
pWriter->WriteItemEnd(nSupPos); WriteEndNode(pWriter);
} }
} }
private:
int nSubPos;
int nSupPos;
int nElemPos;
}; };
class CVerticalBraceCommand : public CBaseCommand class CVerticalBraceCommand : public CBaseCommand
{ {
...@@ -1282,33 +1581,31 @@ namespace MathEquation ...@@ -1282,33 +1581,31 @@ namespace MathEquation
void Write(BinaryEquationWriter* pWriter, bool bBeginNode) void Write(BinaryEquationWriter* pWriter, bool bBeginNode)
{ {
bOpenNode = bBeginNode;
if (0 == nBlockNum) if (0 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nElemPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Element); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Element);
else else
pWriter->WriteItemEnd(nElemPos); WriteEndNode(pWriter);
} }
else if (1 == nBlockNum) else if (1 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nSubPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Sub); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sub);
else else
pWriter->WriteItemEnd(nSubPos); WriteEndNode(pWriter);
} }
else if (2 == nBlockNum) else if (2 == nBlockNum)
{ {
if (bBeginNode) if (bBeginNode)
nSupPos = pWriter->WriteItemStart(BinDocxRW::c_oSer_OMathContentType::Sup); WriteBeginNode(pWriter, BinDocxRW::c_oSer_OMathContentType::Sup);
else else
pWriter->WriteItemEnd(nSupPos); WriteEndNode(pWriter);
} }
} }
private: private:
int nSubPos;
int nSupPos;
int nElemPos;
MNARRAYTYPE eType; MNARRAYTYPE eType;
}; };
...@@ -1334,6 +1631,8 @@ namespace MathEquation ...@@ -1334,6 +1631,8 @@ namespace MathEquation
else else
pWriter->WriteNodeEnd("result"); pWriter->WriteNodeEnd("result");
} }
private:
BOOL bPile;
}; };
class CBracketsWithSeparatorCommand : public CBaseCommand class CBracketsWithSeparatorCommand : public CBaseCommand
{ {
...@@ -1381,7 +1680,6 @@ namespace MathEquation ...@@ -1381,7 +1680,6 @@ namespace MathEquation
pWriter->WriteNodeEnd(sNodeName); pWriter->WriteNodeEnd(sNodeName);
} }
private: private:
MANGLEBRACKETSWITHSEPARATORTYPE eType; MANGLEBRACKETSWITHSEPARATORTYPE eType;
}; };
......
...@@ -423,7 +423,7 @@ extern int g_nCurFormatVersion; ...@@ -423,7 +423,7 @@ extern int g_nCurFormatVersion;
fldend = 10, fldend = 10,
CommentReference = 11, CommentReference = 11,
pptxDrawing = 12, pptxDrawing = 12,
object = 13 object = 14
};} };}
namespace c_oSerImageType{enum c_oSerImageType namespace c_oSerImageType{enum c_oSerImageType
{ {
......
...@@ -2712,7 +2712,7 @@ namespace BinDocxRW ...@@ -2712,7 +2712,7 @@ namespace BinDocxRW
WriteComment(OOX::et_w_commentRangeEnd, pCommentRangeEnd->m_oId); WriteComment(OOX::et_w_commentRangeEnd, pCommentRangeEnd->m_oId);
break; break;
} }
/*case OOX::et_m_oMathPara: case OOX::et_m_oMathPara:
{ {
OOX::Logic::COMathPara* pOMathPara = static_cast<OOX::Logic::COMathPara*>(item); OOX::Logic::COMathPara* pOMathPara = static_cast<OOX::Logic::COMathPara*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::OMathPara); nCurPos = m_oBcw.WriteItemStart(c_oSerParType::OMathPara);
...@@ -2727,7 +2727,7 @@ namespace BinDocxRW ...@@ -2727,7 +2727,7 @@ namespace BinDocxRW
WriteMathArgNodes( pOMath->m_arrItems ); WriteMathArgNodes( pOMath->m_arrItems );
m_oBcw.WriteItemEnd(nCurPos); m_oBcw.WriteItemEnd(nCurPos);
break; break;
}*/ }
} }
} }
}; };
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
//2 //2
//0 //0
//0 //0
//184 //185
#define INTVER 2,0,0,184 #define INTVER 2,0,0,185
#define STRVER "2,0,0,184\0" #define STRVER "2,0,0,185\0"
...@@ -210,13 +210,13 @@ int CEquationReader::HandleChar(uint8_t nTag) ...@@ -210,13 +210,13 @@ int CEquationReader::HandleChar(uint8_t nTag)
if (nChar < 0x20) if (nChar < 0x20)
return nRet; return nRet;
pOutputDev->BeginChar(nChar, nTypeFace, IsSpecialChar(nChar));
if (xfEMBELL(nTag)) if (xfEMBELL(nTag))
{ {
nRet = HandleRecords(); nRet = HandleRecords();
} }
pOutputDev->BeginChar(nChar, nTypeFace, IsSpecialChar(nChar));
pOutputDev->EndChar(); pOutputDev->EndChar();
return nRet; return nRet;
} }
......
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