Compare commits

..

4 Commits

9 changed files with 315 additions and 67 deletions

View File

@ -2624,7 +2624,7 @@ int Binary_tblPrReader::ReadTrPrChange(BYTE type, long length, void* poResult)
int res = c_oSerConstants::ReadOk;
TrackRevision* pTrackRevision = static_cast<TrackRevision*>(poResult);
READ1_TRACKREV(type, length, pTrackRevision)
else if (c_oSerProp_RevisionType::tblPrChange == type)
else if (c_oSerProp_RevisionType::trPrChange == type)
{
pTrackRevision->trPr = new NSStringUtils::CStringBuilder();
READ2_DEF(length, res, this->Read_RowPr, pTrackRevision->trPr);
@ -4080,6 +4080,30 @@ int Binary_DocumentTableReader::ReadDocumentContent(BYTE type, long length, void
READ1_DEF(length, res, this->ReadBookmarkEnd, &oBookmarkEnd);
m_oDocumentWriter.m_oContent.WriteString(oBookmarkEnd.toXML());
}
else if ( c_oSerParType::MoveFromRangeStart == type )
{
OOX::Logic::CMoveFromRangeStart oMoveFromRangeStart;
READ1_DEF(length, res, this->ReadMoveFromRangeStart, &oMoveFromRangeStart);
m_oDocumentWriter.m_oContent.WriteString(oMoveFromRangeStart.toXML());
}
else if ( c_oSerParType::MoveFromRangeEnd == type )
{
OOX::Logic::CMoveFromRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveFromRangeEnd, &oMoveToRangeEnd);
m_oDocumentWriter.m_oContent.WriteString(oMoveToRangeEnd.toXML());
}
else if ( c_oSerParType::MoveToRangeStart == type )
{
OOX::Logic::CMoveToRangeStart oMoveToRangeStart;
READ1_DEF(length, res, this->ReadMoveToRangeStart, &oMoveToRangeStart);
m_oDocumentWriter.m_oContent.WriteString(oMoveToRangeStart.toXML());
}
else if ( c_oSerParType::MoveToRangeEnd == type )
{
OOX::Logic::CMoveToRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
m_oDocumentWriter.m_oContent.WriteString(oMoveToRangeEnd.toXML());
}
else if(c_oSerParType::JsaProject == type)
{
BYTE* pData = m_oBufferedStream.GetPointer(length);
@ -4922,6 +4946,30 @@ int Binary_DocumentTableReader::ReadMathArg(BYTE type, long length, void* poResu
READ1_DEF(length, res, this->ReadBookmarkEnd, &oBookmarkEnd);
GetRunStringWriter().WriteString(oBookmarkEnd.toXML());
}
else if ( c_oSer_OMathContentType::MoveFromRangeStart == type )
{
OOX::Logic::CMoveFromRangeStart oMoveFromRangeStart;
READ1_DEF(length, res, this->ReadMoveFromRangeStart, &oMoveFromRangeStart);
GetRunStringWriter().WriteString(oMoveFromRangeStart.toXML());
}
else if ( c_oSer_OMathContentType::MoveFromRangeEnd == type )
{
OOX::Logic::CMoveFromRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveFromRangeEnd, &oMoveToRangeEnd);
GetRunStringWriter().WriteString(oMoveToRangeEnd.toXML());
}
else if ( c_oSer_OMathContentType::MoveToRangeStart == type )
{
OOX::Logic::CMoveToRangeStart oMoveToRangeStart;
READ1_DEF(length, res, this->ReadMoveToRangeStart, &oMoveToRangeStart);
GetRunStringWriter().WriteString(oMoveToRangeStart.toXML());
}
else if ( c_oSer_OMathContentType::MoveToRangeEnd == type )
{
OOX::Logic::CMoveToRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
GetRunStringWriter().WriteString(oMoveToRangeEnd.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
@ -7407,6 +7455,30 @@ int Binary_DocumentTableReader::Read_TableContent(BYTE type, long length, void*
READ1_DEF(length, res, this->ReadBookmarkEnd, &oBookmarkEnd);
pCStringWriter->WriteString(oBookmarkEnd.toXML());
}
else if ( c_oSerDocTableType::MoveFromRangeStart == type )
{
OOX::Logic::CMoveFromRangeStart oMoveFromRangeStart;
READ1_DEF(length, res, this->ReadMoveFromRangeStart, &oMoveFromRangeStart);
pCStringWriter->WriteString(oMoveFromRangeStart.toXML());
}
else if ( c_oSerDocTableType::MoveFromRangeEnd == type )
{
OOX::Logic::CMoveFromRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveFromRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else if ( c_oSerDocTableType::MoveToRangeStart == type )
{
OOX::Logic::CMoveToRangeStart oMoveToRangeStart;
READ1_DEF(length, res, this->ReadMoveToRangeStart, &oMoveToRangeStart);
pCStringWriter->WriteString(oMoveToRangeStart.toXML());
}
else if ( c_oSerDocTableType::MoveToRangeEnd == type )
{
OOX::Logic::CMoveToRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;
@ -7456,6 +7528,30 @@ int Binary_DocumentTableReader::ReadRowContent(BYTE type, long length, void* poR
READ1_DEF(length, res, this->ReadBookmarkEnd, &oBookmarkEnd);
pCStringWriter->WriteString(oBookmarkEnd.toXML());
}
else if ( c_oSerDocTableType::MoveFromRangeStart == type )
{
OOX::Logic::CMoveFromRangeStart oMoveFromRangeStart;
READ1_DEF(length, res, this->ReadMoveFromRangeStart, &oMoveFromRangeStart);
pCStringWriter->WriteString(oMoveFromRangeStart.toXML());
}
else if ( c_oSerDocTableType::MoveFromRangeEnd == type )
{
OOX::Logic::CMoveFromRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveFromRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else if ( c_oSerDocTableType::MoveToRangeStart == type )
{
OOX::Logic::CMoveToRangeStart oMoveToRangeStart;
READ1_DEF(length, res, this->ReadMoveToRangeStart, &oMoveToRangeStart);
pCStringWriter->WriteString(oMoveToRangeStart.toXML());
}
else if ( c_oSerDocTableType::MoveToRangeEnd == type )
{
OOX::Logic::CMoveToRangeEnd oMoveToRangeEnd;
READ1_DEF(length, res, this->ReadMoveToRangeEnd, &oMoveToRangeEnd);
pCStringWriter->WriteString(oMoveToRangeEnd.toXML());
}
else
res = c_oSerConstants::ReadUnknown;
return res;

View File

@ -524,7 +524,11 @@ extern int g_nCurFormatVersion;
Sdt = 10,
BookmarkStart = 11,
BookmarkEnd = 12,
tblGrid_ItemTwips = 13
tblGrid_ItemTwips = 13,
MoveFromRangeStart = 14,
MoveFromRangeEnd = 15,
MoveToRangeStart = 16,
MoveToRangeEnd = 17
};}
namespace c_oSerRunType{enum c_oSerRunType
{
@ -979,7 +983,11 @@ extern int g_nCurFormatVersion;
columnbreak = 64,
ARPr = 65,
BookmarkStart = 66,
BookmarkEnd = 67
BookmarkEnd = 67,
MoveFromRangeStart = 68,
MoveFromRangeEnd = 69,
MoveToRangeStart = 70,
MoveToRangeEnd = 71
};}
namespace c_oSer_FramePrType{ enum c_oSer_FramePrType
{

View File

@ -3082,6 +3082,34 @@ void BinaryDocumentTableWriter::WriteDocumentContent(const std::vector<OOX::Writ
WriteBookmarkEnd(*pBookmarkEnd);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}break;
case OOX::et_w_moveFromRangeStart:
{
OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeStart);
WriteMoveRangeStart(*pMoveFromRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_w_moveFromRangeEnd:
{
OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeEnd);
WriteMoveRangeEnd(*pMoveFromRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_w_moveToRangeStart:
{
OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeStart);
WriteMoveRangeStart(*pMoveToRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}break;
case OOX::et_w_moveToRangeEnd:
{
OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeEnd);
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}break;
default:
break;
}
@ -3285,39 +3313,38 @@ void BinaryDocumentTableWriter::WriteParagraphContent(const std::vector<OOX::Wri
m_oBcw.WriteItemEnd(nCurPos);
break;
}
//todo moveRange on all levels(body, p ...)
// case OOX::et_w_moveFromRangeStart:
// {
// OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
// nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeStart);
// WriteMoveRangeStart(*pMoveFromRangeStart);
// m_oBcw.WriteItemEnd(nCurPos);
// break;
// }
// case OOX::et_w_moveFromRangeEnd:
// {
// OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
// nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeEnd);
// WriteMoveRangeEnd(*pMoveFromRangeEnd);
// m_oBcw.WriteItemEnd(nCurPos);
// break;
// }
// case OOX::et_w_moveToRangeStart:
// {
// OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
// nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeStart);
// WriteMoveRangeStart(*pMoveToRangeStart);
// m_oBcw.WriteItemEnd(nCurPos);
// break;
// }
// case OOX::et_w_moveToRangeEnd:
// {
// OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
// nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeEnd);
// WriteMoveRangeEnd(*pMoveToRangeEnd);
// m_oBcw.WriteItemEnd(nCurPos);
// break;
// }
case OOX::et_w_moveFromRangeStart:
{
OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeStart);
WriteMoveRangeStart(*pMoveFromRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveFromRangeEnd:
{
OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveFromRangeEnd);
WriteMoveRangeEnd(*pMoveFromRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveToRangeStart:
{
OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeStart);
WriteMoveRangeStart(*pMoveToRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_w_moveToRangeEnd:
{
OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerParType::MoveToRangeEnd);
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
break;
}
case OOX::et_m_oMathPara:
{
OOX::Logic::COMathPara* pOMathPara = static_cast<OOX::Logic::COMathPara*>(item);
@ -4222,6 +4249,38 @@ void BinaryDocumentTableWriter::WriteMathArgNodes(const std::vector<OOX::Writing
m_oBcw.WriteItemEnd(nCurPos);
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:
{
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:
{
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:
{
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;
}
default:
break;
}
@ -6806,6 +6865,34 @@ void BinaryDocumentTableWriter::WriteTableContent(std::vector<OOX::WritingElemen
WriteBookmarkEnd(*pBookmarkEnd);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
else if(OOX::et_w_moveFromRangeStart == item->getType())
{
OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveFromRangeStart);
WriteMoveRangeStart(*pMoveFromRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveFromRangeEnd == item->getType())
{
OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveFromRangeEnd);
WriteMoveRangeEnd(*pMoveFromRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveToRangeStart == item->getType())
{
OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveToRangeStart);
WriteMoveRangeStart(*pMoveToRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveToRangeEnd == item->getType())
{
OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveToRangeEnd);
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
}
}
void BinaryDocumentTableWriter::WriteRow(const OOX::Logic::CTr& Row, OOX::Logic::CTableProperty* pTblPr, int nCurRowIndex, int nRows, int nCols)
@ -6880,6 +6967,34 @@ void BinaryDocumentTableWriter::WriteRowContent(const std::vector<OOX::WritingEl
WriteBookmarkEnd(*pBookmarkEnd);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
else if(OOX::et_w_moveFromRangeStart == item->getType())
{
OOX::Logic::CMoveFromRangeStart* pMoveFromRangeStart = static_cast<OOX::Logic::CMoveFromRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveFromRangeStart);
WriteMoveRangeStart(*pMoveFromRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveFromRangeEnd == item->getType())
{
OOX::Logic::CMoveFromRangeEnd* pMoveFromRangeEnd = static_cast<OOX::Logic::CMoveFromRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveFromRangeEnd);
WriteMoveRangeEnd(*pMoveFromRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveToRangeStart == item->getType())
{
OOX::Logic::CMoveToRangeStart* pMoveToRangeStart = static_cast<OOX::Logic::CMoveToRangeStart*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveToRangeStart);
WriteMoveRangeStart(*pMoveToRangeStart);
m_oBcw.WriteItemEnd(nCurPos);
}
else if(OOX::et_w_moveToRangeEnd == item->getType())
{
OOX::Logic::CMoveToRangeEnd* pMoveToRangeEnd = static_cast<OOX::Logic::CMoveToRangeEnd*>(item);
nCurPos = m_oBcw.WriteItemStart(c_oSerDocTableType::MoveToRangeEnd);
WriteMoveRangeEnd(*pMoveToRangeEnd);
m_oBcw.WriteItemEnd(nCurPos);
}
}
}
void BinaryDocumentTableWriter::WriteCell(OOX::Logic::CTc& tc, OOX::Logic::CTableProperty* pTblPr, int nCurRowIndex, int nCurColIndex, int nRows, int nCols)

View File

@ -193,7 +193,14 @@ std::wstring mediaitems::detectImageFileExtension(const std::wstring &fileName)
CImageFileFormatChecker image_checker;
sExt = image_checker.DetectFormatByData(buffer, buffer_size);
if (!sExt.empty()) sExt = std::wstring(L".") + sExt;
if (sExt.empty())
{
size_t n = fileName.rfind(L".");
if (n != std::wstring::npos)
sExt = XmlUtils::GetLower(fileName.substr(n));
}
else sExt = std::wstring(L".") + sExt;
}
return XmlUtils::GetLower(sExt);
}

View File

@ -493,6 +493,10 @@ void pptx_slide_context::set_image(const std::wstring & path)
impl_->object_description_.type_ = typeImage;
impl_->object_description_.xlink_href_ = path;
}
else if (impl_->object_description_.type_ == typeImage && impl_->object_description_.xlink_href_.rfind(L".svg") != std::wstring::npos)
{
impl_->object_description_.xlink_href_ = path;
}
else if (impl_->use_image_replacement_)
{
impl_->object_description_.fill_.type = 2;

View File

@ -3009,7 +3009,7 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C
if (bStroked)
{
CheckPenShape(elem, oNodeShape, pPPTShape);
CheckPenShape(elem, oNodeShape, pPPTShape);
}
CheckBrushShape(elem, oNodeShape, pPPTShape);
@ -4104,18 +4104,21 @@ void CDrawingConverter::CheckBorderShape(PPTX::Logic::SpTreeElem* oElem, XmlUtil
if (oNodeBorder.IsValid())
{
pSpPr->ln.Init();
nullable_int nWidthBorder;
XmlMacroReadAttributeBase(oNode, L"width", nWidthBorder);
nullable_string sTypeBorder;
XmlMacroReadAttributeBase(oNode, L"type", sTypeBorder);
XmlMacroReadAttributeBase(oNodeBorder, L"type", sTypeBorder);
SimpleTypes::CBorderType<> borderType;
if (sTypeBorder.IsInit())
{
SimpleTypes::CBorderType<> borderType;
borderType.FromString(sTypeBorder.get());
}
if (borderType.GetValue() != SimpleTypes::bordertypeNone)
{
pSpPr->ln.Init();
nullable_int nWidthBorder;
XmlMacroReadAttributeBase(oNodeBorder, L"width", nWidthBorder);
if (borderType.GetValue() > 0 &&
borderType.GetValue() < 6)
{
@ -4131,30 +4134,29 @@ void CDrawingConverter::CheckBorderShape(PPTX::Logic::SpTreeElem* oElem, XmlUtil
case SimpleTypes::bordertypeDotDash: pSpPr->ln->prstDash->val->SetBYTECode(1); break;
}
}
}
if (nWidthBorder.IsInit())
{
pSpPr->ln->w = (int)(*nWidthBorder * g_emu_koef);//pt to emu
}
if (sColorBorder.IsInit())
{
PPTX::Logic::SolidFill* pSolid = new PPTX::Logic::SolidFill();
pSolid->m_namespace = L"a";
pSolid->Color.Color = new PPTX::Logic::SrgbClr();
if (std::wstring::npos != sColorBorder->find(L"#"))
if (nWidthBorder.IsInit())
{
pSolid->Color.Color->SetHexString(sColorBorder->substr(1));
pSpPr->ln->w = (int)(*nWidthBorder * g_emu_koef);//pt to emu
}
else
if (sColorBorder.IsInit())
{
//"red", L"black" , .. to color
PPTX::Logic::SolidFill* pSolid = new PPTX::Logic::SolidFill();
pSolid->m_namespace = L"a";
pSolid->Color.Color = new PPTX::Logic::SrgbClr();
if (std::wstring::npos != sColorBorder->find(L"#"))
{
pSolid->Color.Color->SetHexString(sColorBorder->substr(1));
}
else
{
//"red", L"black" , .. to color
}
pSpPr->ln->Fill.m_type = PPTX::Logic::UniFill::solidFill;
pSpPr->ln->Fill.Fill = pSolid;
}
pSpPr->ln->Fill.m_type = PPTX::Logic::UniFill::solidFill;
pSpPr->ln->Fill.Fill = pSolid;
}
}
}

View File

@ -322,7 +322,21 @@ bool CImageFileFormatChecker::isSvmFile(BYTE* pBuffer,DWORD dwBytes)
return false;
}
bool CImageFileFormatChecker::isSvgFile(BYTE* pBuffer,DWORD dwBytes)
{
if (eFileType)return false;
if ( (6 <= dwBytes) &&(0x3C == pBuffer[0] && 0x3F == pBuffer[1] && 0x78 == pBuffer[2] && 0x6D == pBuffer[3]
&& 0x6C == pBuffer[4] && 0x20 == pBuffer[5]))
{
std::string sXml_part = std::string((char*)pBuffer, dwBytes);
if (sXml_part.find(std::string("svg")) != std::string::npos)
{
return true;
}
}
return false;
}
bool CImageFileFormatChecker::isJ2kFile(BYTE* pBuffer,DWORD dwBytes)
{
@ -602,6 +616,7 @@ std::wstring CImageFileFormatChecker::DetectFormatByData(BYTE *Data, int DataSiz
else if (isTiffFile(Data,DataSize))return L"tif";
else if (isWmfFile(Data,DataSize)) return L"wmf";
else if (isSvmFile(Data,DataSize)) return L"svm";
else if (isSvgFile(Data,DataSize)) return L"svg";
return L"jpg";
return L"";
}

View File

@ -103,6 +103,7 @@ public:
bool isMj2File(BYTE* pBuffer,DWORD dwBytes);
bool isIpodFile(BYTE* pBuffer,DWORD dwBytes);
bool isPgxFile(BYTE* pBuffer,DWORD dwBytes);
bool isSvgFile(BYTE* pBuffer,DWORD dwBytes);
std::wstring DetectFormatByData(BYTE *Data, int DataSize);

View File

@ -2998,7 +2998,7 @@ void BinaryWorksheetTableWriter::WriteCell(const OOX::Spreadsheet::CCell& oCell)
m_oBcw.WriteItemEnd(nCurPos);
}
//Value
if(oCell.m_oValue.IsInit())
if(oCell.m_oValue.IsInit() && !oCell.m_oValue->ToString().empty())
{
double dValue = 0;