Compare commits

..

8 Commits

Author SHA1 Message Date
182cd8d74a Fix bug 70795 2024-11-25 07:59:02 +00:00
361bc70fe3 Merge branch hotfix/v8.2.1 into hotfix/v8.2.2 2024-11-22 10:46:56 +00:00
6d68d7aee5 . 2024-11-19 23:58:51 +03:00
61e6b54710 . 2024-11-19 16:44:39 +03:00
65ba8ffd3b Add method for get document type 2024-11-19 15:08:16 +03:00
d2713d0cfd fix perm 2024-11-19 11:24:16 +03:00
099ebc3de9 Enable JS error logs in release mode 2024-11-15 13:57:43 +03:00
8ad76e4e1f Fix bug 68072 2024-11-13 01:33:43 +03:00
10 changed files with 306 additions and 168 deletions

View File

@ -1,4 +1,6 @@
#include "../graphics.h"
#include <map>
#include "../../../Common/Network/FileTransporter/include/FileTransporter.h"
// APPLICATION INFO
class CGraphicsAppImage_private
@ -10,6 +12,8 @@ public:
std::wstring m_sThemesDirectory;
bool m_bIsRgba;
std::map<std::wstring, std::wstring> m_mapDownloads;
CGraphicsAppImage_private()
{
m_pFonts = NULL;
@ -21,6 +25,52 @@ public:
~CGraphicsAppImage_private()
{
RELEASEINTERFACE(m_pFonts);
for (std::map<std::wstring, std::wstring>::iterator i = m_mapDownloads.begin(); i != m_mapDownloads.end(); i++)
{
std::wstring sTmp = i->second;
if (NSFile::CFileBinary::Exists(sTmp))
NSFile::CFileBinary::Remove(sTmp);
}
}
bool IsNeedDownload(const std::wstring& sUrl)
{
if ((0 == sUrl.find(L"www.")) ||
(0 == sUrl.find(L"http://")) ||
(0 == sUrl.find(L"https://")))
return true;
return false;
}
std::wstring GetImagePath(const std::wstring& sUrl)
{
std::map<std::wstring, std::wstring>::iterator find = m_mapDownloads.find(sUrl);
if (find != m_mapDownloads.end())
return find->second;
NSNetwork::NSFileTransport::CFileDownloader oDownloader(sUrl, false);
std::wstring sTmpFile = NSFile::CFileBinary::CreateTempFileWithUniqueName(NSFile::CFileBinary::GetTempPath(), L"IMG");
if (NSFile::CFileBinary::Exists(sTmpFile))
NSFile::CFileBinary::Remove(sTmpFile);
sTmpFile = sTmpFile + L".png";
oDownloader.SetFilePath(sTmpFile);
oDownloader.Start(0);
while ( oDownloader.IsRunned() )
{
NSThreads::Sleep( 10 );
}
bool bIsDownloaded = oDownloader.IsFileDownloaded();
if (bIsDownloaded)
{
m_mapDownloads.insert(std::pair<std::wstring, std::wstring>(sUrl, sTmpFile));
return sTmpFile;
}
return sUrl;
}
};
@ -270,11 +320,19 @@ JSSmart<CJSValue> CGraphicsEmbed::ClearLastFont()
}
JSSmart<CJSValue> CGraphicsEmbed::drawImage2(JSSmart<CJSValue> img, JSSmart<CJSValue> x, JSSmart<CJSValue> y, JSSmart<CJSValue> w, JSSmart<CJSValue> h, JSSmart<CJSValue> alpha, JSSmart<CJSValue> srcRect)
{
m_pInternal->drawImage(img->toStringW(), x->toDouble(), y->toDouble(), w->toDouble(), h->toDouble(), alpha->toInt32());
std::wstring sUrl = img->toStringW();
if (m_pInternal->m_pAppImage && m_pInternal->m_pAppImage->m_internal->IsNeedDownload(sUrl))
sUrl = m_pInternal->m_pAppImage->m_internal->GetImagePath(sUrl);
m_pInternal->drawImage(sUrl, x->toDouble(), y->toDouble(), w->toDouble(), h->toDouble(), alpha->toInt32());
return NULL;
}
JSSmart<CJSValue> CGraphicsEmbed::drawImage (JSSmart<CJSValue> img, JSSmart<CJSValue> x, JSSmart<CJSValue> y, JSSmart<CJSValue> w, JSSmart<CJSValue> h, JSSmart<CJSValue> alpha, JSSmart<CJSValue> srcRect, JSSmart<CJSValue> nativeImage)
{
std::wstring sUrl = img->toStringW();
if (m_pInternal->m_pAppImage && m_pInternal->m_pAppImage->m_internal->IsNeedDownload(sUrl))
sUrl = m_pInternal->m_pAppImage->m_internal->GetImagePath(sUrl);
m_pInternal->drawImage(img->toStringW(), x->toDouble(), y->toDouble(), w->toDouble(), h->toDouble(), alpha->toInt32());
return NULL;
}
@ -579,7 +637,11 @@ JSSmart<CJSValue> CGraphicsEmbed::GetBrushColor()
}
JSSmart<CJSValue> CGraphicsEmbed::put_brushTexture(JSSmart<CJSValue> src, JSSmart<CJSValue> type)
{
m_pInternal->put_brushTexture(src->toStringW(), type->toInt32());
std::wstring sUrl = src->toStringW();
if (m_pInternal->m_pAppImage && m_pInternal->m_pAppImage->m_internal->IsNeedDownload(sUrl))
sUrl = m_pInternal->m_pAppImage->m_internal->GetImagePath(sUrl);
m_pInternal->put_brushTexture(sUrl, type->toInt32());
return NULL;
}
JSSmart<CJSValue> CGraphicsEmbed::put_brushTextureMode(JSSmart<CJSValue> mode)

View File

@ -31,6 +31,8 @@ public:
private:
CGraphicsAppImage_private* m_internal;
friend class CGraphicsEmbed;
};
namespace NSGraphics { class CGraphics; }

View File

@ -313,7 +313,10 @@ namespace NSGraphics
}
void CGraphics::drawImage(const std::wstring& img, double x, double y, double w, double h, BYTE alpha)
{
std::wstring strImage = (0 == img.find(L"theme") ? m_pAppImage->GetThemesDirectory() : m_pAppImage->GetImagesDirectory()) + L'/' + img;
std::wstring strImage = img;
if (!NSFile::CFileBinary::Exists(img))
strImage = (0 == img.find(L"theme") ? m_pAppImage->GetThemesDirectory() : m_pAppImage->GetImagesDirectory()) + L'/' + img;
#ifdef ENABLE_GR_LOGS
std::wcout << L"drawImage " << strImage << L" " << x << " " << y << L" " << w << L" " << h << L" " << alpha << std::endl;
#endif
@ -1250,7 +1253,10 @@ namespace NSGraphics
}
else
{
std::wstring strImage = (0 == src.find(L"theme") ? m_pAppImage->GetThemesDirectory() : m_pAppImage->GetImagesDirectory()) + L'/' + src;
std::wstring strImage = src;
if (!NSFile::CFileBinary::Exists(src))
strImage = (0 == src.find(L"theme") ? m_pAppImage->GetThemesDirectory() : m_pAppImage->GetImagesDirectory()) + L'/' + src;
std::wstring sName = strImage.substr(0, strImage.rfind(L'.') + 1);
std::wstring sExt = src.substr(src.rfind(L'.') + 1);
if (sExt == L"svg")

View File

@ -54,9 +54,9 @@ v8::Local<v8::String> CreateV8String(v8::Isolate* i, const std::string& str);
#ifdef __ANDROID__
#ifdef _DEBUG
//#ifdef _DEBUG
#define ANDROID_LOGS
#endif
//#endif
#ifdef ANDROID_LOGS
#include <android/log.h>

View File

@ -232,6 +232,7 @@ double Curve::GetTimeOf(const PointD& point) const noexcept
if (getDistance(point, GetPoint(u)) <= GEOMETRIC_EPSILON)
return u;
}
roots.clear();
}
}
bool firstDist = d0 <= GEOMETRIC_EPSILON,
@ -995,7 +996,7 @@ void CBooleanOperations::TracePaths()
start = true;
while (valid)
{
if (!start || (Op == Intersection && s.Inters))
if (!start || (Op == Intersection && s.Inters && !GetNextSegment(s).Inters))
SetVisited(s);
if (start)

View File

@ -126,6 +126,11 @@ CFile.prototype["loadFromDataWithPassword"] = function(password)
return error;
};
CFile.prototype["getType"] = function()
{
return this.type;
};
CFile.prototype["close"] = function()
{
this._closeFile();

View File

@ -4979,6 +4979,18 @@ int Binary_DocumentTableReader::ReadDocumentContent(BYTE type, long length, void
m_oFileWriter.m_pDrawingConverter->WriteRels(OOX::FileTypes::JsaProject.RelationType(), sJsaProject.GetPath(), L"", &lId);
m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_pContentTypes->AddDefault(sJsaProject.GetExtention(false));
}
else if (c_oSerParType::PermStart == type)
{
OOX::Logic::CPermStart oPerm;
READ1_DEF(length, res, this->ReadPermStart, &oPerm);
m_oDocumentWriter.m_oContent.WriteString(oPerm.toXML());
}
else if (c_oSerParType::PermEnd == type)
{
OOX::Logic::CPermEnd oPerm;
READ1_DEF(length, res, this->ReadPermEnd, &oPerm);
m_oDocumentWriter.m_oContent.WriteString(oPerm.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
@ -5755,8 +5767,8 @@ int Binary_DocumentTableReader::ReadPermStart(BYTE type, long length, void* poRe
}
else if (c_oSerPermission::Ed == type)
{
pPerm->m_sId.Init();
*pPerm->m_sId = m_oBufferedStream.GetString3(length);
pPerm->m_sEd.Init();
*pPerm->m_sEd = m_oBufferedStream.GetString3(length);
}
else if (c_oSerPermission::EdGroup == type)
{
@ -6034,6 +6046,18 @@ int Binary_DocumentTableReader::ReadMathArg(BYTE type, long length, void* poResu
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
GetRunStringWriter().WriteString(oMoveToRangeEnd.toXML());
}
else if (c_oSer_OMathContentType::PermStart == type)
{
OOX::Logic::CPermStart oPerm;
READ1_DEF(length, res, this->ReadPermStart, &oPerm);
GetRunStringWriter().WriteString(oPerm.toXML());
}
else if (c_oSer_OMathContentType::PermEnd == type)
{
OOX::Logic::CPermEnd oPerm;
READ1_DEF(length, res, this->ReadPermEnd, &oPerm);
GetRunStringWriter().WriteString(oPerm.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
@ -8653,6 +8677,18 @@ int Binary_DocumentTableReader::Read_TableContent(BYTE type, long length, void*
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else if (c_oSerDocTableType::PermStart == type)
{
OOX::Logic::CPermStart oPerm;
READ1_DEF(length, res, this->ReadPermStart, &oPerm);
pCStringWriter->WriteString(oPerm.toXML());
}
else if (c_oSerDocTableType::PermEnd == type)
{
OOX::Logic::CPermEnd oPerm;
READ1_DEF(length, res, this->ReadPermEnd, &oPerm);
pCStringWriter->WriteString(oPerm.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
@ -8726,6 +8762,18 @@ int Binary_DocumentTableReader::ReadRowContent(BYTE type, long length, void* poR
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else if (c_oSerDocTableType::PermStart == type)
{
OOX::Logic::CPermStart oPerm;
READ1_DEF(length, res, this->ReadPermStart, &oPerm);
pCStringWriter->WriteString(oPerm.toXML());
}
else if (c_oSerDocTableType::PermEnd == type)
{
OOX::Logic::CPermEnd oPerm;
READ1_DEF(length, res, this->ReadPermEnd, &oPerm);
pCStringWriter->WriteString(oPerm.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;

View File

@ -572,7 +572,9 @@ extern int g_nCurFormatVersion;
MoveFromRangeStart = 14,
MoveFromRangeEnd = 15,
MoveToRangeStart = 16,
MoveToRangeEnd = 17
MoveToRangeEnd = 17,
PermStart = 18,
PermEnd = 19
};}
namespace c_oSerRunType{enum c_oSerRunType
{
@ -1075,7 +1077,9 @@ extern int g_nCurFormatVersion;
NoBreakHyphen = 81,
SoftHyphen = 82,
Sym = 83,
Tab = 84
Tab = 84,
PermStart =85,
PermEnd = 86
};}
namespace c_oSer_FramePrType{ enum c_oSer_FramePrType
{

View File

@ -3606,7 +3606,17 @@ void BinaryDocumentTableWriter::WriteDocumentContent(const std::vector<OOX::Writ
Write(static_cast<OOX::Logic::CDocParts*>(item));
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}break;
default:
case OOX::et_w_permStart:
{
OOX::Logic::CPermStart* pPermStart = static_cast<OOX::Logic::CPermStart*>(item);
WritePermission(c_oSerParType::PermStart, pPermStart);
}break;
case OOX::et_w_permEnd:
{
OOX::Logic::CPermEnd* pPermEnd = static_cast<OOX::Logic::CPermEnd*>(item);
WritePermission(c_oSerParType::PermEnd, pPermEnd);
}break;
default:
break;
}
}
@ -3896,12 +3906,12 @@ void BinaryDocumentTableWriter::WriteParagraphContent(const std::vector<OOX::Wri
case OOX::et_w_permStart:
{
OOX::Logic::CPermStart* pPermStart = static_cast<OOX::Logic::CPermStart*>(item);
WritePermission(pPermStart);
WritePermission(c_oSerParType::PermStart, pPermStart);
}break;
case OOX::et_w_permEnd:
{
OOX::Logic::CPermEnd* pPermEnd = static_cast<OOX::Logic::CPermEnd*>(item);
WritePermission(pPermEnd);
WritePermission(c_oSerParType::PermEnd, pPermEnd);
}break;
case OOX::et_w_fldSimple:
{
@ -4197,11 +4207,11 @@ void BinaryDocumentTableWriter::WriteComment(OOX::EElementType eType, nullable<S
m_oBcw.WriteItemEnd(nCurPos);
}
}
void BinaryDocumentTableWriter::WritePermission(OOX::Logic::CPermStart* pPerm)
void BinaryDocumentTableWriter::WritePermission(unsigned char type, OOX::Logic::CPermStart* pPerm)
{
if (!pPerm) return;
int nCurPos2 = m_oBcw.WriteItemStart(c_oSerParType::PermStart);
int nCurPos2 = m_oBcw.WriteItemStart(type);
if (pPerm->m_sId.IsInit())
{
@ -4241,11 +4251,11 @@ void BinaryDocumentTableWriter::WritePermission(OOX::Logic::CPermStart* pPerm)
}
m_oBcw.WriteItemWithLengthEnd(nCurPos2);
}
void BinaryDocumentTableWriter::WritePermission(OOX::Logic::CPermEnd* pPerm)
void BinaryDocumentTableWriter::WritePermission(unsigned char type, OOX::Logic::CPermEnd* pPerm)
{
if (!pPerm) return;
int nCurPos2 = m_oBcw.WriteItemStart(c_oSerParType::PermEnd);
int nCurPos2 = m_oBcw.WriteItemStart(type);
if (pPerm->m_sId.IsInit())
{
int nCurPos = m_oBcw.WriteItemStart(c_oSerPermission::Id);
@ -4688,184 +4698,170 @@ void BinaryDocumentTableWriter::WriteMathArgNodes(const std::vector<OOX::Writing
int nCurPos = 0;
switch(eType)
{
case OOX::et_m_acc:
case OOX::et_m_acc:
{
OOX::Logic::CAcc* pAcc = static_cast<OOX::Logic::CAcc*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Acc);
if ( pAcc->m_oAccPr.IsInit() )
if (pAcc->m_oAccPr.IsInit())
WriteMathAccPr(pAcc->m_oAccPr.get());
if ( pAcc->m_oElement.IsInit() )
if (pAcc->m_oElement.IsInit())
WriteMathElement(pAcc->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_argPr:
}break;
case OOX::et_m_argPr:
{
OOX::Logic::CArgPr* pArgPr = static_cast<OOX::Logic::CArgPr*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::ArgPr);
if ( pArgPr->m_oArgSz.IsInit() )
if (pArgPr->m_oArgSz.IsInit())
WriteMathArgSz(pArgPr->m_oArgSz.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_bar:
}break;
case OOX::et_m_bar:
{
OOX::Logic::CBar* pBar = static_cast<OOX::Logic::CBar*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Bar);
if ( pBar->m_oBarPr.IsInit() )
if (pBar->m_oBarPr.IsInit())
WriteMathBarPr(pBar->m_oBarPr.get());
if ( pBar->m_oElement.IsInit() )
if (pBar->m_oElement.IsInit())
WriteMathElement(pBar->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_borderBox:
}break;
case OOX::et_m_borderBox:
{
OOX::Logic::CBorderBox* pBorderBox = static_cast<OOX::Logic::CBorderBox*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::BorderBox);
if ( pBorderBox->m_oBorderBoxPr.IsInit() )
if (pBorderBox->m_oBorderBoxPr.IsInit())
WriteMathBorderBoxPr(pBorderBox->m_oBorderBoxPr.get());
if ( pBorderBox->m_oElement.IsInit() )
if (pBorderBox->m_oElement.IsInit())
WriteMathElement(pBorderBox->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_box:
}break;
case OOX::et_m_box:
{
OOX::Logic::CBox* pBox = static_cast<OOX::Logic::CBox*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Box);
if ( pBox->m_oBoxPr.IsInit() )
if (pBox->m_oBoxPr.IsInit())
WriteMathBoxPr(pBox->m_oBoxPr.get());
if ( pBox->m_oElement.IsInit() )
if (pBox->m_oElement.IsInit())
WriteMathElement(pBox->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_ctrlPr:
}break;
case OOX::et_m_ctrlPr:
{
OOX::Logic::CCtrlPr* pCtrlPr = static_cast<OOX::Logic::CCtrlPr*>(item);
WriteMathCtrlPr(*pCtrlPr, c_oSer_OMathContentType::CtrlPr);
break;
}
case OOX::et_m_d:
case OOX::et_m_d:
{
OOX::Logic::CDelimiter* pDelimiter = static_cast<OOX::Logic::CDelimiter*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Delimiter);
WriteMathDelimiter(pDelimiter->m_arrItems, pDelimiter->m_lColumn);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_del:
}break;
case OOX::et_w_del:
{
OOX::Logic::CDel* pDel = static_cast<OOX::Logic::CDel*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Del);
WriteDel(*pDel);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_eqArr:
}break;
case OOX::et_m_eqArr:
{
OOX::Logic::CEqArr* pEqArr = static_cast<OOX::Logic::CEqArr*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::EqArr);
WriteMathEqArr(pEqArr->m_arrItems, pEqArr->m_lRow);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_f:
}break;
case OOX::et_m_f:
{
OOX::Logic::CFraction* pFraction = static_cast<OOX::Logic::CFraction*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Fraction);
if ( pFraction->m_oFPr.IsInit() )
if (pFraction->m_oFPr.IsInit())
WriteMathFPr(pFraction->m_oFPr.get());
if ( pFraction->m_oDen.IsInit() )
if (pFraction->m_oDen.IsInit())
WriteMathDen(pFraction->m_oDen.get());
if ( pFraction->m_oNum.IsInit() )
if (pFraction->m_oNum.IsInit())
WriteMathNum(pFraction->m_oNum.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_func:
}break;
case OOX::et_m_func:
{
OOX::Logic::CFunc* pFunc = static_cast<OOX::Logic::CFunc*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Func);
if ( pFunc->m_oFuncPr.IsInit() )
if (pFunc->m_oFuncPr.IsInit())
WriteMathFuncPr(pFunc->m_oFuncPr.get());
if ( pFunc->m_oElement.IsInit() )
if (pFunc->m_oElement.IsInit())
WriteMathElement(pFunc->m_oElement.get());
if ( pFunc->m_oFName.IsInit() )
if (pFunc->m_oFName.IsInit())
WriteMathFName(pFunc->m_oFName.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_groupChr:
}break;
case OOX::et_m_groupChr:
{
OOX::Logic::CGroupChr* pGroupChr = static_cast<OOX::Logic::CGroupChr*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::GroupChr);
if ( pGroupChr->m_oGroupChrPr.IsInit() )
if (pGroupChr->m_oGroupChrPr.IsInit())
WriteMathGroupChrPr(pGroupChr->m_oGroupChrPr.get());
if ( pGroupChr->m_oElement.IsInit() )
if (pGroupChr->m_oElement.IsInit())
WriteMathElement(pGroupChr->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_ins:
}break;
case OOX::et_w_ins:
{
OOX::Logic::CIns* pIns = static_cast<OOX::Logic::CIns*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Ins);
WriteIns(*pIns);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_limLow:
}break;
case OOX::et_m_limLow:
{
OOX::Logic::CLimLow* pLimLow = static_cast<OOX::Logic::CLimLow*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::LimLow);
if ( pLimLow->m_oLimLowPr.IsInit() )
if (pLimLow->m_oLimLowPr.IsInit())
WriteMathLimLowPr(pLimLow->m_oLimLowPr.get());
if ( pLimLow->m_oElement.IsInit() )
if (pLimLow->m_oElement.IsInit())
WriteMathElement(pLimLow->m_oElement.get());
if ( pLimLow->m_oLim.IsInit() )
if (pLimLow->m_oLim.IsInit())
WriteMathLim(pLimLow->m_oLim.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_limUpp:
}break;
case OOX::et_m_limUpp:
{
OOX::Logic::CLimUpp* pLimUpp = static_cast<OOX::Logic::CLimUpp*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::LimUpp);
if ( pLimUpp->m_oLimUppPr.IsInit() )
if (pLimUpp->m_oLimUppPr.IsInit())
WriteMathLimUppPr(pLimUpp->m_oLimUppPr.get());
if ( pLimUpp->m_oElement.IsInit() )
if (pLimUpp->m_oElement.IsInit())
WriteMathElement(pLimUpp->m_oElement.get());
if ( pLimUpp->m_oLim.IsInit() )
if (pLimUpp->m_oLim.IsInit())
WriteMathLim(pLimUpp->m_oLim.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_m:
}break;
case OOX::et_m_m:
{
OOX::Logic::CMatrix* pMatrix = static_cast<OOX::Logic::CMatrix*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Matrix);
LONG lCol = 0;
//TODO убрать, тк при отсутствии m:mcs, к-во столбцов должно разруливаться динамически в скрипте
//TODO убрать, тк при отсутствии m:mcs, к-во столбцов должно разруливаться динамически в скрипте
for (std::vector<OOX::WritingElement*>::iterator jt = pMatrix->m_arrItems.begin(); jt != pMatrix->m_arrItems.end(); jt++)
{
OOX::WritingElement* item = *jt;
@ -4878,35 +4874,32 @@ void BinaryDocumentTableWriter::WriteMathArgNodes(const std::vector<OOX::Writing
}
WriteMathMatrix(pMatrix->m_arrItems, pMatrix->m_lRow, lCol);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_nary:
}break;
case OOX::et_m_nary:
{
OOX::Logic::CNary* pNary = static_cast<OOX::Logic::CNary*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Nary);
if ( pNary->m_oNaryPr.IsInit() )
if (pNary->m_oNaryPr.IsInit())
WriteMathNaryPr(pNary->m_oNaryPr.get());
if ( pNary->m_oSub.IsInit() )
if (pNary->m_oSub.IsInit())
WriteMathSub(pNary->m_oSub.get());
if ( pNary->m_oSup.IsInit() )
if (pNary->m_oSup.IsInit())
WriteMathSup(pNary->m_oSup.get());
if ( pNary->m_oElement.IsInit() )
if (pNary->m_oElement.IsInit())
WriteMathElement(pNary->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_oMath:
}break;
case OOX::et_m_oMath:
{
OOX::Logic::COMath* pOMath = static_cast<OOX::Logic::COMath*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::OMath);
WriteMathArgNodes(pOMath->m_arrItems);
WriteMathArgNodes(pOMath->m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_oMathPara:
}break;
case OOX::et_m_oMathPara:
{
OOX::Logic::COMathPara* pOMathPara = static_cast<OOX::Logic::COMathPara*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::OMathPara);
@ -4914,158 +4907,154 @@ void BinaryDocumentTableWriter::WriteMathArgNodes(const std::vector<OOX::Writing
WriteMathOMathPara(pOMathPara->m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_phant:
}break;
case OOX::et_m_phant:
{
OOX::Logic::CPhant* pPhant = static_cast<OOX::Logic::CPhant*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Phant);
if ( pPhant->m_oPhantPr.IsInit() )
if (pPhant->m_oPhantPr.IsInit())
WriteMathPhantPr(pPhant->m_oPhantPr.get());
if ( pPhant->m_oElement.IsInit() )
if (pPhant->m_oElement.IsInit())
WriteMathElement(pPhant->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_r:
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_m_r:
{
OOX::Logic::CMRun* pMRun = static_cast<OOX::Logic::CMRun*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::MRun);
WriteMathRunContent(pMRun);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_rad:
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_m_rad:
{
OOX::Logic::CRad* pRad = static_cast<OOX::Logic::CRad*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::Rad);
if ( pRad->m_oRadPr.IsInit() )
if (pRad->m_oRadPr.IsInit())
WriteMathRadPr(pRad->m_oRadPr.get());
if ( pRad->m_oDeg.IsInit() )
if (pRad->m_oDeg.IsInit())
WriteMathDeg(pRad->m_oDeg.get());
if ( pRad->m_oElement.IsInit() )
if (pRad->m_oElement.IsInit())
WriteMathElement(pRad->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_sPre:
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_m_sPre:
{
OOX::Logic::CSPre* pSPre = static_cast<OOX::Logic::CSPre*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::SPre);
if ( pSPre->m_oSPrePr.IsInit() )
if (pSPre->m_oSPrePr.IsInit())
WriteMathSPrePr(pSPre->m_oSPrePr.get());
if ( pSPre->m_oSub.IsInit() )
if (pSPre->m_oSub.IsInit())
WriteMathSub(pSPre->m_oSub.get());
if ( pSPre->m_oSup.IsInit() )
if (pSPre->m_oSup.IsInit())
WriteMathSup(pSPre->m_oSup.get());
if ( pSPre->m_oElement.IsInit() )
if (pSPre->m_oElement.IsInit())
WriteMathElement(pSPre->m_oElement.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_sSub:
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_m_sSub:
{
OOX::Logic::CSSub* pSSub = static_cast<OOX::Logic::CSSub*>(item);
int nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::SSub);
if ( pSSub->m_oSSubPr.IsInit() )
if (pSSub->m_oSSubPr.IsInit())
WriteMathSSubPr(pSSub->m_oSSubPr.get());
if ( pSSub->m_oElement.IsInit() )
if (pSSub->m_oElement.IsInit())
WriteMathElement(pSSub->m_oElement.get());
if ( pSSub->m_oSub.IsInit() )
if (pSSub->m_oSub.IsInit())
WriteMathSub(pSSub->m_oSub.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_sSubSup:
}break;
case OOX::et_m_sSubSup:
{
OOX::Logic::CSSubSup* pSSubSup = static_cast<OOX::Logic::CSSubSup*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::SSubSup);
if ( pSSubSup->m_oSSubSupPr.IsInit() )
if (pSSubSup->m_oSSubSupPr.IsInit())
WriteMathSSubSupPr(pSSubSup->m_oSSubSupPr.get());
if ( pSSubSup->m_oElement.IsInit() )
if (pSSubSup->m_oElement.IsInit())
WriteMathElement(pSSubSup->m_oElement.get());
if ( pSSubSup->m_oSub.IsInit() )
if (pSSubSup->m_oSub.IsInit())
WriteMathSub(pSSubSup->m_oSub.get());
if ( pSSubSup->m_oSup.IsInit() )
if (pSSubSup->m_oSup.IsInit())
WriteMathSup(pSSubSup->m_oSup.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_sSup:
}break;
case OOX::et_m_sSup:
{
OOX::Logic::CSSup* pSSup = static_cast<OOX::Logic::CSSup*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::SSup);
if ( pSSup->m_oSSupPr.IsInit() )
if (pSSup->m_oSSupPr.IsInit())
WriteMathSSupPr(pSSup->m_oSSupPr.get());
if ( pSSup->m_oElement.IsInit() )
if (pSSup->m_oElement.IsInit())
WriteMathElement(pSSup->m_oElement.get());
if ( pSSup->m_oSup.IsInit() )
if (pSSup->m_oSup.IsInit())
WriteMathSup(pSSup->m_oSup.get());
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_bookmarkStart:
}break;
case OOX::et_w_bookmarkStart:
{
OOX::Logic::CBookmarkStart* pBookmarkStart = static_cast<OOX::Logic::CBookmarkStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::BookmarkStart);
WriteBookmarkStart(*pBookmarkStart);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_bookmarkEnd:
}break;
case OOX::et_w_bookmarkEnd:
{
OOX::Logic::CBookmarkEnd* pBookmarkEnd = static_cast<OOX::Logic::CBookmarkEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::BookmarkEnd);
WriteBookmarkEnd(*pBookmarkEnd);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveFromRangeStart:
}break;
case OOX::et_w_moveFromRangeStart:
{
OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::MoveFromRangeStart);
WriteMoveRangeStart(*pMoveFromRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveFromRangeEnd:
}break;
case OOX::et_w_moveFromRangeEnd:
{
OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::MoveFromRangeEnd);
WriteMoveRangeEnd(*pMoveFromRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveToRangeStart:
}break;
case OOX::et_w_moveToRangeStart:
{
OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::MoveToRangeStart);
WriteMoveRangeStart(*pMoveToRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveToRangeEnd:
}break;
case OOX::et_w_moveToRangeEnd:
{
OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSer_OMathContentType::MoveToRangeEnd);
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_w_permStart:
{
OOX::Logic::CPermStart* pPermStart = static_cast<OOX::Logic::CPermStart*>(item);
WritePermission(c_oSer_OMathContentType::PermStart, pPermStart);
}break;
case OOX::et_w_permEnd:
{
OOX::Logic::CPermEnd* pPermEnd = static_cast<OOX::Logic::CPermEnd*>(item);
WritePermission(c_oSer_OMathContentType::PermEnd, pPermEnd);
}break;
default:
break;
}
default:
break;
}
}
}
@ -7668,7 +7657,7 @@ void BinaryDocumentTableWriter::WriteTableContent(std::vector<OOX::WritingElemen
int nCurPos = 0;
int nCurRowIndex = 0;
for(size_t i = 0; i < content.size(); ++i)
for (size_t i = 0; i < content.size(); ++i)
{
OOX::WritingElement* item = content[i];
@ -7743,6 +7732,17 @@ void BinaryDocumentTableWriter::WriteTableContent(std::vector<OOX::WritingElemen
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
else if (OOX::et_w_permStart == item->getType())
{
OOX::Logic::CPermStart* pPermStart = static_cast<OOX::Logic::CPermStart*>(item);
WritePermission(c_oSerDocTableType::PermStart, pPermStart);
}
else if (OOX::et_w_permEnd == item->getType())
{
OOX::Logic::CPermEnd* pPermEnd = static_cast<OOX::Logic::CPermEnd*>(item);
WritePermission(c_oSerDocTableType::PermEnd, pPermEnd);
}
}
}
void BinaryDocumentTableWriter::WriteRow(const OOX::Logic::CTr& Row, OOX::Logic::CTableProperty* pTblPr, int nCurRowIndex)
@ -7845,6 +7845,16 @@ void BinaryDocumentTableWriter::WriteRowContent(const std::vector<OOX::WritingEl
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
else if (OOX::et_w_permStart == item->getType())
{
OOX::Logic::CPermStart* pPermStart = static_cast<OOX::Logic::CPermStart*>(item);
WritePermission(c_oSerDocTableType::PermStart, pPermStart);
}
else if (OOX::et_w_permEnd == item->getType())
{
OOX::Logic::CPermEnd* pPermEnd = static_cast<OOX::Logic::CPermEnd*>(item);
WritePermission(c_oSerDocTableType::PermEnd, pPermEnd);
}
}
}
void BinaryDocumentTableWriter::WriteCell(OOX::Logic::CTc& tc, OOX::Logic::CTableProperty* pTblPr, int nCurRowIndex, int nCurColIndex)

View File

@ -343,8 +343,8 @@ namespace BinDocxRW
template<typename T> void WriteMoveRangeEnd(const T& elem);
void WriteComment(OOX::EElementType eType, nullable<SimpleTypes::CDecimalNumber>& oId);
void WriteFldChar(OOX::Logic::CFldChar* pFldChar);
void WritePermission(OOX::Logic::CPermStart* pPerm);
void WritePermission(OOX::Logic::CPermEnd* pPerm);
void WritePermission(unsigned char type, OOX::Logic::CPermStart* pPerm);
void WritePermission(unsigned char type, OOX::Logic::CPermEnd* pPerm);
void WriteFldSimple(OOX::Logic::CFldSimple* pFldSimple);
void WriteFldSimpleContent(OOX::Logic::CFldSimple* pFldSimple);
void WriteFFData(const OOX::Logic::CFFData& oFFData);