Compare commits

...

7 Commits

Author SHA1 Message Date
9d10c4ddce Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-03-07 12:19:08 +03:00
d5026d014d . 2017-03-06 17:24:29 +03:00
ac0b7e4e22 fix bug 34019 2017-03-06 15:45:43 +03:00
623fe25415 fix 34229 2017-03-06 15:30:54 +03:00
c4c9d50aae fix bug 34222 2017-03-06 14:29:15 +03:00
5d8dda02ec pptx extended reading fix 2017-03-04 16:01:15 +03:00
bc3461147d fix pptx note slide default 2017-03-03 14:29:18 +03:00
21 changed files with 175 additions and 89 deletions

View File

@ -110,7 +110,7 @@ namespace utils {
{
if (!a_.empty())
{
return boost::lexical_cast<int>(a_.length())-1;
return boost::lexical_cast<int>(a_) - 1;
}
else
return 0;

View File

@ -1763,7 +1763,11 @@ void XlsxConverter::convert(OOX::Spreadsheet::CCellAnchor *oox_anchor)
else if (oox_anchor->m_oGroupShape.IsInit())
{
convert(oox_anchor->m_oGroupShape.GetPointer());
}
}
else if (oox_anchor->m_oGraphicFrame.IsInit())
{
OoxConverter::convert(oox_anchor->m_oGraphicFrame.GetPointer());
}
}
void XlsxConverter::convert(OOX::Spreadsheet::CDrawing *oox_drawing)

View File

@ -1090,6 +1090,11 @@ namespace NSBinPptxRW
pTxRun->SetText(_T("")); // enter simple comment here
pShape->txBody = pTxBody;
if (pShape->txBody.IsInit())
{
if (!pShape->txBody->bodyPr.IsInit())
pShape->txBody->bodyPr = new PPTX::Logic::BodyPr;
}
PPTX::Logic::RunElem elm;
pTxBody->Paragrs[0].RunElems.push_back(elm);

View File

@ -110,6 +110,8 @@ namespace PPTX
OOX::CPath FileContainer::CorrectPathRels(const OOX::CPath& path, OOX::Rels::CRelationShip* relation )
{
if (relation->IsExternal()) return relation->Target();
OOX::CPath filename = path / relation->Target();
if ( NSFile::CFileBinary::Exists(filename.GetPath()) == true ) return filename;

View File

@ -75,9 +75,9 @@ namespace PPTX
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring strName = oReader.GetName();
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (strName == L"a:graphicFrameLocks")
if (strName == L"graphicFrameLocks")
{
ReadAttributesLocks(oReader);
}
@ -98,29 +98,29 @@ namespace PPTX
{
m_namespace = XmlUtils::GetNamespace(node.GetName());
XmlUtils::CXmlNode oNode;
if (node.GetNode(_T("a:graphicFrameLocks"), oNode))
XmlUtils::CXmlNode oNode = node.ReadNodeNoNS(L"graphicFrameLocks");
if (oNode.IsValid())
{
oNode.ReadAttributeBase(L"noChangeAspect", noChangeAspect);
oNode.ReadAttributeBase(L"noDrilldown", noDrilldown);
oNode.ReadAttributeBase(L"noGrp", noGrp);
oNode.ReadAttributeBase(L"noMove", noMove);
oNode.ReadAttributeBase(L"noResize", noResize);
oNode.ReadAttributeBase(L"noSelect", noSelect);
oNode.ReadAttributeBase(L"noChangeAspect", noChangeAspect);
oNode.ReadAttributeBase(L"noDrilldown", noDrilldown);
oNode.ReadAttributeBase(L"noGrp", noGrp);
oNode.ReadAttributeBase(L"noMove", noMove);
oNode.ReadAttributeBase(L"noResize", noResize);
oNode.ReadAttributeBase(L"noSelect", noSelect);
}
}
virtual std::wstring toXML() const
{
XmlUtils::CAttribute oAttr;
oAttr.Write(_T("noChangeAspect"), noChangeAspect);
oAttr.Write(_T("noDrilldown"), noDrilldown);
oAttr.Write(_T("noGrp"), noGrp);
oAttr.Write(_T("noMove"), noMove);
oAttr.Write(_T("noResize"), noResize);
oAttr.Write(_T("noSelect"), noSelect);
oAttr.Write(_T("noChangeAspect"), noChangeAspect);
oAttr.Write(_T("noDrilldown"), noDrilldown);
oAttr.Write(_T("noGrp"), noGrp);
oAttr.Write(_T("noMove"), noMove);
oAttr.Write(_T("noResize"), noResize);
oAttr.Write(_T("noSelect"), noSelect);
return XmlUtils::CreateNode(m_namespace + L":cNvGraphicFramePr>", XmlUtils::CreateNode(_T("a:graphicFrameLocks"), oAttr));
return XmlUtils::CreateNode(m_namespace + L":cNvGraphicFramePr", oAttr.m_strValue.empty() ? L"" : XmlUtils::CreateNode(L"a:graphicFrameLocks", oAttr));
}
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
@ -128,6 +128,7 @@ namespace PPTX
std::wstring namespace_ = m_namespace;
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) namespace_ = L"xdr";
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX) namespace_ = L"wp";
pWriter->StartNode(namespace_ + L":cNvGraphicFramePr");

View File

@ -94,7 +94,7 @@ namespace PPTX
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("a:picLocks") == strName)
if (_T("picLocks") == strName)
{
ReadAttributesLocks(oReader);
}

View File

@ -82,6 +82,9 @@ namespace PPTX
if (sName == L"a:avLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
@ -97,6 +100,9 @@ namespace PPTX
}
else if (sName == L"a:gdLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
@ -114,6 +120,9 @@ namespace PPTX
rect = oReader;
else if (sName == L"a:pathLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
@ -129,6 +138,9 @@ namespace PPTX
}
else if (sName == L"a:ahLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
@ -150,6 +162,9 @@ namespace PPTX
}
else if (sName == L"a:cxnLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{

View File

@ -77,7 +77,7 @@ namespace PPTX
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start_No_NS( oReader )
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("r:embed"), embed)
WritingElement_ReadAttributes_Read_else_if( oReader, _T("r:link"), link )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("cstate"), cstate )

View File

@ -84,25 +84,13 @@ namespace PPTX
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("blip") == strName)
{
if (!blip.IsInit())
blip = oReader;
}
blip = oReader;
else if (_T("srcRect") == strName)
{
if (!srcRect.IsInit())
srcRect = oReader;
}
srcRect = oReader;
else if (_T("tile") == strName)
{
if (!tile.IsInit())
tile = oReader;
}
tile = oReader;
else if (_T("stretch") == strName)
{
if (!stretch.IsInit())
stretch = oReader;
}
stretch = oReader;
}
}
virtual OOX::EElementType getType () const

View File

@ -98,6 +98,9 @@ namespace PPTX
tileRect = oReader;
else if (_T("gsLst") == strName)
{
if ( oReader.IsEmptyNode() )
continue;
int nCurDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth1 ) )
{

View File

@ -298,6 +298,15 @@ namespace PPTX
{
nvGraphicFramePr.toXmlWriter(pWriter);
if (xfrm.IsInit() && pWriter->m_lDocType != XMLWRITER_DOC_TYPE_DOCX)
{
std::wstring namespace_ = m_namespace;
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX && pWriter->m_lGroupIndex >= 0) namespace_ = L"xdr";
xfrm->m_ns = namespace_;
xfrm->toXmlWriter(pWriter);
}
if (table.is_init())
{
pWriter->WriteString (L"<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">");
@ -322,11 +331,6 @@ namespace PPTX
pWriter->EndAttributes();
if (xfrm.IsInit())
{
xfrm->m_ns = namespace_;
xfrm->toXmlWriter(pWriter);
}
toXmlWriter2(pWriter);
pWriter->EndNode(namespace_ + L":graphicFrame");
@ -535,6 +539,11 @@ namespace PPTX
std::wstring sXml;
sXml += nvGraphicFramePr.toXML();
if (xfrm.IsInit() && m_namespace != L"wp")
{
sXml += xfrm->toXML();
}
if (table.IsInit())
{
sXml += L"<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/table\">";
@ -555,17 +564,6 @@ namespace PPTX
sXml += L"<" + m_namespace + L":graphicFrame macro=\"\">";
if (xfrm.IsInit())
{
xfrm->m_ns = m_namespace;
sXml += xfrm->toXML();
}
else
{
sXml += L"<" + m_namespace + L":xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/>";
sXml += L"</" + m_namespace + L":xfrm>";
}
sXml += toXML2();
sXml += L"</" + m_namespace + L":graphicFrame>";

View File

@ -72,9 +72,48 @@ namespace PPTX
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_namespace = XmlUtils::GetNamespace(oReader.GetName());
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"xfrm" == sName)
xfrm = oReader;
else if ( L"blipFill" == sName ||
L"gradFill" == sName ||
L"grpFill" == sName ||
L"noFill" == sName ||
L"pattFill" == sName ||
L"solidFill" == sName )
{
Fill.fromXML(oReader);
}
else if ( L"effectDag" == sName ||
L"effectLst" == sName ||
L"extLst" == sName )
{
EffectList.fromXML(oReader);
}
}
FillParentPointersForChilds();
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("bwMode"), bwMode )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
m_namespace = XmlUtils::GetNamespace(node.GetName());
node.ReadAttributeBase(L"bwMode", bwMode);
XmlUtils::CXmlNodes oNodes;

View File

@ -80,6 +80,9 @@ namespace PPTX
ph = oReader;
else if (strName == L"extLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{

View File

@ -138,6 +138,9 @@ namespace PPTX
RunElems.push_back(RunElem(oReader));
else if (_T("AlternateContent") == strName)
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{

View File

@ -75,6 +75,9 @@ namespace PPTX
if (sName == L"a:avLst")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
@ -95,7 +98,7 @@ namespace PPTX
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("r:prst"), prst)
WritingElement_ReadAttributes_ReadSingle( oReader, _T("prst"), prst)
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node)

View File

@ -75,6 +75,9 @@ namespace PPTX
if (_T("a:avLst") == strName)
{
if ( oReader.IsEmptyNode() )
continue;
int nCurDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth1 ) )
{

View File

@ -171,7 +171,7 @@ namespace PPTX
virtual std::wstring toXML() const
{
std::wstring name_;
if (m_namespace == L"wpg")
if (m_namespace == L"wp")
{
if (m_lGroupIndex == 0) name_ = L"wpg:wgp";
else name_ = L"wpg:grpSp";

View File

@ -86,6 +86,9 @@ namespace PPTX
if (strName == L"tblGrid")
{
if ( oReader.IsEmptyNode() )
continue;
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{

View File

@ -107,25 +107,36 @@ namespace PPTX
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
std::wstring strName = oReader.GetName();
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
if (_T("a:noAutofit") == strName)
type = FitNo;
else if (_T("a:spAutoFit") == strName)
type = FitSpAuto;
else if (_T("a:normAutofit") == strName)
{
std::wstring sName = oReader.GetName();
type = FitNormAuto;
ReadAttributes(oReader);
}
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
nullable_string sFontScale;
nullable_string sLnSpcRed;
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("fontScale"), sFontScale)
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("lnSpcReduction"), sLnSpcRed)
WritingElement_ReadAttributes_End( oReader )
Normalize(sFontScale, sLnSpcRed);
}
virtual void fromXML(XmlUtils::CXmlNode& node)
{
type = FitEmpty;
std::wstring strName = XmlUtils::GetNameNoNS(node.GetName());
std::wstring strName = node.GetName();
if (_T("a:noAutofit") == strName)
type = FitNo;
@ -141,33 +152,7 @@ namespace PPTX
node.ReadAttributeBase(L"fontScale", sFontScale);
node.ReadAttributeBase(L"lnSpcReduction", sLnSpcRed);
if (sFontScale.is_init())
{
int nFound = (int)sFontScale->rfind(wchar_t('%'));
if (nFound < 0)
fontScale = *sFontScale;
else
{
std::wstring sRet = sFontScale->substr(0, nFound);
double dRet = XmlUtils::GetDouble(sRet);
int val = (int)(dRet * 1000);
fontScale = val;
}
}
if (sLnSpcRed.is_init())
{
int nFound = (int)sLnSpcRed->rfind(wchar_t('%'));
if (nFound < 0)
lnSpcReduction = *sLnSpcRed;
else
{
std::wstring sRet = sLnSpcRed->substr(0, nFound);
double dRet = XmlUtils::GetDouble(sRet);
int val = (int)(dRet * 1000);
lnSpcReduction = val;
}
}
Normalize(sFontScale, sLnSpcRed);
}
}
virtual std::wstring toXML() const
@ -287,6 +272,37 @@ namespace PPTX
nullable_int lnSpcReduction;
protected:
virtual void FillParentPointersForChilds(){}
void Normalize(nullable_string & sFontScale, nullable_string & sLnSpcRed)
{
if (sFontScale.is_init())
{
int nFound = (int)sFontScale->rfind(wchar_t('%'));
if (nFound < 0)
fontScale = *sFontScale;
else
{
std::wstring sRet = sFontScale->substr(0, nFound);
double dRet = XmlUtils::GetDouble(sRet);
int val = (int)(dRet * 1000);
fontScale = val;
}
}
if (sLnSpcRed.is_init())
{
int nFound = (int)sLnSpcRed->rfind(wchar_t('%'));
if (nFound < 0)
lnSpcReduction = *sLnSpcRed;
else
{
std::wstring sRet = sLnSpcRed->substr(0, nFound);
double dRet = XmlUtils::GetDouble(sRet);
int val = (int)(dRet * 1000);
lnSpcReduction = val;
}
}
}
};
} // namespace Logic
} // namespace PPTX

View File

@ -97,7 +97,7 @@ namespace PPTX
if (spcPct.is_init())
{
oValue.m_strValue = L"<a:spcPct val=\"" + std::to_wstring(*spcPct) + L"\">";
oValue.m_strValue = L"<a:spcPct val=\"" + std::to_wstring(*spcPct) + L"\"/>";
}
else
{

View File

@ -7,7 +7,7 @@
QT -= core
QT -= gui
VERSION = 2.0.3.445
VERSION = 2.0.3.446
DEFINES += INTVER=$$VERSION
TARGET = x2t